Linux - статьи

Введение в угрозу руткитов


Все больше и больше злонамеренных программ режима пользователя, таких как трояны, бэкдоры или руткиты модифицируют существующее ПО операционной системы. Для установки одной из этих программ, атакующий должен заменить или изменить нормальные программы, входящие в состав операционной системы. Для примера давайте рассмотрим замену вездесущей команды ls. Обычные пользователи и администраторы используют команду ls для отображения содержимого директории, но модифицированная версия скроет все файлы атакующего. Утилиты, которые могут обнаруживать такой тип модификаций, называются средства проверки целостности (integrity checkers) файлов.

Давайте предположим, что атакующий не изменяет и не заменяет существующие программы, такие как ls, в файловой системе. Предположим, что вместо этого атакующий изменяет или заменяет различные компоненты ядра. Мы знаем, что многие программы режима пользователя, типа ps, ls или lsof используют системные вызовы для выполнения некоторых своих задач. Например, когда администратор исполняет команду ls, чтобы получить листинг директории, вызывается системные вызов sys_getdents. Таким образом, атакующий может изменить этот компонент ядра для сокрытия некоторых файлов или процессов.

Теперь давайте рассмотрим другой пример, где атакующий модифицирует системные вызовы sys_open и sys_read для блокирования доступа к некоторым файлам. Эти же системные вызовы используются средствами проверки целостности для проверки важных системных файлов, таких как образ ядра и загружаемые модули ядра. Когда эти утилиты пытаются сравнить хэши файлов с их исходными значениями, они не изменятся, даже если файлы изменены. Другими словами, средства проверки целостности не обнаружат модификаций критически важных файлов. Для этого нужно всего лишь перехватить два системных вызова. Весьма очевидно, что если компоненты ядра изменены атакующим, пользователи и администраторы не могут доверять результатам, полученным от ядра или от любых имеющих отношение к защите утилит, запущенных пользователем.

Linux руткиты режима ядра или другие виды злонамеренного кода устанавливаются непосредственно в область памяти, выделенную для кода ядра, и являются действительно мощными. Они модифицируют структуры ядра для фильтрации данных, которые будут скрыты от системного администратора. Чтобы фильтровать эти данные, необходимо перехватить управление над некоторыми компонентами ядра, такими как системные вызовы, обработчики прерываний, внутренние функции netfilter и другими. Просто представьте себе несколько мест ядра операционной системы, где таким управлением можно манипулировать. На этом месте важно понять некоторые из самых популярных принципов атаки.



Содержание раздела