SlideShare une entreprise Scribd logo
1  sur  21
Автоматический поиск уязвимостей в программах без исходных текстов Лаборатория информационной безопасности … или введение в фаззинг Докладчик: Олексюк Дмитрий, системный архитектор eSage Lab
Различные подходы к поиску уязвимостей - Метод «белого ящика»  Обычно, поиск уязвимостей по исходным текстам. - Метод «чёрного (серого) ящика»  Поиск уязвимостей без исходных текстов, с применением реверс-инжиниринга или без него
К чему применим фаззинг ,[object Object]
Уязвимости при обработке файлов
Драйверы режима ядра
Различные интерфейсы (RPC, ActiveX компоненты)
Многое другое,[object Object]
Требует для своей работы количество ресурсов, не ставящее под сомнение саму целесообразность проведения фаззинга
Регистрирует любые аномалии в процессе исполнения исследуемого приложения
Обеспечивает линейную масштабируемость
Не существует,[object Object]
Генерация данных - С использованием шаблонов Наиболее эффективный подход, но сложный и долгий в плане реализации - На основе уже имеющихся данных Простота, но с сомнительной эффективностью при реализации «в лоб» На самом деле, предпочтителен промежуточный подход
Подготовка к фаззингу
Генерация данных - Совсем тупо: MutateGenи архивы - Немного лучше: StgOpenStorageEx() и Visio - Почти хорошо: Peachи HTTP протокол
Анализ покрытия кода - Позволяет выявить, какие ветви алгоритма приложения исполнялись в процессе фаззинга - Выбор более подходящих исходных данных для мутационного фаззинга - Оценка эффективности фаззинга (чем больше покрытие кода – тем лучше)
Реализация фаззинга Сетевые протоколы с множеством состояний?
Реализация фаззинга IOCTL запросы к драйверам?
Анализ результатов Мониторинг исключений [+] 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 0x56807161  Access type: Read Address: 0x00000102EAX=0x00000000 EBX=0x05366338 ECX=0x00000001 EDX=0x773270b4ESI=0x0536643a EDI=0x00000000 EBP=0x0012a244
Анализ результатов Аварийные дампы The stored exception information can be accessed via .ecxr. (26dc.178c): Access violation - code c0000005 (first/second chance not available) eax=00000700 ebx=02bf0d78 ecx=002590c4 edx=02bf0d38 esi=02bf0d38 edi=002593d8 eip=773270b4 esp=00259098 ebp=002590a8 iopl=0         nv up ei pl zrnapenc *** ERROR: Symbol file could not be found.  Defaulted to export symbols for VISLIB.DLL -  VISLIB!Ordinal1+0xb18e2: 565cf57d 8b4111          moveax,dwordptr [ecx+11h] ds:0023:00000011=???????? ntdll!KiFastSystemCallRet: 773270b4 c3              ret 773270b5 8da42400000000  lea     esp,[esp] 773270bc 8d642400        lea     esp,[esp] ntdll!KiIntSystemCall: 773270c0 8d542408        lea     edx,[esp+8] 773270c4 cd2e            int     2Eh 773270c6 c3              ret 773270c7 90              nop ntdll!RtlRaiseException: 773270c8 55              push    ebp *** Stack trace for last set context - .thread/.cxr resets it ChildEBPRetAddrArgs to Child               WARNING: Stack unwind information not available. Following frames may be wrong. 0025a01c 565cf608 00000001 00000000 00000000 VISLIB!Ordinal1+0xb18e2
Анализ результатов Отладчик и !exploitable [+] Analyzing "_minidumpsxC0000005_0x565CF57D_19.05_04.37.29.DMP" [+] Faulting file: 000026ac.vsd [+] Exception 0xc0000005 at address VISLIB.dll+bf57d [+] Main module version: 12.0.6211.1000, fault module version: 12.0.6211.1000 Exploitability Classification: PROBABLY_EXPLOITABLE Recommended Bug Title: Probably Exploitable - Data from Faulting Address controls subsequent Write Address starting at VISLIB!Ordinal1+0x00000000000b18e2 (Hash=0x5502736d.0x39521d59) The data from the faulting address is later used as the target for a later write. [+] Analyzing "_minidumpsxC0000005_0x56807161_19.05_04.37.43.DMP" [+] Faulting file: 0000a4e6.vsd [+] Exception 0xc0000005 at address VISLIB.dll+2f7161 [+] Main module version: 12.0.6211.1000, fault module version: 12.0.6211.1000 *** 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+0x0000000000233971 (Hash=0x6b3b041d.0x544a027a) This is a user mode read access violation near null, and is probably not exploitable.
Проблемы фаззинга - Уязвимости в архитектуре Сложно предугадать, где найдёшь следующую - В результате фаззинга не всегда происходит падение Особенно при pool corruption - Не все найденные уязвимости эксплуатабельны А ведь уникальных воспроизводимых падений может быть сотни и тысячи!

