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

Драйвера Windows - источник зла

DigitalScream

Xakep, номер #062, стр. 062-068-2


На этом пора остановиться и взглянуть на ситуацию со стороны. Функция CreateFile создана для открытия файлов. Говоря о файлах, я имею в виду все их проявления в ОС Windows: каналы, устройства, физические диски, директории и собственно файлы. Ее параметры формируются следующим образом:

Структура CreateFile

HANDLE CreateFile(

LPCTSTR lpFileName,

DWORD dwDesiredAccess,

DWORD dwShareMode,

LPSECURITY_ATTRIBUTES lpSecurityAttributes,

DWORD dwCreationDisposition,

DWORD dwFlagsAndAttributes,

HANDLE hTemplateFile

);

Подключаясь к устройству, приложение может само устанавливать настройки безопасности при работе с файлом. Среди таких настроек можно найти и флаг, отвечающий за создание эксклюзивного доступа к устройству. Это значит, что существует возможность блокировки одновременного доступа к устройству нескольким приложениям. И эксперты Microsoft подтвердили этот факт в своей официальной документации. Также было замечено, что это необходимая возможность, помогающая повысить безопасность продукта.

Так или иначе, практически ни одно из приложений для Windows, использующих драйвера, не юзает предоставленную возможность. Как следствие, это позволяет злоумышленнику подключится к необходимому устройству.

Внедрение shellcode

Определить в таких случаях вектор атаки довольно просто. Поскольку, обращаясь к драйверу, его ответ можно получить из переменной lpOutBuffer. Но не стоит забывать, что lpOutBuffer - это только адрес, указывающий на ответ. Так как драйвер имеет системные права, он может передать ответ практически в любую область памяти. Куда именно, указывает переменная lpOutBuffer. Таким образом, злоумышленник может контролировать память и тем самым внедрить туда свой эксплойт.

Но не стоит забывать о том, что разные драйвера работают с разными данными. Это значит, что один из них может принимать в качестве аргумента lpOutBuffer число, а другой – целую структуру. Поэтому часто злоумышленник вынужден разбираться в программном коде драйвера, чтобы понять, с какими структурами он имеет дело, как они обрабатываются и сохраняются. Во всем этом придется разбираться при написании эксплойта. Дело в том, что, передавая на устройство какую-либо информацию, игнорируя все его стандарты, можно легко вызвать критическое завершение работы драйвера.

Основная проблема при эксплуатации этой уязвимости – передача управления на shellcode (опять-таки придется разбирать драйвер). А раз этого не избежать, то мы примемся за Reverse-engineering.

Пример атаки

На данный момент практически не существует эксплойтов, реализующих подобную атаку. А версии тех программ, в которых были найдены уязвимости, мне так и не удалось разыскать. Но, тем не менее, я постараюсь объяснить принцип атаки. Поскольку атаки нацелены на драйвера, то искать необходимо именно их. Это довольно легко осуществить на практике. Как пример, я покажу этот процесс для Zone Alarm.

Назад на стр. 062-068-1  Содержание  Вперед на стр. 062-068-3