Развитие технологий генерации
эксплойтов на основе анализа
бинарного кода
Андрей Федотов и Вадим Каушан
{fedotoff, korpse}...
Введение
• Эксплуатация переполнения буфера
• Работа с трассой машинных инструкций
• Использование символьного выполнения
...
Постановка задачи
• Известны данные, приводящие к
аварийному завершению
– Сетевой запрос
– Файл
– Параметр командной строк...
Что нужно?
• Точка получения данных
• Точка падения
• Путь от получения данных до падения
– Слайсинг трассы
• Предикат пут...
Слайсинг трассы
• Алгоритм работает с трассой инструкций
• Выделяет релевантные инструкции
• Распространение зависимостей
...
Динамический анализ помеченных
данных
• Taint-анализ: аналог слайсинга
• Распространение помеченных данных
• На каждом шаг...
Поиск точек падения
• Нарушение нормального выполнения
программы
– Каждое нарушение выполнения порождает
прерывание
– Обра...
Вход и выход из прерывания:
Вход и выход из прерывания:
Поиск точек получения данных
• Вызовы библиотечных функций
– read, recv, ReadFile
– Легко найти
– Иногда вызовов очень мно...
Промежуточное представление
• В x86 много различных инструкций. Набор команд регулярно расширяется.
• Есть и другие архите...
Промежуточное представление
ADD EAX, ECX
INIT o.1:i16 = 0000h
INIT o.2:i16 = 0008h
LOAD t.0:i32 = r[o.1] ; load EAX
LOAD t...
SMT SOLVERS
Поддерживаемые и активно развивающиеся
решатели: Alt-Ergo, Barcelogic, Beaver,
Boolector, CVC3, DPT, MathSAT, ...
Язык SMT







=
+×=
<
<<
9
,2
,
,50
z
yxz
xy
x
Z3: C API
• Создание конфигурации
 Z3_mk_config ()
• Создание контекста
 Z3_mk_context (__in Z3_config c)
• Типы
 Z3_mk...
