Беззащитная защита?
description
Transcript of Беззащитная защита?
![Page 1: Беззащитная защита?](https://reader035.fdocuments.net/reader035/viewer/2022070413/56814cfe550346895dba236c/html5/thumbnails/1.jpg)
www.esagelab.ru
Олексюк Дмитрий[email protected]
eSage lab
Беззащитная защита?
Уязвимости в драйверах режима ядра
![Page 2: Беззащитная защита?](https://reader035.fdocuments.net/reader035/viewer/2022070413/56814cfe550346895dba236c/html5/thumbnails/2.jpg)
eSage lab
www.esagelab.ru
Типы уязвимостей
• Уязвимости в реализации– При обработке IOCTL запросов– При обработке control flow данных– При обработке данных из общесистемных
ресурсов
• Уязвимости в архитектуре
![Page 3: Беззащитная защита?](https://reader035.fdocuments.net/reader035/viewer/2022070413/56814cfe550346895dba236c/html5/thumbnails/3.jpg)
eSage lab
www.esagelab.ru
Взаимодействие с драйвером
• Диспетчер ввода-вывода• LPC• Named Pipes• Более сложные механизмы
![Page 4: Беззащитная защита?](https://reader035.fdocuments.net/reader035/viewer/2022070413/56814cfe550346895dba236c/html5/thumbnails/4.jpg)
eSage lab
www.esagelab.ru
Диспетчер ввода-вывода• Создание устройства
– \Device\MyControlDevice
• Создание символьной ссылки– \\.\MyControlDevice
• Регистрация IRP обработчиков– IRP_MJ_CREATE– IRP_MJ_CLOSE– IRP_MJ_READ/ IRP_MJ_WRITE– IRP_MJ_DEVICE_CONTROL
![Page 5: Беззащитная защита?](https://reader035.fdocuments.net/reader035/viewer/2022070413/56814cfe550346895dba236c/html5/thumbnails/5.jpg)
eSage lab
www.esagelab.ru
Диспетчер ввода-вывода
![Page 6: Беззащитная защита?](https://reader035.fdocuments.net/reader035/viewer/2022070413/56814cfe550346895dba236c/html5/thumbnails/6.jpg)
eSage lab
www.esagelab.ru
I/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 биты)
![Page 7: Беззащитная защита?](https://reader035.fdocuments.net/reader035/viewer/2022070413/56814cfe550346895dba236c/html5/thumbnails/7.jpg)
eSage lab
www.esagelab.ru
Методы ввода-вывода• METHOD_BUFFERED
– Проверка указателей выполняется диспетчером– Данные копируются в не подкачиваемый пул– Самый безопасный но достаточно ресурсоёмкий
• METHOD_IN_DIRECT (METHOD_OUT_DIRECT)– Проверка указателей выполняется диспетчером– Для входных (выходных) данных создаётся MDL
• METHOD_NEITHER– Указатели передаются драйверу «as is»– Самый быстрый но нуждающийся в дополнительных
проверках безопасности
![Page 8: Беззащитная защита?](https://reader035.fdocuments.net/reader035/viewer/2022070413/56814cfe550346895dba236c/html5/thumbnails/8.jpg)
eSage lab
www.esagelab.ru
Уязвимости в реализации
• Неверная проверка указателей• Неверная проверка размера данных• Неверная проверка формата данных
![Page 9: Беззащитная защита?](https://reader035.fdocuments.net/reader035/viewer/2022070413/56814cfe550346895dba236c/html5/thumbnails/9.jpg)
eSage lab
www.esagelab.ru
Проверка указателей
• User Mode адреса– MM_HIGHEST_USER_ADDRESS– MmUserProbeAddress – ProbeForRead() и ProbeForWrite()
• Kernel Mode адреса– MmIsAddressValid()
![Page 10: Беззащитная защита?](https://reader035.fdocuments.net/reader035/viewer/2022070413/56814cfe550346895dba236c/html5/thumbnails/10.jpg)
eSage lab
www.esagelab.ru
Другие уязвимости в реализации• Выход за границу буфера при обработке
строк– При вызове strlen, strcpy, итд.
• Запись по неверному Kernel Mode адресу– Как результат уязвимости в архитектуре
• Некорректные дескрипторы– NtClose() -> INVALID_KERNEL_HANDLE
• Double-fetch уязвимости– Пример: уязвимость MS08-061 в win32k.sys
![Page 11: Беззащитная защита?](https://reader035.fdocuments.net/reader035/viewer/2022070413/56814cfe550346895dba236c/html5/thumbnails/11.jpg)
eSage lab
www.esagelab.ru
Уязвимость типа double-fetchcase 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; }
![Page 12: Беззащитная защита?](https://reader035.fdocuments.net/reader035/viewer/2022070413/56814cfe550346895dba236c/html5/thumbnails/12.jpg)
eSage lab
www.esagelab.ru
Ошибки при парсинге PE-файлов в антируткитах
1. Поиск ядра в записях списка загруженных системных модулей
2. Копирование оригинального файла
3. Модификация копии ядра
4. Подмена пути в LDR_DATA_TABLE_ENTRY
![Page 13: Беззащитная защита?](https://reader035.fdocuments.net/reader035/viewer/2022070413/56814cfe550346895dba236c/html5/thumbnails/13.jpg)
eSage lab
www.esagelab.ru
Протестированные утилиты• 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 – Завершение процесса с ошибкой
![Page 14: Беззащитная защита?](https://reader035.fdocuments.net/reader035/viewer/2022070413/56814cfe550346895dba236c/html5/thumbnails/14.jpg)
eSage lab
www.esagelab.ru
Уязвимость MS08-025
• Call Stack– win32k!NtUserMessageCall(…, lParam=Buffer,
xParam=StringSize, …)– win32k!NtUserfnOUTSTRING()
– nt!ProbeForWrite()
• Возможность обнуления произвольного байта в Kernel Mode памяти
![Page 15: Беззащитная защита?](https://reader035.fdocuments.net/reader035/viewer/2022070413/56814cfe550346895dba236c/html5/thumbnails/15.jpg)
eSage lab
www.esagelab.ru
Системы безопасности и уязвимости в архитектуре
• Необходимо препятствовать получению дескриптора устройства со стороны потенциально злонамеренного кода– Фильтрация IRM_MJ_CREATE– Перехват NtCreateFile/NtOpenFile– Препятствие копированию дескриптора
• Перехват NtDuplicateHandle• Препятствие открытию процесса
![Page 16: Беззащитная защита?](https://reader035.fdocuments.net/reader035/viewer/2022070413/56814cfe550346895dba236c/html5/thumbnails/16.jpg)
eSage lab
www.esagelab.ru
Типы уязвимостей по методу эксплуатации
• Перезапись памяти• Обнуление памяти• Переполнение пула• Переполнение стека
![Page 17: Беззащитная защита?](https://reader035.fdocuments.net/reader035/viewer/2022070413/56814cfe550346895dba236c/html5/thumbnails/17.jpg)
eSage lab
www.esagelab.ru
Эксплуатация перезаписи памяти
• Модификация IDT• Модификация GDT• Эксплуатация методом перезаписи адреса
обработчика системного вызова в KiServiceTable не надёжна
![Page 18: Беззащитная защита?](https://reader035.fdocuments.net/reader035/viewer/2022070413/56814cfe550346895dba236c/html5/thumbnails/18.jpg)
eSage lab
www.esagelab.ru
Шлюз прерывания
• Offset High и Offset Low• Segment Selector• P (Present)• DPL (Descriptor Privileges Level)• D (16/32 bit)
![Page 19: Беззащитная защита?](https://reader035.fdocuments.net/reader035/viewer/2022070413/56814cfe550346895dba236c/html5/thumbnails/19.jpg)
eSage lab
www.esagelab.ru
Шлюз вызова
• Type (1100b – 32-bit call gate)• Parameters Count
![Page 20: Беззащитная защита?](https://reader035.fdocuments.net/reader035/viewer/2022070413/56814cfe550346895dba236c/html5/thumbnails/20.jpg)
eSage lab
www.esagelab.ru
HalDispatchTable и уязвимости обнуления памяти
• Call Stack– nt!NtQueryInternalProfile()
–nt!KeQueryInternalProfile()–hal!HalQuerySystemInformation()
![Page 21: Беззащитная защита?](https://reader035.fdocuments.net/reader035/viewer/2022070413/56814cfe550346895dba236c/html5/thumbnails/21.jpg)
eSage lab
www.esagelab.ru
Эксплуатация уязвимости обнуления памяти
1. Поиск адреса HalDispatchTable и др. функций
2. Выделение памяти по 0x00000000
3. Затирание нулём указателя на HalQuerySystemInformation
4. Вызов NtQueryInternalProfile
5. Замена указателя HalQuerySystemInformation на заглушку
![Page 22: Беззащитная защита?](https://reader035.fdocuments.net/reader035/viewer/2022070413/56814cfe550346895dba236c/html5/thumbnails/22.jpg)
eSage lab
www.esagelab.ru
Классические уязвимости• Переполнение Пула
– Сводится к эксплуатации уязвимости перезаписи памяти
• Переполнение стека– Нет необходимости копирования шеллкода
на стек– Нет проверки целостности стека– Эксплуатировать очень легко
![Page 23: Беззащитная защита?](https://reader035.fdocuments.net/reader035/viewer/2022070413/56814cfe550346895dba236c/html5/thumbnails/23.jpg)
eSage lab
www.esagelab.ru
Неэксплуатируемые уязвимости
• Чтение по некорректному адресу памяти• Ошибки связанные с некорректными
дескрипторами• Ошибки связанные с внезапным
завершением процесса
![Page 24: Беззащитная защита?](https://reader035.fdocuments.net/reader035/viewer/2022070413/56814cfe550346895dba236c/html5/thumbnails/24.jpg)
eSage lab
www.esagelab.ru
Payload
• Снятие перехватов• Запуск произвольного кода в Ring 0• Повышение привилегий
![Page 25: Беззащитная защита?](https://reader035.fdocuments.net/reader035/viewer/2022070413/56814cfe550346895dba236c/html5/thumbnails/25.jpg)
eSage lab
www.esagelab.ru
Повышение привилегий
1. Получение указателя на EPROCESS системного процесса
2. Получение указателя на EPROCESS целевого процесса
3. Копирование значение поля AccessToken
![Page 26: Беззащитная защита?](https://reader035.fdocuments.net/reader035/viewer/2022070413/56814cfe550346895dba236c/html5/thumbnails/26.jpg)
eSage lab
www.esagelab.ru
![Page 27: Беззащитная защита?](https://reader035.fdocuments.net/reader035/viewer/2022070413/56814cfe550346895dba236c/html5/thumbnails/27.jpg)
eSage lab
www.esagelab.ru
IOCTL Fuzzer• Фаззинг IOCTL запросов с любыми методами
ввода-вывода• Логирование информации о запросах
(включая данные) в файл или окно консоли• Фильтрация IOCTL запросов
– По имени устройства– По имени драйвера– По имени процесса– По I/O Control Code
![Page 28: Беззащитная защита?](https://reader035.fdocuments.net/reader035/viewer/2022070413/56814cfe550346895dba236c/html5/thumbnails/28.jpg)
eSage lab
www.esagelab.ru
![Page 29: Беззащитная защита?](https://reader035.fdocuments.net/reader035/viewer/2022070413/56814cfe550346895dba236c/html5/thumbnails/29.jpg)
eSage lab
www.esagelab.ru
Уязвимые продукты• 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)• И другие…