1 / 29

Беззащитная защита?

Беззащитная защита?. Уязвимости в драйверах режима ядра. Типы уязвимостей. Уязвимости в реализации При обработке IOCTL запросов При обработке control flow данных При обработке данных из общесистемных ресурсов Уязвимости в архитектуре. Взаимодействие с драйвером. Диспетчер ввода-вывода

garret
Download Presentation

Беззащитная защита?

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Беззащитная защита? Уязвимости в драйверах режима ядра www.esagelab.ru

  2. Типы уязвимостей • Уязвимости в реализации • При обработке IOCTL запросов • При обработке control flow данных • При обработке данных из общесистемных ресурсов • Уязвимости в архитектуре www.esagelab.ru

  3. Взаимодействие с драйвером • Диспетчер ввода-вывода • LPC • Named Pipes • Более сложные механизмы www.esagelab.ru

  4. Диспетчер ввода-вывода • Создание устройства • \Device\MyControlDevice • Создание символьной ссылки • \\.\MyControlDevice • Регистрация IRP обработчиков • IRP_MJ_CREATE • IRP_MJ_CLOSE • IRP_MJ_READ/ IRP_MJ_WRITE • IRP_MJ_DEVICE_CONTROL www.esagelab.ru

  5. Диспетчер ввода-вывода www.esagelab.ru

  6. 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

  7. Методы ввода-вывода • METHOD_BUFFERED • Проверка указателей выполняется диспетчером • Данные копируются в не подкачиваемый пул • Самый безопасный но достаточно ресурсоёмкий • METHOD_IN_DIRECT (METHOD_OUT_DIRECT) • Проверка указателей выполняется диспетчером • Для входных (выходных) данных создаётся MDL • METHOD_NEITHER • Указатели передаются драйверу «as is» • Самый быстрый но нуждающийся в дополнительных проверках безопасности www.esagelab.ru

  8. Уязвимости в реализации • Неверная проверка указателей • Неверная проверка размера данных • Неверная проверка формата данных www.esagelab.ru

  9. Проверка указателей • User Mode адреса • MM_HIGHEST_USER_ADDRESS • MmUserProbeAddress • ProbeForRead() и ProbeForWrite() • Kernel Mode адреса • MmIsAddressValid() www.esagelab.ru

  10. Другие уязвимости в реализации • Выход за границу буфера при обработке строк • При вызове strlen, strcpy, итд. • Запись по неверному Kernel Mode адресу • Как результат уязвимости в архитектуре • Некорректные дескрипторы • NtClose() -> INVALID_KERNEL_HANDLE • Double-fetch уязвимости • Пример: уязвимость MS08-061 в win32k.sys www.esagelab.ru

  11. Уязвимость типа 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-файлов в антируткитах • Поиск ядра в записях списка загруженных системных модулей • Копирование оригинального файла • Модификация копии ядра • Подмена пути в LDR_DATA_TABLE_ENTRY www.esagelab.ru

  13. Протестированные утилиты • 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 • Call Stack • win32k!NtUserMessageCall(…, lParam=Buffer, xParam=StringSize, …) • win32k!NtUserfnOUTSTRING() • nt!ProbeForWrite() • Возможность обнуления произвольного байта в Kernel Mode памяти www.esagelab.ru

  15. Системы безопасности и уязвимости в архитектуре • Необходимо препятствовать получению дескриптора устройства со стороны потенциально злонамеренного кода • Фильтрация IRM_MJ_CREATE • Перехват NtCreateFile/NtOpenFile • Препятствие копированию дескриптора • Перехват NtDuplicateHandle • Препятствие открытию процесса www.esagelab.ru

  16. Типы уязвимостей по методу эксплуатации • Перезапись памяти • Обнуление памяти • Переполнение пула • Переполнение стека www.esagelab.ru

  17. Эксплуатация перезаписи памяти • Модификация IDT • Модификация GDT • Эксплуатация методом перезаписи адреса обработчика системного вызова в KiServiceTable не надёжна www.esagelab.ru

  18. Шлюз прерывания • Offset High и Offset Low • Segment Selector • P (Present) • DPL (Descriptor Privileges Level) • D (16/32 bit) www.esagelab.ru

  19. Шлюз вызова • Type (1100b – 32-bit call gate) • Parameters Count www.esagelab.ru

  20. HalDispatchTable и уязвимости обнуления памяти • Call Stack • nt!NtQueryInternalProfile() • nt!KeQueryInternalProfile() • hal!HalQuerySystemInformation() www.esagelab.ru

  21. Эксплуатация уязвимости обнуления памяти • Поиск адреса HalDispatchTable и др. функций • Выделение памяти по 0x00000000 • Затирание нулём указателя на HalQuerySystemInformation • Вызов NtQueryInternalProfile • Замена указателя HalQuerySystemInformation на заглушку www.esagelab.ru

  22. Классические уязвимости • Переполнение Пула • Сводится к эксплуатации уязвимости перезаписи памяти • Переполнение стека • Нет необходимости копирования шеллкода на стек • Нет проверки целостности стека • Эксплуатировать очень легко  www.esagelab.ru

  23. Неэксплуатируемые уязвимости • Чтение по некорректному адресу памяти • Ошибки связанные с некорректными дескрипторами • Ошибки связанные с внезапным завершением процесса www.esagelab.ru

  24. Payload • Снятие перехватов • Запуск произвольного кода в Ring 0 • Повышение привилегий www.esagelab.ru

  25. Повышение привилегий • Получение указателя на EPROCESS системного процесса • Получение указателя на EPROCESS целевого процесса • Копирование значение поля AccessToken www.esagelab.ru

  26. www.esagelab.ru

  27. IOCTL Fuzzer • Фаззинг IOCTL запросов с любыми методами ввода-вывода • Логирование информации о запросах (включая данные) в файл или окно консоли • Фильтрация IOCTL запросов • По имени устройства • По имени драйвера • По имени процесса • По I/O Control Code www.esagelab.ru

  28. www.esagelab.ru

  29. Уязвимые продукты • 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

More Related