Contenu connexe

Similaire à Автоматический поиск уязвимостей в программах без исходных текстов

тестирование защищенности веб приложений
тестирование защищенности веб приложенийтестирование защищенности веб приложений
тестирование защищенности веб приложенийZestranec
 
Тестирование защищенности веб-приложений
Тестирование защищенности веб-приложенийТестирование защищенности веб-приложений
Тестирование защищенности веб-приложенийSQALab
 
CiklumCPPSat: Anton Kukoba_Reassembling and restoring C/C++ from assembler
CiklumCPPSat: Anton Kukoba_Reassembling and restoring C/C++ from assemblerCiklumCPPSat: Anton Kukoba_Reassembling and restoring C/C++ from assembler
CiklumCPPSat: Anton Kukoba_Reassembling and restoring C/C++ from assemblerCiklum Ukraine
 
Михаил Щербаков "WinDbg сотоварищи"
Михаил Щербаков "WinDbg сотоварищи"Михаил Щербаков "WinDbg сотоварищи"
Михаил Щербаков "WinDbg сотоварищи"Mikhail Shcherbakov
 
WinDbg в руках .NET разработчика
WinDbg в руках .NET разработчикаWinDbg в руках .NET разработчика
WinDbg в руках .NET разработчикаMikhail Shcherbakov
 
WinDbg со товарищи
WinDbg со товарищиWinDbg со товарищи
WinDbg со товарищиCUSTIS
 
Оптимизация UI потока / Дмитрий Куркин (Mail.Ru)
Оптимизация UI потока / Дмитрий Куркин (Mail.Ru)Оптимизация UI потока / Дмитрий Куркин (Mail.Ru)
Оптимизация UI потока / Дмитрий Куркин (Mail.Ru)Ontico
 
Александр Сомов "C++: препроцессор, компилятор, компоновщик"
Александр Сомов "C++: препроцессор, компилятор, компоновщик"Александр Сомов "C++: препроцессор, компилятор, компоновщик"
Александр Сомов "C++: препроцессор, компилятор, компоновщик"Yandex
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonovComputer Science Club
 
"Истории из жизни опытного iOS разработчика"— Игорь Чертенков
"Истории из жизни опытного iOS разработчика"— Игорь Чертенков"Истории из жизни опытного iOS разработчика"— Игорь Чертенков
"Истории из жизни опытного iOS разработчика"— Игорь ЧертенковImprove Group
 
Алексей Андросов - Debugger: Отладка кода
Алексей Андросов - Debugger: Отладка кодаАлексей Андросов - Debugger: Отладка кода
Алексей Андросов - Debugger: Отладка кодаYandex
 
SAST и Application Security: как бороться с уязвимостями в коде
SAST и Application Security: как бороться с уязвимостями в кодеSAST и Application Security: как бороться с уязвимостями в коде
SAST и Application Security: как бороться с уязвимостями в кодеAndrey Karpov
 
Информационная Безопасность. Современные угрозы и области компетенций
Информационная Безопасность. Современные угрозы и области компетенцийИнформационная Безопасность. Современные угрозы и области компетенций
Информационная Безопасность. Современные угрозы и области компетенцийSerghei Epifantsew
 
«Introduction to malware reverse engineering» by Sergey Kharyuk
«Introduction to malware reverse engineering» by Sergey Kharyuk«Introduction to malware reverse engineering» by Sergey Kharyuk
«Introduction to malware reverse engineering» by Sergey Kharyuk0xdec0de
 
Делаем кроссбраузерные тесты поверх Webdriver
Делаем кроссбраузерные тесты поверх WebdriverДелаем кроссбраузерные тесты поверх Webdriver
Делаем кроссбраузерные тесты поверх WebdriverSQALab
 
Поиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаПоиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаAndrey Karpov
 
Поиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаПоиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаcorehard_by
 
Статический анализ и написание качественного кода на C/C++ для встраиваемых с...
Статический анализ и написание качественного кода на C/C++ для встраиваемых с...Статический анализ и написание качественного кода на C/C++ для встраиваемых с...
Статический анализ и написание качественного кода на C/C++ для встраиваемых с...Andrey Karpov
 
Статические анализаторы кода как DevSecOps решение
Статические анализаторы кода как DevSecOps решениеСтатические анализаторы кода как DevSecOps решение
Статические анализаторы кода как DevSecOps решениеAndrey Karpov
 
Convert this: peculiarities of cross-platform mobile game development at Vizor
Convert this: peculiarities of cross-platform mobile game development at VizorConvert this: peculiarities of cross-platform mobile game development at Vizor
Convert this: peculiarities of cross-platform mobile game development at VizorDevGAMM Conference
 

Similaire à Автоматический поиск уязвимостей в программах без исходных текстов (20)

тестирование защищенности веб приложений
тестирование защищенности веб приложенийтестирование защищенности веб приложений
тестирование защищенности веб приложений
 
Тестирование защищенности веб-приложений
Тестирование защищенности веб-приложенийТестирование защищенности веб-приложений
Тестирование защищенности веб-приложений
 
CiklumCPPSat: Anton Kukoba_Reassembling and restoring C/C++ from assembler
CiklumCPPSat: Anton Kukoba_Reassembling and restoring C/C++ from assemblerCiklumCPPSat: Anton Kukoba_Reassembling and restoring C/C++ from assembler
CiklumCPPSat: Anton Kukoba_Reassembling and restoring C/C++ from assembler
 
Михаил Щербаков "WinDbg сотоварищи"
Михаил Щербаков "WinDbg сотоварищи"Михаил Щербаков "WinDbg сотоварищи"
Михаил Щербаков "WinDbg сотоварищи"
 
WinDbg в руках .NET разработчика
WinDbg в руках .NET разработчикаWinDbg в руках .NET разработчика
WinDbg в руках .NET разработчика
 
WinDbg со товарищи
WinDbg со товарищиWinDbg со товарищи
WinDbg со товарищи
 
Оптимизация UI потока / Дмитрий Куркин (Mail.Ru)
Оптимизация UI потока / Дмитрий Куркин (Mail.Ru)Оптимизация UI потока / Дмитрий Куркин (Mail.Ru)
Оптимизация UI потока / Дмитрий Куркин (Mail.Ru)
 
Александр Сомов "C++: препроцессор, компилятор, компоновщик"
Александр Сомов "C++: препроцессор, компилятор, компоновщик"Александр Сомов "C++: препроцессор, компилятор, компоновщик"
Александр Сомов "C++: препроцессор, компилятор, компоновщик"
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov
 
"Истории из жизни опытного iOS разработчика"— Игорь Чертенков
"Истории из жизни опытного iOS разработчика"— Игорь Чертенков"Истории из жизни опытного iOS разработчика"— Игорь Чертенков
"Истории из жизни опытного iOS разработчика"— Игорь Чертенков
 
Алексей Андросов - Debugger: Отладка кода
Алексей Андросов - Debugger: Отладка кодаАлексей Андросов - Debugger: Отладка кода
Алексей Андросов - Debugger: Отладка кода
 
