• Партнер

  • О руткитах уже писали; писали, что главная задача любого руткита - "позволить хакеру возвращаться в систему и не быть при этом замеченным". Писали, что этого достигается посредством замены системных программ и установки "протрояненных" демонов…

    Но время этих руткитов проходит - руткиты меняются. Современные руткиты больше не меняют ps и ls, не устанавливают протроянненый passwd и inetd - теперь руткиты добрались до сердца ОС - ее ядра (kernel). Такие руткиты мы и рассмотрим.

    LKM-руткиты достигают своей цели посредством искажения работы системы на уровне манипуляциями системными вызовами (sys_getdents, sys_write, sys_close, sys_kill, sys_fork, sys_clone, sys_symlink - в случае с руткитом Adore, который мы позже рассмотрим). Для этого руткит использует загружаемые модули ядра (Loadable Kernel Modules - отсюда и сокращение -
    LKM).

    Загружаемы модули ядра были задуманы для повышения функциональности ядра и вместе с тем сохранения его разумного размера. В общем виде работа с загружаемыми модулями происходит следующим образом: если происходит обращение к ресурсу, недоступному в данный момент, то происходит обращение к демону ядра (/sbin/kerneld ), который подгружает необходимый модуль и ядро продолжает свою работу. Находясь в системе в виде модуля, руткит может вызывать следующую манипуляцию: при вызове, к примеру, sys_open (оригинальный вызов) вызывается некая функция open_hacked ("хакерская" функция) и результаты ее работы выдаются за результаты работы оригинального
    sys_open.

    С другой стороны - все программы (к примеру ls) используют системные вызовы и если эти системные вызовы исказить, то изменится и информация, выдаваемая программой. Т.е. чтобы исказить выходные результаты, вовсе не обязательно заменять саму программу (как было раньше). В результате становят бесполезным такой способ борьбы с руткитами как контрольные суммы "бинарников", перестановка системных программ.

    Итак, LKM-руткиты манипулируют системными вызовами, но что же они умеют?

    Adore

    Изменяемые процедуры: sys_getdents, sys_write, sys_close, sys_kill, sys_fork, sys_clone, sys_symlink

    Сокрытие процессов, файлов, соединений, препятствует записи "ненужных" логов. Можно сказать - стандартный
    джентльменский набор. С детства любит Linux, но есть и версия для FreeBSD - AdoreBSD. Руткит динамично развивается - текущая версия - 0.39b4.

    Knark

    Манипулируемые вызовы: sys_getdents, sys_ioctl, sys_settimeofday, sys_kill, sys_fork, sys_clone, sys_read, sys_execve

    Тот же джентльменский набор + возможность исполнения команд посланных с удаленного хоста. Опять же динамично развивается - текущая версия - 0.59 дружит с Linux 2.2.

    Rial

    Манипулируемые вызовы: sys_getdents, sys_query_module, sys_read, sys_open, sys_close

    Стандартный набор + очень интересная возможность - скрытие части файлов. Механизм работы прост и гениален одновременно: если в файле имеется два <секретных_фрагмента>, то все что находится между этими фрагментами будет скрыто (и
    сами фрагменты тоже). Написан для Linux 2.2.

    Synapsis

    Манипулируемые вызовы: sys_getdents, sys_getuid, sys_query_module, sys_kill, sys_fork, sys_clone, sys_open

    Скрывает файлы, процессы и пользователей. Дает рута пользователю с UID=666 (очень оригинально ;-). Скрывает открытые порты. Задуман для Linux 2.1, 2.2.

    Heroin

    Подставу искать тут: sys_getdents, sys_query_module, sys_read, sys_kill

    Скрывает файлы и процессы. Очень действенный инструмент, предназначенный для Linux 2.1.

    Afhrm

    Изменяемые функции: sys_getdents, sys_open

    Спрячет твои файлы от глаз пытливого админа. Очень старый инструмент, написанный для Linux 2.0

    Вот тебе и небольшая коллекция… конечно это еще не все LKM-руткиты, но думаю - самые достойные. 

    Как же засечь подобный руткит? Т.к. это модуль, то можно попробовать:

    1. Команду lsmod
    2. Проверить содержимое файла /proc/modules ( cat /proc/modules ).

    Хочу сразу предупредить - пробуй оба способа, т.к. различные руткиты имеют от них разный "иммунитет". К примеру, Synapsis прячет себя от lsmod (но виден через cat /proc/modules ), Rial - попадется на оба сразу, а adore и knark ты так вообще не найдешь…

    К счастью для админов (и к несчастью для кулхацкеров) есть способ лучше - т.к. руткит замещает системные вызовы своими собственными функциями, то он изменяет так называемую "таблицу системных вызовов". С другой стороны существует файл system.map, который создается при компиляции ядра и содержит информацию об оригинальных адресах. Так…берем
    kern_check.c.gz и сравниваем…

    Но нет предела совершенству и LKM-руткиты - это уже "последний писк". Мысль авторов руткитов пошла дальше - зачем внедряться в ядро, если можно писать сразу в память? Именно так и родилось новое поколение руткитов, пионером которого является
    Kernel Intrusion System (KIS). KIS позволит скрыть файл, процесс, соединение, предотвратить запись ненужных логов, но главное - это условия, которые ему нужны: если LKM-руткит можно остановить используя статичное ядро (т.е. без использования загружаемых модулей), то все что нужно для KIS - это возможность записи в память (/dev/kmem), а подобное разрешение прописано в самом ядре…

    Как же бороться с руткитами? Совет стар и универсален, как доктор Айболит - просто не давай себя поломать…

    Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии