Содержание
- 2. Драйверы часто встречаются в Антивирусах – доступ к файловой системе, перехват системных функций Межсетевых экранах –
- 3. Взаимодействие GUI NTDLL.DLL I/O manager Driver Kernel space User space Режим ядра Пользовательский режим NtDeviceIoControlFile Kernel32.dll
- 4. Функция DeviceIoControl Параметры hDevice – описатель устройства dwIoControlCode - управляющий код ввода-вывода lpInBuffer – указатель на
- 5. Информация закодированная в dwIoControlCode Метод передачи данных – способ передачи входных данных Идентификатор функции – идентификатор
- 6. Методы передачи входных данных METHOD_BUFFERED METHOD_IN_DIRECT METHOD_OUT_DIRECT METHOD_NEITHER
- 7. Метод: METHOD_BUFFERED Проверка входных параметров функциями ProbeForRead, ProbeForWrite I/O manager выделяет память в пространстве ядра Объём
- 8. Метод: METHOD_IN_DIRECT, METHOD_OUT_DIRECT Проверка входных параметров функциями ProbeForWrite, ProbeForRead I/O manager выделяет память в пространстве ядра
- 9. Метод: METHOD_NEITHER I/O manager передаёт указатели на данные без какой-либо проверки Отсутствуют проверки ProbeForRead, ProbeForWrite Все
- 10. Функции ProbeForRead, ProbeForWrite Параметры: Address –указатель на буфер памяти пользовательского режима Length – длина в байтах
- 11. Обход функций ProbeForRead, ProbeForWrite При длине равной нулю, не вызывает исключения, и не выполняет никаких проверок
- 12. Типичные уязвимости METHOD_NEITHER Arbitrary kernel memory write NULL pointer dereference METHOD_BUFFERED Buffer overflows NULL pointer dereference
- 13. Методология поиска уязвимостей Fuzzing тестирование без предварительной информации о коде драйвера Fuzzing+мониторинг информация о коде драйвера
- 14. Fuzzing Перебор входных параметров DeviceIoControl: dwIoControlCode - DWORD lpInBuffer – PVOID nInBufferSize - DWORD lpOutBuffer –
- 15. Fuzzing ioctl fuzzer NTDLL.DLL I/O manager Driver Kernel space User space Режим ядра Пользовательский режим #1
- 16. 5 минут работы ioctl fuzzer’a
- 17. Fuzzing: Тестовые наборы dwIoControlCode - полный перебор lpInBuffer – NULL, invalid kernel space address nInBufferSize –
- 18. Fuzzing: Плюсы и минусы Плюсы Лёгкий в реализации(40 строк C кода) Неплохие результаты Минусы Пропуск уязвимостей,
- 19. Fuzzing+мониторинг Отслеживание прохода для определённого тестового набора данных(Code coverage) Протоколирование состояний контекста(Data flow) Протоколирование “падений” Генерация
- 20. Windows Kernel Fuzzing+мониторинг ioctl fuzzer Driver #1 DeviceIoControl Kernel Debugger Plugin 1.Log 2.Log N.log Code coverage
- 21. Fuzzing+мониторинг: Плюсы и минусы Плюсы Покрытие кода для конкретного тестового набора Протоколирование найденной уязвимости Минусы Сложность
- 22. Ручной анализ Локализация IOCTL обработчика Анализ обрабатываемых IOCTL значений Формирование тестовых наборов Анализ обработки входных значений
- 23. Ручной анализ: Плюсы и минусы Плюсы Нахождение наибольшего количества уязвимостей Лучший в комбинации с fuzzing подходом
- 24. Статистика протестированных продуктов Всего в исследовании участвовали 40 продуктов: антивирусы, межсетевые экраны, виртуальные машины, эмуляторы, криптосистемы.
- 25. Количество обнаруженных уязвимостей Полная компрометация системы Отказ в обслуживании
- 26. Сравнение методов поиска уязвимостей
- 27. Пути решения IoCreateDeviceSecure – безопасное создание устройства(Microsoft, Dr. Web) PsGetCurrentProcessId – проверка идентификатора процесса(Eset) KeGetPreviousMode –
- 28. Выводы Тестирование драйверов в большинстве компаний не проводится Большое количество уязвимостей, которые можно быстро обнаружить и
- 29. Welcome! http://www.securitylab.ru/lab/
- 30. Будущие исследования Полные результаты исследования и детальная информация по методам поиска уязвимостей будут опубликованы на сайте
- 31. Никита Тараканов [email protected] Вопросы?
- 32. PT Research Team Раздел "Лаборатория" www.securitylab.ru/lab на портале SecurityLab публикует уязвимости, обнаруженные в программном и аппаратном
- 34. Скачать презентацию