290 likes | 489 Views
Беззащитная защита?. Уязвимости в драйверах режима ядра. Типы уязвимостей. Уязвимости в реализации При обработке IOCTL запросов При обработке control flow данных При обработке данных из общесистемных ресурсов Уязвимости в архитектуре. Взаимодействие с драйвером. Диспетчер ввода-вывода
E N D
Беззащитная защита? Уязвимости в драйверах режима ядра www.esagelab.ru
Типы уязвимостей • Уязвимости в реализации • При обработке IOCTL запросов • При обработке control flow данных • При обработке данных из общесистемных ресурсов • Уязвимости в архитектуре www.esagelab.ru
Взаимодействие с драйвером • Диспетчер ввода-вывода • LPC • Named Pipes • Более сложные механизмы www.esagelab.ru
Диспетчер ввода-вывода • Создание устройства • \Device\MyControlDevice • Создание символьной ссылки • \\.\MyControlDevice • Регистрация IRP обработчиков • IRP_MJ_CREATE • IRP_MJ_CLOSE • IRP_MJ_READ/ IRP_MJ_WRITE • IRP_MJ_DEVICE_CONTROL www.esagelab.ru
Диспетчер ввода-вывода 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 биты) www.esagelab.ru
Методы ввода-вывода • METHOD_BUFFERED • Проверка указателей выполняется диспетчером • Данные копируются в не подкачиваемый пул • Самый безопасный но достаточно ресурсоёмкий • METHOD_IN_DIRECT (METHOD_OUT_DIRECT) • Проверка указателей выполняется диспетчером • Для входных (выходных) данных создаётся MDL • METHOD_NEITHER • Указатели передаются драйверу «as is» • Самый быстрый но нуждающийся в дополнительных проверках безопасности www.esagelab.ru
Уязвимости в реализации • Неверная проверка указателей • Неверная проверка размера данных • Неверная проверка формата данных www.esagelab.ru
Проверка указателей • User Mode адреса • MM_HIGHEST_USER_ADDRESS • MmUserProbeAddress • ProbeForRead() и ProbeForWrite() • Kernel Mode адреса • MmIsAddressValid() www.esagelab.ru
Другие уязвимости в реализации • Выход за границу буфера при обработке строк • При вызове strlen, strcpy, итд. • Запись по неверному Kernel Mode адресу • Как результат уязвимости в архитектуре • Некорректные дескрипторы • NtClose() -> INVALID_KERNEL_HANDLE • Double-fetch уязвимости • Пример: уязвимость MS08-061 в win32k.sys www.esagelab.ru
Уязвимость типа 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
Ошибки при парсинге PE-файлов в антируткитах • Поиск ядра в записях списка загруженных системных модулей • Копирование оригинального файла • Модификация копии ядра • Подмена пути в LDR_DATA_TABLE_ENTRY 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 • Завершение процесса с ошибкой www.esagelab.ru
Уязвимость MS08-025 • Call Stack • win32k!NtUserMessageCall(…, lParam=Buffer, xParam=StringSize, …) • win32k!NtUserfnOUTSTRING() • nt!ProbeForWrite() • Возможность обнуления произвольного байта в Kernel Mode памяти www.esagelab.ru
Системы безопасности и уязвимости в архитектуре • Необходимо препятствовать получению дескриптора устройства со стороны потенциально злонамеренного кода • Фильтрация IRM_MJ_CREATE • Перехват NtCreateFile/NtOpenFile • Препятствие копированию дескриптора • Перехват NtDuplicateHandle • Препятствие открытию процесса www.esagelab.ru
Типы уязвимостей по методу эксплуатации • Перезапись памяти • Обнуление памяти • Переполнение пула • Переполнение стека www.esagelab.ru
Эксплуатация перезаписи памяти • Модификация IDT • Модификация GDT • Эксплуатация методом перезаписи адреса обработчика системного вызова в KiServiceTable не надёжна www.esagelab.ru
Шлюз прерывания • Offset High и Offset Low • Segment Selector • P (Present) • DPL (Descriptor Privileges Level) • D (16/32 bit) www.esagelab.ru
Шлюз вызова • Type (1100b – 32-bit call gate) • Parameters Count www.esagelab.ru
HalDispatchTable и уязвимости обнуления памяти • Call Stack • nt!NtQueryInternalProfile() • nt!KeQueryInternalProfile() • hal!HalQuerySystemInformation() www.esagelab.ru
Эксплуатация уязвимости обнуления памяти • Поиск адреса HalDispatchTable и др. функций • Выделение памяти по 0x00000000 • Затирание нулём указателя на HalQuerySystemInformation • Вызов NtQueryInternalProfile • Замена указателя HalQuerySystemInformation на заглушку www.esagelab.ru
Классические уязвимости • Переполнение Пула • Сводится к эксплуатации уязвимости перезаписи памяти • Переполнение стека • Нет необходимости копирования шеллкода на стек • Нет проверки целостности стека • Эксплуатировать очень легко www.esagelab.ru
Неэксплуатируемые уязвимости • Чтение по некорректному адресу памяти • Ошибки связанные с некорректными дескрипторами • Ошибки связанные с внезапным завершением процесса www.esagelab.ru
Payload • Снятие перехватов • Запуск произвольного кода в Ring 0 • Повышение привилегий www.esagelab.ru
Повышение привилегий • Получение указателя на EPROCESS системного процесса • Получение указателя на EPROCESS целевого процесса • Копирование значение поля AccessToken www.esagelab.ru
IOCTL Fuzzer • Фаззинг IOCTL запросов с любыми методами ввода-вывода • Логирование информации о запросах (включая данные) в файл или окно консоли • Фильтрация IOCTL запросов • По имени устройства • По имени драйвера • По имени процесса • По I/O Control Code 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) • И другие… www.esagelab.ru