Резюме:

Была обнаружена
серьезная дыра в системе безопасности во
многих драйверах Windows NT/2000. Суть состоит в
неправильном разборе символов строки
функцией отладки, которая используется в
большинстве Виндозных драйверов. Это может
вызвать переполнение внутреннего буфера,
которое в свою очередь может привести к
чему угодно, начиная от исполнения
произвольного кода и заканчивая ДОС атакой
(синий экран). Это особенно опасно, если
драйвера запущены с высокими привилегиями.

Детали:

Многие драйверы NT
потенциально уязвимы к "format string bug". Эта
проблема связана с функцией DbgPrint, которая
используется для отладочных мессаг.
Некоторые драйвера используют
дополнительные вторичные функции, вместо
того, чтобы использовать эту функцию
напрямую. Эти функции добавляют префикс к
выведенной строке, форматируют строки и
передают окончательную строку до DbgPrint. DbgPrint
дальше так же форматирует строку по своему
усмотрению. Все это выглядит примерно так:

void DebugMessage(const char * format, …)
{
char buf[1024];
int outLen;
ULONG PrefLen;
va_list argptr;

strcpy(buf, "DriverName: ");
PrefLen = strlen(buf);
va_start( argptr, format );
outLen = _vsnprintf( buf+PrefLen, sizeof(buf)-PrefLen, format, argptr );
va_end( argptr );
DbgPrint(buf);
}

Как видно, все это похоже
практически на неуязвимый код. Но только до
тех пор, пока управление не передается DbgPrint.
Поэтому, можно сделать так:

DebugMessage("MajorFunction = %d, filename
= "%-*S\n", CurrentLocation->MajorFunction, FileObject->FileName.
Length, FileObject->FileName.Buffer); 

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

Этот баг очень опасен,
потому что он может привести к залезанию в
память ядра. Демонстрация (ниже) работы бага
показывает, как с помощью оного и маленькой
проги можно пропатчить ядро. Эксплоит
позволяет обходить проверку системы
безопасности, что приводит к тому, что любой
юзверь может получить доступ к любому файлу,
к установке и запуску драйверов и т.д.

Демонстрация:

Для дублирования
проблемы, сделайте следующее:

  1. Войдите как администратор.
  2. Распакуйте fsedemo.zip
  3. Запустите install.bat,
    который скопирует драйвер fse1.sys в %SystemRoot%\system32\drivers.
    Зарегистрируйтесь и запустите драйвер.
  4. Запустите fsetest.exe и
    следите за его отчетами.
  5. Войдите, как
    обыкновенный юзер.
  6. Попробуйте открыть
    файлы, которые раньше могли открывать
    только админы.

Не забудьте удалить
драйвер после теста! Это можно сделать,
запустив uninstall.bat.

Скачать демо можно тут: FSADemo.zip

Оставить мнение

Check Also

Алмазный фонд «Хакера». Самые крутые материалы по реверсингу и malware за три года

Иногда мы, редакторы и авторы «Хакера», сами читаем «Хакер». Нет, ну то есть мы постоянно …