36
Развитие технологий генерации эксплойтов на основе анализа бинарного кода Андрей Федотов и Вадим Каушан {fedotoff, korpse}@ispas.ru

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

Embed Size (px)

Citation preview

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

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

бинарного кода

Андрей Федотов и Вадим Каушан{fedotoff, korpse}@ispas.ru

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

Введение

• Эксплуатация переполнения буфера• Работа с трассой машинных инструкций• Использование символьного выполнения

для генерации эксплойта

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

Постановка задачи

• Известны данные, приводящие к аварийному завершению– Сетевой запрос– Файл– Параметр командной строки

• Дан шеллкод для целевой системы• Нужно создать массив данных, приводящий

к выполнению шеллкода

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

Что нужно?• Точка получения данных• Точка падения• Путь от получения данных до падения– Слайсинг трассы

• Предикат пути– Промежуточное представление

• Дополнительные уравнения– Предикат безопасности– Уравнения для шеллкода

• Решатель

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

Слайсинг трассы• Алгоритм работает с трассой инструкций• Выделяет релевантные инструкции• Распространение зависимостей• Виды

– Прямой (обработка буфера)– Обратный (создание буфера)

• Учёт зависимостей по данным на уровне машинных команд– Адресные (MOV EAX, [ECX+EDX])– Флаговые (CMP EAX,0; JZ addr)

• Позволяет значительно сократить количество обрабатываемых инструкций

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

Динамический анализ помеченных данных

• Taint-анализ: аналог слайсинга• Распространение помеченных данных• На каждом шаге фиксируем, какие данные

помечены– Изначально помечены входные данные– Поиск места перезаписи адреса возврата– Поиск буферов, в которых можно разместить

шеллкод

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

Поиск точек падения

• Нарушение нормального выполнения программы– Каждое нарушение выполнения порождает

прерывание– Обработка инструкций передачи управления

• Ложные срабатывания– Возврат из прерывания не попал в трассу– Штатное завершение программы

• exit()• ExitProcess()

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

Вход и выход из прерывания:

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

Вход и выход из прерывания:

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

Поиск точек получения данных

• Вызовы библиотечных функций– read, recv, ReadFile– Легко найти– Иногда вызовов очень много (ReadFile)

• Параметры командной строки– Поиск вызова main()

• Поиск по адресу• Обратный слайсинг– Когда нет информации о способе ввода данных

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

Промежуточное представление• В x86 много различных инструкций. Набор команд регулярно расширяется. • Есть и другие архитектуры: ARM, PowerPC, …• Целесообразно использовать промежуточное представление• Промежуточное представление Pivot

– «RISC-машина», 8 команд-операторов

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

Промежуточное представлениеADD EAX, ECX

INIT o.1:i16 = 0000hINIT o.2:i16 = 0008hLOAD t.0:i32 = r[o.1] ; load EAXLOAD t.1:i32 = r[o.2] ; load ECXAPPLY t.2 = add.i32(t.0, t.1)STORE r[o.1] = t.2 ; store EAX

INIT t.3:i16 = 0088hLOAD t.4:i16 = r[t.3] ; load EFLAGSINIT t.5:i16 = 08D5hAPPLY t.6 = x86.uf(t.4, t.5)STORE r[t.3] = t.6 ; store EFLAGS

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

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;

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

Язык SMT

9

,2

,

,50

z

yxz

xy

x

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

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)

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

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

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

Пример описания инструкции add al,05

RAXRAX

EAXEAX

AXAX

ALAL AHAH

0

EСXEСX

СXСX

СLСL СHСH

RCXRCX

• Регистры и память представляем как массивы битовых векторов• К отдельным регистрам обращаемся по смещению• Регистры и память представляем как массивы битовых векторов• К отдельным регистрам обращаемся по смещению

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

Пример описания инструкции add al,05

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

Схема работы инструмента

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

Схема работы инструмента

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

Поиск ячейки перезаписи адреса возврата Фрагмент участка слайса, где происходит перезапись адреса возврата

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

Поиск шага паденияФрагмент участка трассы с падением

Плагин CrashInfo автоматически находит в трассе места возможных падений программ

Плагин CrashInfo автоматически находит в трассе места возможных падений программ

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

Схема работы инструмента

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

Схема работы инструмента

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

Схема работы инструмента

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

Боремся с ASLR • Ищем трамплины в исполняемых секциях• Трамплины – инструкции вида:– call reg opcode: 0xff 0xd?– jmp reg opcode: 0xff 0xe?

• Насколько вероятно найти в коде трамплин?

Размер Вероятность

10КБ 14,1%

50КБ 53,3%

100КБ 78,2%

500КБ 99,9%

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

Схема работы инструмента

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

Схема работы инструмента

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

Операционная система Приложение Уязвимости

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»

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

Операционная

системаПриложение Размер слайса

Размер

данных, байт

Время

решения, с

Время

генерации, с

Linux Corehttp 0.5.3 18293 565 1024 1367

МСВС konquerror 2493 536 8 128

WinXP SP3superplayer

35004855 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

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

Открытые вопросы и дальнейшие направления исследования

• Автоматизация поиска точек получения входных данных;

• Преодоление механизмов защиты;– DEP, gcc: stack protector + FORTIFY_SOURCE;

• Эксплуатация уязвимостей форматной строки;• Предотвращение досрочного аварийного завершения

– до срабатывания шеллкода;• Обработка символьных указателей;• Проведение экспериментов на архитектуре ARM• Автоматический перебор траекторий выполнения с

целью поиска ошибок

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

Вопросы?