Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 13 лет назад пользователемd_olex
1 Автоматический поиск уязвимостей в программах без исходных текстов … или введение в фаззинг Лаборатория информационной безопасности Докладчик: Олексюк Дмитрий, системный архитектор eSage Lab
2 Различные подходы к поиску уязвимостей - Метод «белого ящика» Обычно, поиск уязвимостей по исходным текстам. - Метод «чёрного (серого) ящика» Поиск уязвимостей без исходных текстов, с применением реверс-инжиниринга или без него
3 К чему применим фаззинг Сетевые протоколы Уязвимости при обработке файлов Драйверы режима ядра Различные интерфейсы (RPC, ActiveX компоненты) Многое другое
4 Идеальный фаззер Обеспечивает полное покрытие кода исследуемого приложения Требует для своей работы количество ресурсов, не ставящее под сомнение саму целесообразность проведения фаззинга Регистрирует любые аномалии в процессе исполнения исследуемого приложения Обеспечивает линейную масштабируемость Не существует
5 Этапы фаззинга 1.Анализ исследуемого приложения, разработка фаззера (опционально) 2.Генерация данных 3.Собственно, фаззинг 4.Анализ результатов
6 Генерация данных - С использованием шаблонов Наиболее эффективный подход, но сложный и долгий в плане реализации - На основе уже имеющихся данных Простота, но с сомнительной эффективностью при реализации «в лоб» На самом деле, предпочтителен промежуточный подход
7 Подготовка к фаззингу
8 Генерация данных - Совсем тупо: MutateGen и архивы - Немного лучше: StgOpenStorageEx() и Visio - Почти хорошо: Peach и HTTP протокол
9 Анализ покрытия кода - Позволяет выявить, какие ветви алгоритма приложения исполнялись в процессе фаззинга - Выбор более подходящих исходных данных для мутационного фаззинга - Оценка эффективности фаззинга (чем больше покрытие кода – тем лучше)
10 Реализация фаззинга Сетевые протоколы с множеством состояний?
11 Реализация фаззинга IOCTL запросы к драйверам?
12 Анализ результатов Мониторинг исключений [+] DLL injected into the target process 8032 [+] Exit on first #AV: Yes ModuleInit(): From process 'VISIO.EXE' (PID: 8032) [!] EXCEPTION OCCURS:STATUS_ACCESS_VIOLATION at 0x Access type: Read Address: 0x EAX=0x EBX=0x ECX=0x EDX=0x773270b4ESI=0x a EDI=0x EBP=0x0012a244
13 Анализ результатов Аварийные дампы The stored exception information can be accessed via.ecxr. (26dc.178c): Access violation - code c (first/second chance not available) eax= ebx=02bf0d78 ecx=002590c4 edx=02bf0d38 esi=02bf0d38 edi=002593d8 eip=773270b4 esp= ebp=002590a8 iopl=0 nv up ei pl zr na pe nc *** ERROR: Symbol file could not be found. Defaulted to export symbols for VISLIB.DLL - VISLIB!Ordinal1+0xb18e2: 565cf57d 8b4111 mov eax,dword ptr [ecx+11h] ds:0023: =???????? ntdll!KiFastSystemCallRet: b4 c3 ret b5 8da lea esp,[esp] bc 8d lea esp,[esp] ntdll!KiIntSystemCall: c0 8d lea edx,[esp+8] c4 cd2e int 2Eh c6 c3 ret c7 90 nop ntdll!RtlRaiseException: c8 55 push ebp *** Stack trace for last set context -.thread/.cxr resets it ChildEBP RetAddr Args to Child WARNING: Stack unwind information not available. Following frames may be wrong. 0025a01c 565cf VISLIB!Ordinal1+0xb18e2
14 Анализ результатов Отладчик и !exploitable [+] Analyzing "_minidumps\0xC _0x565CF57D_19.05_ DMP" [+] Faulting file: ac.vsd [+] Exception 0xc at address VISLIB.dll+bf57d [+] Main module version: , fault module version: Exploitability Classification: PROBABLY_EXPLOITABLE Recommended Bug Title: Probably Exploitable - Data from Faulting Address controls subsequent Write Address starting at VISLIB!Ordinal1+0x b18e2 (Hash=0x d.0x39521d59) The data from the faulting address is later used as the target for a later write. [+] Analyzing "_minidumps\0xC _0x _19.05_ DMP" [+] Faulting file: 0000a4e6.vsd [+] Exception 0xc at address VISLIB.dll+2f7161 [+] Main module version: , fault module version: *** ERROR: Module load completed but symbols could not be loaded for VISIO.EXE Exploitability Classification: PROBABLY_NOT_EXPLOITABLE Recommended Bug Title: Read Access Violation near NULL starting at VISLIB!DllCanUnloadNow+0x (Hash=0x6b3b041d.0x544a027a) This is a user mode read access violation near null, and is probably not exploitable.
15 Проблемы фаззинга - Уязвимости в архитектуре Сложно предугадать, где найдёшь следующую - В результате фаззинга не всегда происходит падение Особенно при pool corruption - Не все найденные уязвимости эксплуатабельны А ведь уникальных воспроизводимых падений может быть сотни и тысячи!
16 Taint Analysis - «Продвинутый» динамический анализ кода - Позволяет сопоставить конкретные инструкции трассы исполнения с входными данными, которые обрабатывает исследуемая программа.
17 Taint Analysis и фаззинг - Выявление участков входных данных (файла), которые не обрабатываются программой Сокращение количества сгенерированных данных и как следствие – времени фаззинга - Корректировка алгоритма генерации данных в процессе фаззинга Увеличение покрытия кода (повышение эффективности фаззинга)
18 Taint Analysis и фаззинг Возможная схема реализации
19 Ошибки исследователей - Зацикленность на публичных инструментах Общеизвестное не обязательно лучшее, иногда проще написать свой фаззер - Погоня за универсальностью Менее универсальный фаззер может являться более эффективным для частных случаев - Оторванность от задач реальной жизни «Крутой» и концептуальный инструмент не всегда удобен и оправдан в практическом применении
20 Ошибки исследователей - Неадекватная оценка ресурсов и трудозатрат Вам дороже своё рабочее время, или машинное? - А нужен ли вам вообще фаззинг? Может, проще найти уязвимость вручную?
21 СПАСИБО ЗА ВНИМАНИЕ twitter.com/d_olex
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.