"Новый" подход к обнаружению руткитов
От: gear nuke  
Дата: 11.11.07 05:23
Оценка: 43 (10)
В последнее время актуальность юзерлендных руткитов снизилась из-за практически гарантированного детекта, поэтому далее речь пойдёт о детектировании руткитов, использующих драйвера. Другие варианты кернелмодных рукитов пока так же останутся без внимания, однако изложенные ниже принципы могут быть использованы, я думаю, во всех возможных случаях.

Известные антируткиты ищут модифицированный код, скрытые структуры данных и т.п. По этим косвенным признакам делаются выводы о наличии в системе скрытого драйвера. Последние находки в дикой природе показали нестойкость такого подхода. Например ascesso попросту удаляет файл и таким образом разбор структур NTFS остаётся не у дел. Так же ходят байки о недетектируемых новых версиях Rustock C & D (хотя лично я не считаю их ничем более, поскольку Rustock на самом деле имел не буквенную, а цифровую нумерацию версий).

Не хочу уводить разговор в сторону недетектируемых существующими инструментами хуков, но всё же попробую показать, что распространённый подход не безупречен и в теории. Существует понятие "наблюдаемое поведение программы" (или "побочный эффект"). Это то, что видит пользователь как результат работы программы. В случае руткита наблюдаемым поведением будет скрытие объектов. А хуки\патчи и весь остальной 0day код руткита — это всего-лишь средства для достижения результата. Как следсивие мы имеем 2 проблемы: хуки могут быть установлены не для скрытия; один и тоже побочный эффект может быть достигнут разными путями, если инструмент не позволяет анализировать их все, то это останется незамеченным.

Если детектировать руткит по его наблюдаемому поведению, этих проблем можно избежать. У руткита оно, на первый взгляд, такое:
1. драёвер загружается, в этот момент он видим в системе;
2. драйвер каким-то образом делает себя невидимым в системе.
Делать подобный анализ программным образом довольно сложно, требуется эмуляция или песочница. А главный недостаток — когда руткит себя скрыл, его можно и "потерять".

Но можно сделать несколько проще, если вспомнить, что руткит на самом деле запускается "в цикле":
1. составляем список видимых драйверов в системе;
2. фильтруем по этому списку после ребута системы;

Что бы это беспроблемно заработало на самом деле, нужно учесть еще некоторые нюансы, но впринципе уже можно попробовать http://files.rsdn.ru/45067/zenadriver.0.25.src.rar
Исходники (только для MSVC2005) открыты, ИМХО пора уже выходить из каменного века — в security, о котрой пишет Шнайер, принято использовать публичные и как следует отпинанные обществом алгоритмы защиты.

Если кто-то решится запускать — перед этим лучше отключить все аппаратные звуковые устройсва в дистпетчере, иначе будут проблемы с эксплорером из-за карантина легитатимных драйверов, но всё должно решаться ребутом или восстановлением контрольной точки.

Ну а кавычки в теме — в память об ADinf
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.