SAST и Application Security: как бороться с уязвимостями в коде
SAST и Application Security: как бороться с уязвимостями в кодеSAST и Application Security: как бороться с уязвимостями в коде
SAST и Application Security: как бороться с уязвимостями в коде
 
Информационная Безопасность. Современные угрозы и области компетенций
Информационная Безопасность. Современные угрозы и области компетенцийИнформационная Безопасность. Современные угрозы и области компетенций
Информационная Безопасность. Современные угрозы и области компетенций
 
«Introduction to malware reverse engineering» by Sergey Kharyuk
«Introduction to malware reverse engineering» by Sergey Kharyuk«Introduction to malware reverse engineering» by Sergey Kharyuk
«Introduction to malware reverse engineering» by Sergey Kharyuk
 
Делаем кроссбраузерные тесты поверх Webdriver
Делаем кроссбраузерные тесты поверх WebdriverДелаем кроссбраузерные тесты поверх Webdriver
Делаем кроссбраузерные тесты поверх Webdriver
 
Поиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаПоиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кода
 
Поиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кодаПоиск уязвимостей с использованием статического анализа кода
Поиск уязвимостей с использованием статического анализа кода
 
Статический анализ и написание качественного кода на C/C++ для встраиваемых с...
Статический анализ и написание качественного кода на C/C++ для встраиваемых с...Статический анализ и написание качественного кода на C/C++ для встраиваемых с...
Статический анализ и написание качественного кода на C/C++ для встраиваемых с...
 
Статические анализаторы кода как DevSecOps решение
Статические анализаторы кода как DevSecOps решениеСтатические анализаторы кода как DevSecOps решение
Статические анализаторы кода как DevSecOps решение
 
Convert this: peculiarities of cross-platform mobile game development at Vizor
Convert this: peculiarities of cross-platform mobile game development at VizorConvert this: peculiarities of cross-platform mobile game development at Vizor
Convert this: peculiarities of cross-platform mobile game development at Vizor
 

