В выводе команды присутствует наименование модуля, его размер, счетчик использования и имена модулей, с которыми он связан. Чтобы выгрузить модуль, используется команда rmmod.
Внедрение в ядро Linux динамически загружаемых программных модулей позволяет злоумышленнику управлять операционной системой на «ядерном» уровне. Эти возможности позволяют, в том числе, скрывать файлы и процессы.
Нарушитель, действующий с правами обычного пользователя, не располагает правами, позволяющими ему полностью скрыть от наблюдателя нежелательный процесс. Одних только прав root для этого также будет маловато, нужны еще инструменты и квалификация. Но попытаться изменить уличающие его параметры процесса пользователь вполне может. Такими параметрами в первую очередь являются имя программы, обозначение (имя и номер) терминала, с которого процесс запущен, а также UID или регистрационное имя пользователя. Рассмотрим все перечисленное по порядку.
Наивно полагать, что нарушитель назовет исполняемый файл своей программы каким-нибудь зловещим именем вроде virus_hiden, trojan666 или agent007. Для маскировки, вероятно, будут использованы имена программ, которые пользователь запускает наиболее часто. Большинство команд выполняется практически мгновенно, и их имена для камуфляжа непригодны. Так, наиболее часто используемая команда ls практически никогда не отображается в списке процессов, и если такое произойдет, то это скорее вызовет настороженность администратора. Маскировать опасные продолжительные процессы можно с помощью таких безобидных названий программ, как mc, man, info, bc. Даже очень подозрительному администратору трудно усмотреть угрозу в использовании файлового менеджера, справочной системы или калькулятора.
Системные утилиты, запускаемые оболочкой по «короткому» имени, найденному с помощью переменной окружения PATH, отображаются в списке процессов также только по имени файла. Но обычный пользователь, лишенный права записи в каталоги типа /binи /sbin, сумеет запустить «двойника» такой программы только из своего домашнего каталога или каталога /tmpс указанием полного имени файла.
Довольно распространен способ сокрытия, основанный на символьном камуфляже. Он заключается в том, что создается процесс, по имени напоминающий привычную для глаза программу. Для этого используются похожие по начертанию символы в различных раскладках клавиатуры. Так, строчные символы a, c, e, о, р и заглавные символы A, B, C, E, K, O, P, T, M, X пишутся одинаково в русской и латинской кодировках.
Модифицируя исходный файл программы, используемый для проникновения в систему или перехвата данных, злоумышленник может заменить в нем аргументы командной строки, например, с помощью инструкции strcpy(argv[0], «man»). После этого запущенный процесс будет отображаться как экземпляр справочной системы.
Особо следует сказать о маскировке процессов, запускаемых из файлов-сценариев. Например, нарушитель создал атаку на переполнение ресурса дисковой памяти и написал для этого небольшой сценарий:
cat >/tmp/...
#! /bin/bash
yes abc > /tmp/abc
Ctrl+d
Присваивая файлу имя, состоящее из трех точек, нарушитель желает сделать его скрытым и неотображаемым при вводе команды ls -l. Затем, используя команду chmod 700 ...,он обеспечивает себе права на чтение и исполнение данного сценария, после чего запускает его, ожидая, что такой процесс будет «закамуфлирован». Но администратор, контролируя систему с помощью утилиты ps -ef, в это время может наблюдать два процесса, запущенные из пользовательской консоли и от его имени: /bin/bash ...и yes. Вероятно, это не совсем то, на что рассчитывал предприимчивый пользователь. Причем даже если наблюдение за процессами не было организовано и файл непомерной величины был создан, то установить его создателя и владельца будет нетрудно.
Скрытие имени процесса – наиболее простая задача. Обычному пользователю труднее скрыть от системных мониторов факт запуска программы с конкретного терминала и от имени определенного пользователя. Однако один из этих параметров закамуфлировать можно.
Самый простой путь скрытия терминала – преобразование интерактивного процесса в фоновый. Для этого командную строку следует закончить пробелом и символом &. Затем командой exit или logout следует завершить пользовательский сеанс, после чего вновь зарегистрироваться. Команда ps -ef вместо имени терминала отобразит вопросительный знак.
Команда nohup <command> позволяет процессу продолжить выполнение при потере управляющего терминала. Эту команду выгодно использовать при выполнении команды продолжительного действия. Команда запускается, после чего терминальный сеанс завершается, а программа при этом продолжает выполняться.
Что характерно: в фоновом режиме запускаются даже такие явно интерактивные команды, как passwd и su, требующие ввода пароля. Однако попытка завершить после этого пользовательский сеанс окончится неудачно: система предложит вначале завершить фоновый процесс.
Если пользователь вводит команду passwd или su и не торопится с вводом пароля, его процесс может быть зафиксирован из другой консоли с помощью команды ps -ef. Но владельцем процесса будет значиться не пользователь, а администратор. По существу дела так оно и есть – ведь эти утилиты запускаются с правами их владельца – root. Эта особенность может быть использована в целях сокрытия от администратора длительных попыток подбора пароля root с помощью утилиты su. Например, для этого пользователь создает жесткую ссылку на утилиту su из своего каталога, используя команду