Similar presentations:
Беззащитная защита. Уязвимости в драйверах режима ядра
1. Беззащитная защита?
eSage labБеззащитная защита?
Уязвимости в драйверах режима ядра
Олексюк Дмитрий
[email protected]
www.esagelab.ru
2. Типы уязвимостей
eSage labТипы уязвимостей
• Уязвимости в реализации
– При обработке IOCTL запросов
– При обработке control flow данных
– При обработке данных из общесистемных
ресурсов
• Уязвимости в архитектуре
www.esagelab.ru
3. Взаимодействие с драйвером
eSage labВзаимодействие с драйвером
Диспетчер ввода-вывода
LPC
Named Pipes
Более сложные механизмы
www.esagelab.ru
4. Диспетчер ввода-вывода
eSage labДиспетчер ввода-вывода
• Создание устройства
– \Device\MyControlDevice
• Создание символьной ссылки
– \\.\MyControlDevice
• Регистрация IRP обработчиков
–
–
–
–
IRP_MJ_CREATE
IRP_MJ_CLOSE
IRP_MJ_READ/ IRP_MJ_WRITE
IRP_MJ_DEVICE_CONTROL
www.esagelab.ru
5. Диспетчер ввода-вывода
eSage labДиспетчер ввода-вывода
www.esagelab.ru
6. I/O Control Code
eSage labI/O Control Code
• Device Type (16-31 биты)
• Access (14-16 биты)
– FILE_READ_ACCESS
– FILE_WITE_ACCESS
– FILE_ANY_ACCESS
• Function (2-14 биты)
• Method (0-2 биты)
www.esagelab.ru
7. Методы ввода-вывода
eSage labМетоды ввода-вывода
• METHOD_BUFFERED
– Проверка указателей выполняется диспетчером
– Данные копируются в не подкачиваемый пул
– Самый безопасный но достаточно ресурсоёмкий
• METHOD_IN_DIRECT (METHOD_OUT_DIRECT)
– Проверка указателей выполняется диспетчером
– Для входных (выходных) данных создаётся MDL
• METHOD_NEITHER
– Указатели передаются драйверу «as is»
– Самый быстрый но нуждающийся в дополнительных
проверках безопасности
www.esagelab.ru
8. Уязвимости в реализации
eSage labУязвимости в реализации
• Неверная проверка указателей
• Неверная проверка размера данных
• Неверная проверка формата данных
www.esagelab.ru
9. Проверка указателей
eSage labПроверка указателей
• User Mode адреса
– MM_HIGHEST_USER_ADDRESS
– MmUserProbeAddress
– ProbeForRead() и ProbeForWrite()
• Kernel Mode адреса
– MmIsAddressValid()
www.esagelab.ru
10. Другие уязвимости в реализации
eSage labДругие уязвимости в реализации
• Выход за границу буфера при обработке
строк
– При вызове strlen, strcpy, итд.
• Запись по неверному Kernel Mode адресу
– Как результат уязвимости в архитектуре
• Некорректные дескрипторы
– NtClose() -> INVALID_KERNEL_HANDLE
• Double-fetch уязвимости
– Пример: уязвимость MS08-061 в win32k.sys
www.esagelab.ru
11. Уязвимость типа double-fetch
eSage labУязвимость типа double-fetch
case IOCTL_PROCESS_DATA:
{
if (stack->Parameters.DeviceIoControl.InputBufferLength == sizeof(REQUEST_BUFFER))
{
PREQUEST_BUFFER Buff = (PREQUEST_BUFFER)Irp->AssociatedIrp.SystemBuffer;
UCHAR Data[BUFFER_SIZE];
if (Buff->Size <= sizeof(Data))
{
BOOLEAN bOk = FALSE;
__try
{
ProbeForRead(Buff->Data, Buff->Size, 1);
bOk = TRUE;
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
// ProbeForRead вызвала исключение
}
if (bOk)
{
RtlCopyMemory(Data, Buff->Data, Buff->Size);
// обработка полученых данных
}
}
}
break;
}
www.esagelab.ru
12. Ошибки при парсинге PE-файлов в антируткитах
eSage labОшибки при парсинге PE-файлов
в антируткитах
1. Поиск ядра в записях списка загруженных
системных модулей
2. Копирование оригинального файла
3. Модификация копии ядра
4. Подмена пути в LDR_DATA_TABLE_ENTRY
www.esagelab.ru
13. Протестированные утилиты
eSage labПротестированные утилиты
• Rootkit Unhooker 4.6.520.1010
– Абсолютно корректная работа
• Safe’n’Sec Rootkit Detector 1.0.0.1
– BSoD
• GMER 1.0.14.14116
– Аварийное завершение процесса gmer.exe
• IceSword 1.2.2.0
– Завершение процесса с ошибкой
www.esagelab.ru
14. Уязвимость MS08-025
eSage labУязвимость MS08-025
• Call Stack
– win32k!NtUserMessageCall(…, lParam=Buffer,
xParam=StringSize, …)
– win32k!NtUserfnOUTSTRING()
– nt!ProbeForWrite()
• Возможность обнуления произвольного байта
в Kernel Mode памяти
www.esagelab.ru
15. Системы безопасности и уязвимости в архитектуре
eSage labСистемы безопасности и
уязвимости в архитектуре
• Необходимо препятствовать получению
дескриптора устройства со стороны
потенциально злонамеренного кода
– Фильтрация IRM_MJ_CREATE
– Перехват NtCreateFile/NtOpenFile
– Препятствие копированию дескриптора
• Перехват NtDuplicateHandle
• Препятствие открытию процесса
www.esagelab.ru
16. Типы уязвимостей по методу эксплуатации
eSage labТипы уязвимостей по методу
эксплуатации
Перезапись памяти
Обнуление памяти
Переполнение пула
Переполнение стека
www.esagelab.ru
17. Эксплуатация перезаписи памяти
eSage labЭксплуатация перезаписи памяти
• Модификация IDT
• Модификация GDT
• Эксплуатация методом перезаписи адреса
обработчика системного вызова в
KiServiceTable не надёжна
www.esagelab.ru
18. Шлюз прерывания
eSage labШлюз прерывания
Offset High и Offset Low
Segment Selector
P (Present)
DPL (Descriptor Privileges Level)
D (16/32 bit)
www.esagelab.ru
19. Шлюз вызова
eSage labШлюз вызова
• Type (1100b – 32-bit call gate)
• Parameters Count
www.esagelab.ru
20. HalDispatchTable и уязвимости обнуления памяти
eSage labHalDispatchTable и уязвимости
обнуления памяти
• Call Stack
– nt!NtQueryInternalProfile()
–nt!KeQueryInternalProfile()
–hal!HalQuerySystemInformation()
www.esagelab.ru
21. Эксплуатация уязвимости обнуления памяти
eSage labЭксплуатация уязвимости
обнуления памяти
1. Поиск адреса HalDispatchTable и др.
функций
2. Выделение памяти по 0x00000000
3. Затирание нулём указателя на
HalQuerySystemInformation
4. Вызов NtQueryInternalProfile
5. Замена указателя
HalQuerySystemInformation на заглушку
www.esagelab.ru
22. Классические уязвимости
eSage labКлассические уязвимости
• Переполнение Пула
– Сводится к эксплуатации уязвимости
перезаписи памяти
• Переполнение стека
– Нет необходимости копирования шеллкода
на стек
– Нет проверки целостности стека
– Эксплуатировать очень легко
www.esagelab.ru
23. Неэксплуатируемые уязвимости
eSage labНеэксплуатируемые уязвимости
• Чтение по некорректному адресу памяти
• Ошибки связанные с некорректными
дескрипторами
• Ошибки связанные с внезапным
завершением процесса
www.esagelab.ru
24. Payload
eSage labPayload
• Снятие перехватов
• Запуск произвольного кода в Ring 0
• Повышение привилегий
www.esagelab.ru
25. Повышение привилегий
eSage labПовышение привилегий
1. Получение указателя на EPROCESS
системного процесса
2. Получение указателя на EPROCESS
целевого процесса
3. Копирование значение поля AccessToken
www.esagelab.ru
26.
eSage labwww.esagelab.ru
27. IOCTL Fuzzer
eSage labIOCTL Fuzzer
• Фаззинг IOCTL запросов с любыми методами
ввода-вывода
• Логирование информации о запросах
(включая данные) в файл или окно консоли
• Фильтрация IOCTL запросов
–
–
–
–
По имени устройства
По имени драйвера
По имени процесса
По I/O Control Code
www.esagelab.ru
28.
eSage labwww.esagelab.ru
29. Уязвимые продукты
eSage labУязвимые продукты
Kaspersky Internet Security (kl1.sys)
Defence Wall (dwall.sys)
Avira Premium Security (avgntflt.sys)
BitDefender Total Security 2009 (bdfndisf.sys)
ZoneAlarm Security Suite (srescan.sys)
Panda Global Protection 2009 (APPFLT.SYS)
Internet Security 2009 (fsdfw.sys)
И другие…
www.esagelab.ru