| ||||||||||||||||
| ||||||||||||||||
| ||||||||||||||||
Поиск закладок 2. Борьба с adore После публикации рассказки "Поиск Закладок" ко мне пришло много писем, в которых разными словами выражалась фраза "все это мелочи. вот поставят руткит, который модулем встает, и все". "От руткита с модулями защиты нет, спасайся, кто может". Решил я проверить это утверждение. Пошел, почитал форумы, купил пару номеров "Хакера". Все, как один, советуют брать Adore. Умеет всё и при правильной настройке его невозможно засечь. Решил попробовать. Взял недавно установленный Gentoo, решил в нем установить руткит и затем попробовать найти его.
Сборка его не представляет никаких проблем.
Вот первая засада, которая поджидает неопытных хакеров. В соответствующих файлах нет волшебной строки MODULE_LICENSE("GPL"), поэтому в логах будет ругань. Но мы считаем, что никто ничего не заметил. После 3х волшебных команд руткит установлен. Как можно убедиться, в списке модулей его не видно.
Не видно и каких-либо других признаков присутствия в системе руткита. Но сам по себе руткит безобиден. Он не откроет вам доступ, он не потрет логи ... он ничего сам не сделает. Но он умеет скрывать от системы файлы, каталоги и процессы. В общем, он работает помошником для скрытия троянцев. Так как искать троянцев лень, решаю назначить на эту почетную должность демона ssh. А чем не троянец? На порту висит, в процессах участвует и пользователя удаленно пускает. Скрываем ssh из таблицы процессов.
Как видим, операция удалась. Все видимые упоминания о ssh исчезли из таблицы процессов, /proc и так далее. Плюс ava автоматически скрыла тот каталог, из которого запускалась. Но ведь ssh работает, пускает пользователей и вообще ведет себя так, как будто ничего не случилось. Посмотрим, как видится ssh для системных утилит.
Вот и первый звоночек. Система не может понять, что за процесс слушает 22й порт. В принципе, наличие таких записей должно являться первым симптомом, что в системе что-то не так. Но пусть это будет маленькой недоработкой "трояна". Ведь в принципе никто не мешал ему пересобрать netstat. Или может быть в следующей версии adore появится скрытие портов ... Однако от удаленного сканирования портов пока не спасает ничто. Даже если троянец будет отбрасывать все соединения, кроме "хозяйских", все равно разница между результатами от двух nmap с разными параметрами выдаст его. Но предположим, троянец вообще очень умный и сам связывается с хозяином по хитрому. То есть в общем случае снаружи его никак не обнаружить. То есть мы пришли к выводу, которым растрясают хакеры: скрытый "модульным" руткитом троян невозможно обнаружить? Однако стоит немного подумать (знающим - поглядеть в код adore - врага надо знать в лицо) и сама сила "модульных" руткитов становится их слабостью. У них большие проблемы: надо скрыть процесс от системных утилит и одновременно дать системе управлять процессом. А ведь каждый процесс в системе имеет pid, держит открытым как минимум один файл (сам себя), использует память и другие ресурсы. Вот по ним и можно понять, что где-то что-то не то. Вот я и решил сыграть на том, что каждый процесс имеет свой pid. Даже если он скрыт из общедоступных мест. Написал маленький скрипт на perl, который забирает номера всех pid'ов из /proc, затем втупую перебирает весь доступный диапазон (кроме полученных pid'ов) и пытается перейти в каталог /proc/номер_pid/. Если это удалось, он считает, что нашел скрытый процесс и выводит его pid с дополнительной информацией. А уж ваше дело разобраться, что к чему. Понятно, что перед "исследованием" надо притормозить всякие процессы, которые могут создать своих потомков во время тестирования. Ну или затем их вручную отсеять. Я перегрузил машину и заново включил adore. Кстати, работает он довольно неустойчиво - иногда скрывает лишние процессы. На роль трояна я снова выбрал бедный ssh
Как видите, скрипт поймал скрытый процесс. Что и требовалось доказать. Я опять же повторюсь - это не единственный способ поймать руткит. Просто самый примитивный. Подобных способов много (и как обычно, я буду злым гоблином и не расскажу про них). Есть даже специальные программы, которые ищут руткиты. Но они, как и все остальное, бессильны перед разумом человека. Да, я еще раз повторюсь. Уберите с систем все лишнее. К примеру, пересобери я ядро без поддержки модулей - и руткиту некуда было бы вставать. И так далее и тому подобное. В общем, мойте руки перед едой и думайте головой. Ниже скрипт, который ищет скрытые adore процессы. Написан на коленке и только для демонстрации процесса, поэтому все претензии по поводу кода не принимаются.
|
|
| ||||||||||||||||
|