Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #72, ДЕКАБРЬ 2004 г.

Абсолютный ноль

Николай «GorluM» Андреев

Хакер, номер #072, стр. 072-068-5


Полный контроль

Самое приятное, что можно сделать в нулевом кольце, – это устроить разнос системе и получить полный контроль над ней путем корректирования работы драйверов. Поверь, управление драйверами дает очень большие возможности - тут и невидимые кейлоггеры, и сокрытие файла на диске, в общем, много всего вкусного.

Драйверы в винде могут взаимодействовать друг с другом и даже с пользовательским уровнем. Осуществляется это с помощью специальных пакетов ввода/вывода – IRP. Например, когда ты открываешь какой-нибудь файл с помощью функции CreateFile, создается такой пакет и посылается с некоторыми параметрами драйверу файловой системы (или другому, если ты не файл открываешь) и т.п. Чтобы контролировать работу драйвера, нужно следить за приходящими ему IRP-пакетами. Именно так, кстати, и работают персональные файрволы – они создают специальные устройства-фильтры, с помощью которых получают все IRP, адресованные устройствам \\Device\\Tcp, \\Device\\Udp и \\Device\\Raw, а дальше решают, можно им пройти дальше или нет.

Вот и нам надо научиться делать такие фильтры. Если ты перелезал на нулевой уровень привилегий с помощью написания драйвера, фильтр будет написать очень просто. Достаточно создать устройство с помощью функции IoCreateDevice, а затем присоединить его к фильтруемому девайсу с помощью функции IoAttachDevice. После этого твое устройство окажется верхним в стеке драйверов и будет получать все IRP-пакеты, адресуемые стеку. Фильтр может быть не один, поэтому каждый новый девайс прикрепляется к последнему присоединенному.

Но если ты воспользовался хакерским методом, то решение не будет таким простым. Дело в том, что при загрузке драйвера создается структура, членом которой является таблица с адресами Dispatch-функций (MajorFunction). Эта таблица заполняется в функции DriverEntry значениями, после чего именно они осуществляют обработку IRP. А если драйвера не писать, структуры не будет и перехватывать их будет нечем. Я уже молчу, что функция IoCreateDevice одним из своих параметров требует указатель на DRIVER_OBJECT. Поэтому устройство-фильтр в этом случае не прокатит.

Назад на стр. 072-068-4  Содержание  Вперед на стр. 072-068-6