Nov 23, 2010 05:16
Очень многие писали о TDL3 рутките, но тема внедрения не подписаных драйверов в 64 битные версии Windows сейчас весьма актуальна особеннов в свете продаж новых 64 битных платформ с уже предустановленными 64 битными версиями Windows, зачем себя лишать такого сегмента рынка, конечно не стоить. Да и жертвы на месте не стоят, банки там всякие и прочие орги апдейтятся и железо новые покупают. Ну перейду к делу, опишу 64bit driver inject на примере TDL3 64bit droper'a, достать его не сложно посерфив на порно сайтах и порталах с халявным софтом или онлайн видео вещаний, где в избытке можно найти и exploits paks/kits. И так!
TDL3 в 32 битной версии и в 64 инсталиться используя уже старый/новый трюк с API функциями "класса" AddPrintProvider. Намекаю, что таких функций еще есть и они у антивирусных компаний и проактивок не в списках, суть функций в том чтобы динамически на лету подгрюжать dll'ки ( плагины) к стандартным сервисам windows, причем указать путь к нашей inject.dll можно хоть из tmp/temp хоть с расшареного диска, потом тут же заделить после инжекта все следы и выполняется все это в контексте доверенного системного сервиса с правами SYSTEM. А имея такие права можно перезаписать Master Boot Record (MBR в дальнейшем), что позволит после ребута отключить сервис отвечающий за загрузку только подписаных драйверов. Дропер открывает handle устройства PhysicalDrive0 (NtOpenFile) и перезаписывает MBR при помощи SCSI команд в частности IOCTL_SCSI_PASS_THROUGH_DIRECT команду описаную в MSDN, потом опускает систему в ребут через ExitWindowsEx преварительно получив через токен привилегии SeShutdownPrivilege. Но перед этим TDL3 руткит записывает себя в конец не используемой секции на диск. После перезагрузки выполняется установленный руткит, но еще перед этим он дешифрует свое тело простейшим ROR loop в куске MBR высвобождая в память код назовем его Ldr16. Ldr16 это следующий уровень лоадера, именно он и патчит систему в момент загрузки чтобы отключить проверку цифровых подписей драйверов Windows и загрузить драйвер руткита. Ldr16 использует hook на handle int 13h чтобы начать работу с диском, вообщем что альтернатива веркторной таблицы прерываний IVT. Старый handle хранится в таблице для дальнейшего использования и новый хук записывается в IVT. Кстати лоадера на самом деле даже не два) В итоге Ldr16 запускает Ldr32 или Ldr64 в зависимости от Windows build, который определяется по NT заголовку. Если заголовок содержит IMAGE_NT_OPTIONAL_HDR32_MAGIC байты, то загружаем Ldr32, если нет, то Ldr64. Кроме того в TDL3 Ldr32/64 используется ручное выделение памяти ядра чтобы записать туда тело драйвера для последующей его загрузки перед вызовом IoCreateDriver.
Вот собствеенно и весь трюк, таким не сказать что новым или особо хитрым образом делается обход signature check by MS PatchGuard - он кстати имеет дурную тенденцию обновляться, поэтому стоит прибить это чудную лазейку иначе загруженый драйвер после ребута канет в небытие и ботнет ваш станет безвкусным, безрадостным (с)
driver,
research,
x64,
rootkit,
hack,
tdl3,
windows,
revers