Z3: C API
• Логические операции
 Z3_mk_true (__in Z3_context c)
 Z3_mk_eq (__in Z3_context c, __in Z3_ast l, __in Z3_ast...
Пример описания инструкции add al,05
RAXRAX
EAXEAX
AXAX
ALAL AHAH
0
EСXEСX
СXСX
СLСL СHСH
RCXRCX
• Регистры и память предс...
Пример описания инструкции add al,05
Схема работы инструмента
Схема работы инструмента
Поиск ячейки перезаписи адреса возврата
Фрагмент участка слайса, где происходит перезапись адреса возврата
Поиск шага падения
Фрагмент участка трассы с падением
Плагин CrashInfo
автоматически находит в
трассе места возможных
паде...
Схема работы инструмента
Схема работы инструмента
Схема работы инструмента
Боремся с ASLR
• Ищем трамплины в исполняемых секциях
• Трамплины – инструкции вида:
– call reg opcode: 0xff 0xd?
– jmp re...
Схема работы инструмента
Схема работы инструмента
Операционная система Приложение Уязвимости
Linux Corehttp 0.5.3 CVE:2007-4060
МСВС konquerror CVE:2004-0597
Windows XP SP3...
Операционная
система
Приложение Размер слайса
Размер
данных, байт
Время
решения, с
Время
генерации, с
Linux
Corehttp
0.5.3...
Открытые вопросы и дальнейшие
направления исследования
• Автоматизация поиска точек получения входных
данных;
• Преодолени...
Вопросы?
Развитие технологий генерации эксплойтов на основе анализа бинарного кода
Развитие технологий генерации эксплойтов на основе анализа бинарного кода
Развитие технологий генерации эксплойтов на основе анализа бинарного кода
Развитие технологий генерации эксплойтов на основе анализа бинарного кода
Upcoming SlideShare
Loading in...5
×

Развитие технологий генерации эксплойтов на основе анализа бинарного кода

487

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
487
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
16
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Transcript of "Развитие технологий генерации эксплойтов на основе анализа бинарного кода"

  1. 1. Развитие технологий генерации эксплойтов на основе анализа бинарного кода Андрей Федотов и Вадим Каушан {fedotoff, korpse}@ispas.ru
  2. 2. Введение • Эксплуатация переполнения буфера • Работа с трассой машинных инструкций • Использование символьного выполнения для генерации эксплойта
  3. 3. Постановка задачи • Известны данные, приводящие к аварийному завершению – Сетевой запрос – Файл – Параметр командной строки • Дан шеллкод для целевой системы • Нужно создать массив данных, приводящий к выполнению шеллкода
  4. 4. Что нужно? • Точка получения данных • Точка падения • Путь от получения данных до падения – Слайсинг трассы • Предикат пути – Промежуточное представление • Дополнительные уравнения – Предикат безопасности – Уравнения для шеллкода • Решатель
  5. 5. Слайсинг трассы • Алгоритм работает с трассой инструкций • Выделяет релевантные инструкции • Распространение зависимостей • Виды – Прямой (обработка буфера) – Обратный (создание буфера) • Учёт зависимостей по данным на уровне машинных команд – Адресные (MOV EAX, [ECX+EDX]) – Флаговые (CMP EAX,0; JZ addr) • Позволяет значительно сократить количество обрабатываемых инструкций
  6. 6. Динамический анализ помеченных данных • Taint-анализ: аналог слайсинга • Распространение помеченных данных • На каждом шаге фиксируем, какие данные помечены – Изначально помечены входные данные – Поиск места перезаписи адреса возврата – Поиск буферов, в которых можно разместить шеллкод
  7. 7. Поиск точек падения • Нарушение нормального выполнения программы – Каждое нарушение выполнения порождает прерывание – Обработка инструкций передачи управления • Ложные срабатывания – Возврат из прерывания не попал в трассу – Штатное завершение программы • exit() • ExitProcess()
  8. 8. Вход и выход из прерывания:
  9. 9. Вход и выход из прерывания:
  10. 10. Поиск точек получения данных • Вызовы библиотечных функций – read, recv, ReadFile – Легко найти – Иногда вызовов очень много (ReadFile) • Параметры командной строки – Поиск вызова main() • Поиск по адресу • Обратный слайсинг – Когда нет информации о способе ввода данных
  11. 11. Промежуточное представление • В x86 много различных инструкций. Набор команд регулярно расширяется. • Есть и другие архитектуры: ARM, PowerPC, … • Целесообразно использовать промежуточное представление • Промежуточное представление Pivot – «RISC-машина», 8 команд-операторов
  12. 12. Промежуточное представление ADD EAX, ECX INIT o.1:i16 = 0000h INIT o.2:i16 = 0008h LOAD t.0:i32 = r[o.1] ; load EAX LOAD t.1:i32 = r[o.2] ; load ECX APPLY t.2 = add.i32(t.0, t.1) STORE r[o.1] = t.2 ; store EAX INIT t.3:i16 = 0088h LOAD t.4:i16 = r[t.3] ; load EFLAGS INIT t.5:i16 = 08D5h APPLY t.6 = x86.uf(t.4, t.5) STORE r[t.3] = t.6 ; store EFLAGS
  13. 13. SMT SOLVERS Поддерживаемые и активно развивающиеся решатели: Alt-Ergo, Barcelogic, Beaver, Boolector, CVC3, DPT, MathSAT, OpenSMT, SatEEn, Spear, STP, UCLID, veriT, Yices, Z3 – Решатели используются в ряде проектов, ищущих ошибки в бинарном коде: Bitblaze, Mayhem, S2E, Avalanche, Sage, … • Открытый исходный код; • Удобное С API; • Поддержка Windows & Linux;
  14. 14. Язык SMT        = +×= < << 9 ,2 , ,50 z yxz xy x
  15. 15. Z3: C API • Создание конфигурации  Z3_mk_config () • Создание контекста  Z3_mk_context (__in Z3_config c) • Типы  Z3_mk_bv_sort (__in Z3_context c, __in unsigned sz)  Z3_mk_array_sort (__in Z3_context c, __in Z3_sort domain, __in Z3_sort range) • Создание символов  Z3_mk_string_symbol (__in Z3_context c, __in Z3_string s) • Создание переменных  Z3_mk_const (__in Z3_context c, __in Z3_symbol s, __in Z3_sort ty)
  16. 16. Z3: C API • Логические операции  Z3_mk_true (__in Z3_context c)  Z3_mk_eq (__in Z3_context c, __in Z3_ast l, __in Z3_ast r) etc. • Операции с битовыми векторами (машинными типами данных)  Z3_mk_bvand (__in Z3_context c, __in Z3_ast t1, __in Z3_ast t2)  Z3_mk_bvult (__in Z3_context c, __in Z3_ast t1, __in Z3_ast t2) etc. • Операции с массивами  Z3_mk_select (__in Z3_context c, __in Z3_ast a, __in Z3_ast i)  Z3_mk_store (__in Z3_context c, __in Z3_ast a, __in Z3_ast i, __in Z3_ast v) • Решение и получение модели  Z3_mk_solver (__in Z3_context c)  Z3_solver_check (__in Z3_context c, __in Z3_solver s)  Z3_solver_get_model (__in Z3_context c, __in Z3_solver s)  Z3_solver_assert (__in Z3_context c, __in Z3_solver s, __in Z3_ast a) etc
  17. 17. Пример описания инструкции add al,05 RAXRAX EAXEAX AXAX ALAL AHAH 0 EСXEСX СXСX СLСL СHСH RCXRCX • Регистры и память представляем как массивы битовых векторов • К отдельным регистрам обращаемся по смещению • Регистры и память представляем как массивы битовых векторов • К отдельным регистрам обращаемся по смещению
  18. 18. Пример описания инструкции add al,05
  19. 19. Схема работы инструмента
  20. 20. Схема работы инструмента
  21. 21. Поиск ячейки перезаписи адреса возврата Фрагмент участка слайса, где происходит перезапись адреса возврата
  22. 22. Поиск шага падения Фрагмент участка трассы с падением Плагин CrashInfo автоматически находит в трассе места возможных падений программ Плагин CrashInfo автоматически находит в трассе места возможных падений программ
  23. 23. Схема работы инструмента
  24. 24. Схема работы инструмента
  25. 25. Схема работы инструмента
  26. 26. Боремся с ASLR • Ищем трамплины в исполняемых секциях • Трамплины – инструкции вида: – call reg opcode: 0xff 0xd? – jmp reg opcode: 0xff 0xe? • Насколько вероятно найти в коде трамплин? Размер Вероятность 10КБ 14,1% 50КБ 53,3% 100КБ 78,2% 500КБ 99,9%
  27. 27. Схема работы инструмента
  28. 28. Схема работы инструмента
  29. 29. Операционная система Приложение Уязвимости Linux Corehttp 0.5.3 CVE:2007-4060 МСВС konquerror CVE:2004-0597 Windows XP SP3 superplayer 3500 EDB-ID:27041 Linux iwconfig v26 CVE:2003-0947 Windows XP SP2 Lhttpd 0.1 CVE:2002-1549 Linux get_driver «0day» Linux mkfs.jfs «0day» Linux alsa_in «0day»
  30. 30. Операционная система Приложение Размер слайса Размер данных, байт Время решения, с Время генерации, с Linux Corehttp 0.5.3 18293 565 1024 1367 МСВС konquerror 2493 536 8 128 WinXP SP3 superplayer 3500 4855 594 <1 66 Linux iwconfig v26 124 80 <1 7 WinXP SP2 Lhttpd 0.1 20174 320 18 245 Linux get_driver 152 272 2 41 Linux mkfs.jfs 209 407 3 23 Linux alsa_in 241 58 <1 40
  31. 31. Открытые вопросы и дальнейшие направления исследования • Автоматизация поиска точек получения входных данных; • Преодоление механизмов защиты; – DEP, gcc: stack protector + FORTIFY_SOURCE; • Эксплуатация уязвимостей форматной строки; • Предотвращение досрочного аварийного завершения – до срабатывания шеллкода; • Обработка символьных указателей; • Проведение экспериментов на архитектуре ARM • Автоматический перебор траекторий выполнения с целью поиска ошибок
  32. 32. Вопросы?
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×