Автоматический поиск уязвимостей в программах без исходных текстов

  • 1. Автоматический поиск уязвимостей в программах без исходных текстов Лаборатория информационной безопасности … или введение в фаззинг Докладчик: Олексюк Дмитрий, системный архитектор eSage Lab
  • 2. Различные подходы к поиску уязвимостей - Метод «белого ящика» Обычно, поиск уязвимостей по исходным текстам. - Метод «чёрного (серого) ящика» Поиск уязвимостей без исходных текстов, с применением реверс-инжиниринга или без него
  • 3.
  • 6. Различные интерфейсы (RPC, ActiveX компоненты)
  • 7.
  • 8. Требует для своей работы количество ресурсов, не ставящее под сомнение саму целесообразность проведения фаззинга
  • 9. Регистрирует любые аномалии в процессе исполнения исследуемого приложения
  • 11.
  • 12. Генерация данных - С использованием шаблонов Наиболее эффективный подход, но сложный и долгий в плане реализации - На основе уже имеющихся данных Простота, но с сомнительной эффективностью при реализации «в лоб» На самом деле, предпочтителен промежуточный подход
  • 14. Генерация данных - Совсем тупо: MutateGenи архивы - Немного лучше: StgOpenStorageEx() и Visio - Почти хорошо: Peachи HTTP протокол
  • 15. Анализ покрытия кода - Позволяет выявить, какие ветви алгоритма приложения исполнялись в процессе фаззинга - Выбор более подходящих исходных данных для мутационного фаззинга - Оценка эффективности фаззинга (чем больше покрытие кода – тем лучше)
  • 16. Реализация фаззинга Сетевые протоколы с множеством состояний?
  • 17. Реализация фаззинга IOCTL запросы к драйверам?
  • 18. Анализ результатов Мониторинг исключений [+] 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 0x56807161 Access type: Read Address: 0x00000102EAX=0x00000000 EBX=0x05366338 ECX=0x00000001 EDX=0x773270b4ESI=0x0536643a EDI=0x00000000 EBP=0x0012a244
  • 19. Анализ результатов Аварийные дампы The stored exception information can be accessed via .ecxr. (26dc.178c): Access violation - code c0000005 (first/second chance not available) eax=00000700 ebx=02bf0d78 ecx=002590c4 edx=02bf0d38 esi=02bf0d38 edi=002593d8 eip=773270b4 esp=00259098 ebp=002590a8 iopl=0 nv up ei pl zrnapenc *** ERROR: Symbol file could not be found. Defaulted to export symbols for VISLIB.DLL - VISLIB!Ordinal1+0xb18e2: 565cf57d 8b4111 moveax,dwordptr [ecx+11h] ds:0023:00000011=???????? ntdll!KiFastSystemCallRet: 773270b4 c3 ret 773270b5 8da42400000000 lea esp,[esp] 773270bc 8d642400 lea esp,[esp] ntdll!KiIntSystemCall: 773270c0 8d542408 lea edx,[esp+8] 773270c4 cd2e int 2Eh 773270c6 c3 ret 773270c7 90 nop ntdll!RtlRaiseException: 773270c8 55 push ebp *** Stack trace for last set context - .thread/.cxr resets it ChildEBPRetAddrArgs to Child WARNING: Stack unwind information not available. Following frames may be wrong. 0025a01c 565cf608 00000001 00000000 00000000 VISLIB!Ordinal1+0xb18e2
  • 20. Анализ результатов Отладчик и !exploitable [+] Analyzing "_minidumpsxC0000005_0x565CF57D_19.05_04.37.29.DMP" [+] Faulting file: 000026ac.vsd [+] Exception 0xc0000005 at address VISLIB.dll+bf57d [+] Main module version: 12.0.6211.1000, fault module version: 12.0.6211.1000 Exploitability Classification: PROBABLY_EXPLOITABLE Recommended Bug Title: Probably Exploitable - Data from Faulting Address controls subsequent Write Address starting at VISLIB!Ordinal1+0x00000000000b18e2 (Hash=0x5502736d.0x39521d59) The data from the faulting address is later used as the target for a later write. [+] Analyzing "_minidumpsxC0000005_0x56807161_19.05_04.37.43.DMP" [+] Faulting file: 0000a4e6.vsd [+] Exception 0xc0000005 at address VISLIB.dll+2f7161 [+] Main module version: 12.0.6211.1000, fault module version: 12.0.6211.1000 *** 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+0x0000000000233971 (Hash=0x6b3b041d.0x544a027a) This is a user mode read access violation near null, and is probably not exploitable.
  • 21. Проблемы фаззинга - Уязвимости в архитектуре Сложно предугадать, где найдёшь следующую - В результате фаззинга не всегда происходит падение Особенно при pool corruption - Не все найденные уязвимости эксплуатабельны А ведь уникальных воспроизводимых падений может быть сотни и тысячи!
  • 22. Taint Analysis - «Продвинутый» динамический анализ кода - Позволяет сопоставить конкретные инструкции трассы исполнения с входными данными, которые обрабатывает исследуемая программа.
  • 23. Taint Analysis и фаззинг - Выявление участков входных данных (файла), которые не обрабатываются программой Сокращение количества сгенерированных данных и как следствие – времени фаззинга - Корректировка алгоритма генерации данных в процессе фаззинга Увеличение покрытия кода (повышение эффективности фаззинга)
  • 24. Taint Analysis и фаззинг Возможная схема реализации
  • 25. Ошибки исследователей - Зацикленность на публичных инструментах Общеизвестное не обязательно лучшее, иногда проще написать свой фаззер - Погоня за универсальностью Менее универсальный фаззер может являться более эффективным для частных случаев - Оторванность от задач реальной жизни «Крутой» и концептуальный инструмент не всегда удобен и оправдан в практическом применении
  • 26. Ошибки исследователей - Неадекватная оценка ресурсов и трудозатрат Вам дороже своё рабочее время, или машинное? - А нужен ли вам вообще фаззинг? Может, проще найти уязвимость вручную?
  • 27. СПАСИБО ЗА ВНИМАНИЕ www.esagelab.ru twitter.com/d_olex