SlideShare ist ein Scribd-Unternehmen logo
1 von 36
Развитие технологий генерации
эксплойтов на основе анализа
бинарного кода
Андрей Федотов и Вадим Каушан
{fedotoff, korpse}@ispas.ru
Введение
• Эксплуатация переполнения буфера
• Работа с трассой машинных инструкций
• Использование символьного выполнения
для генерации эксплойта
Постановка задачи
• Известны данные, приводящие к
аварийному завершению
– Сетевой запрос
– Файл
– Параметр командной строки
• Дан шеллкод для целевой системы
• Нужно создать массив данных, приводящий
к выполнению шеллкода
Что нужно?
• Точка получения данных
• Точка падения
• Путь от получения данных до падения
– Слайсинг трассы
• Предикат пути
– Промежуточное представление
• Дополнительные уравнения
– Предикат безопасности
– Уравнения для шеллкода
• Решатель
Слайсинг трассы
• Алгоритм работает с трассой инструкций
• Выделяет релевантные инструкции
• Распространение зависимостей
• Виды
– Прямой (обработка буфера)
– Обратный (создание буфера)
• Учёт зависимостей по данным на уровне машинных
команд
– Адресные (MOV EAX, [ECX+EDX])
– Флаговые (CMP EAX,0; JZ addr)
• Позволяет значительно сократить количество
обрабатываемых инструкций
Динамический анализ помеченных
данных
• Taint-анализ: аналог слайсинга
• Распространение помеченных данных
• На каждом шаге фиксируем, какие данные
помечены
– Изначально помечены входные данные
– Поиск места перезаписи адреса возврата
– Поиск буферов, в которых можно разместить
шеллкод
Поиск точек падения
• Нарушение нормального выполнения
программы
– Каждое нарушение выполнения порождает
прерывание
– Обработка инструкций передачи управления
• Ложные срабатывания
– Возврат из прерывания не попал в трассу
– Штатное завершение программы
• exit()
• ExitProcess()
Вход и выход из прерывания:
Вход и выход из прерывания:
Поиск точек получения данных
• Вызовы библиотечных функций
– read, recv, ReadFile
– Легко найти
– Иногда вызовов очень много (ReadFile)
• Параметры командной строки
– Поиск вызова main()
• Поиск по адресу
• Обратный слайсинг
– Когда нет информации о способе ввода данных
Промежуточное представление
• В x86 много различных инструкций. Набор команд регулярно расширяется.
• Есть и другие архитектуры: ARM, PowerPC, …
• Целесообразно использовать промежуточное представление
• Промежуточное представление Pivot
– «RISC-машина», 8 команд-операторов
Промежуточное представление
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
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;
Язык SMT







=
+×=
<
<<
9
,2
,
,50
z
yxz
xy
x
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)
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
Пример описания инструкции add al,05
RAXRAX
EAXEAX
AXAX
ALAL AHAH
0
EСXEСX
СXСX
СLСL СHСH
RCXRCX
• Регистры и память представляем как массивы битовых векторов
• К отдельным регистрам обращаемся по смещению
• Регистры и память представляем как массивы битовых векторов
• К отдельным регистрам обращаемся по смещению
Пример описания инструкции add al,05
Схема работы инструмента
Схема работы инструмента
Поиск ячейки перезаписи адреса возврата
Фрагмент участка слайса, где происходит перезапись адреса возврата
Поиск шага падения
Фрагмент участка трассы с падением
Плагин CrashInfo
автоматически находит в
трассе места возможных
падений программ
Плагин CrashInfo
автоматически находит в
трассе места возможных
падений программ
Схема работы инструмента
Схема работы инструмента
Схема работы инструмента
Боремся с ASLR
• Ищем трамплины в исполняемых секциях
• Трамплины – инструкции вида:
– call reg opcode: 0xff 0xd?
– jmp reg opcode: 0xff 0xe?
• Насколько вероятно найти в коде трамплин?
Размер Вероятность
10КБ 14,1%
50КБ 53,3%
100КБ 78,2%
500КБ 99,9%
Схема работы инструмента
Схема работы инструмента
Операционная система Приложение Уязвимости
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»
Операционная
система
Приложение Размер слайса
Размер
данных, байт
Время
решения, с
Время
генерации, с
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
Открытые вопросы и дальнейшие
направления исследования
• Автоматизация поиска точек получения входных
данных;
• Преодоление механизмов защиты;
– DEP, gcc: stack protector + FORTIFY_SOURCE;
• Эксплуатация уязвимостей форматной строки;
• Предотвращение досрочного аварийного завершения
– до срабатывания шеллкода;
• Обработка символьных указателей;
• Проведение экспериментов на архитектуре ARM
• Автоматический перебор траекторий выполнения с
целью поиска ошибок
Вопросы?

Weitere ähnliche Inhalte

Was ist angesagt?

Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...Ontico
 
TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...
TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...
TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...Iosif Itkin
 
Всё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программистаВсё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программистаAndrey Karpov
 
презентация лр № 4 091214 v1
презентация лр № 4 091214 v1презентация лр № 4 091214 v1
презентация лр № 4 091214 v1Gulnaz Shakirova
 
алгоритмы stl
алгоритмы stlалгоритмы stl
алгоритмы stlmcroitor
 
TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...
TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...
TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...Iosif Itkin
 
Программирование циклических алгоритмов
Программирование циклических алгоритмовПрограммирование циклических алгоритмов
Программирование циклических алгоритмовAndrey Dolinin
 
5.4 Ключевые слова static и inline
5.4 Ключевые слова static и inline5.4 Ключевые слова static и inline
5.4 Ключевые слова static и inlineDEVTYPE
 
5.1 Перегрузка операторов
5.1 Перегрузка операторов5.1 Перегрузка операторов
5.1 Перегрузка операторовDEVTYPE
 
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Platonov Sergey
 
Алгоритмическая конструкция Повторение
Алгоритмическая конструкция ПовторениеАлгоритмическая конструкция Повторение
Алгоритмическая конструкция ПовторениеAndrey Dolinin
 
4.2 Перегрузка
4.2 Перегрузка4.2 Перегрузка
4.2 ПерегрузкаDEVTYPE
 
Subprograms in VHDL, Functions in VHDL
Subprograms in VHDL, Functions in VHDLSubprograms in VHDL, Functions in VHDL
Subprograms in VHDL, Functions in VHDLvitaliykulanov
 
Statements in VHDL - Sequential Statements
Statements in VHDL - Sequential StatementsStatements in VHDL - Sequential Statements
Statements in VHDL - Sequential Statementsvitaliykulanov
 
Огранизация ввода и вывода данных
Огранизация ввода и вывода данныхОгранизация ввода и вывода данных
Огранизация ввода и вывода данныхAndrey Dolinin
 

Was ist angesagt? (20)

8 3-4
8 3-48 3-4
8 3-4
 
8 3-3
8 3-38 3-3
8 3-3
 
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
 
TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...
TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...
TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...
 
Всё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программистаВсё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программиста
 
презентация лр № 4 091214 v1
презентация лр № 4 091214 v1презентация лр № 4 091214 v1
презентация лр № 4 091214 v1
 
алгоритмы stl
алгоритмы stlалгоритмы stl
алгоритмы stl
 
TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...
TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...
TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...
 
Программирование циклических алгоритмов
Программирование циклических алгоритмовПрограммирование циклических алгоритмов
Программирование циклических алгоритмов
 
5.4 Ключевые слова static и inline
5.4 Ключевые слова static и inline5.4 Ключевые слова static и inline
5.4 Ключевые слова static и inline
 
5.1 Перегрузка операторов
5.1 Перегрузка операторов5.1 Перегрузка операторов
5.1 Перегрузка операторов
 
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
 
структура программы
структура программыструктура программы
структура программы
 
ФИЛП
ФИЛПФИЛП
ФИЛП
 
Алгоритмическая конструкция Повторение
Алгоритмическая конструкция ПовторениеАлгоритмическая конструкция Повторение
Алгоритмическая конструкция Повторение
 
4.2 Перегрузка
4.2 Перегрузка4.2 Перегрузка
4.2 Перегрузка
 
Подпрограммы
ПодпрограммыПодпрограммы
Подпрограммы
 
Subprograms in VHDL, Functions in VHDL
Subprograms in VHDL, Functions in VHDLSubprograms in VHDL, Functions in VHDL
Subprograms in VHDL, Functions in VHDL
 
Statements in VHDL - Sequential Statements
Statements in VHDL - Sequential StatementsStatements in VHDL - Sequential Statements
Statements in VHDL - Sequential Statements
 
Огранизация ввода и вывода данных
Огранизация ввода и вывода данныхОгранизация ввода и вывода данных
Огранизация ввода и вывода данных
 

Andere mochten auch

Reverse Engineering automation
Reverse Engineering automationReverse Engineering automation
Reverse Engineering automationPositive Hack Days
 
Drive it Like you Hacked It - New Attacks and Tools to Wireles
Drive it Like you Hacked It - New Attacks and Tools to Wireles Drive it Like you Hacked It - New Attacks and Tools to Wireles
Drive it Like you Hacked It - New Attacks and Tools to Wireles E hacking
 
What the HEC? Security implications of HDMI Ethernet Channel and other relate...
What the HEC? Security implications of HDMI Ethernet Channel and other relate...What the HEC? Security implications of HDMI Ethernet Channel and other relate...
What the HEC? Security implications of HDMI Ethernet Channel and other relate...44CON
 
Introduction of HDMI
Introduction of HDMIIntroduction of HDMI
Introduction of HDMIdrawtenor74
 
PHP Object Injection Vulnerability in WordPress: an Analysis
PHP Object Injection Vulnerability in WordPress: an AnalysisPHP Object Injection Vulnerability in WordPress: an Analysis
PHP Object Injection Vulnerability in WordPress: an AnalysisPositive Hack Days
 
OWASP Open SAMM
OWASP Open SAMMOWASP Open SAMM
OWASP Open SAMMintive
 
High Definition Fuzzing; Exploring HDMI vulnerabilities
High Definition Fuzzing; Exploring HDMI vulnerabilitiesHigh Definition Fuzzing; Exploring HDMI vulnerabilities
High Definition Fuzzing; Exploring HDMI vulnerabilitiesE Hacking
 
Fuzzing underestimated method of finding hidden bugs
Fuzzing underestimated method of finding hidden bugsFuzzing underestimated method of finding hidden bugs
Fuzzing underestimated method of finding hidden bugsPawel Rzepa
 

Andere mochten auch (10)

Smart TV Insecurity
Smart TV InsecuritySmart TV Insecurity
Smart TV Insecurity
 
Reverse Engineering automation
Reverse Engineering automationReverse Engineering automation
Reverse Engineering automation
 
Drive it Like you Hacked It - New Attacks and Tools to Wireles
Drive it Like you Hacked It - New Attacks and Tools to Wireles Drive it Like you Hacked It - New Attacks and Tools to Wireles
Drive it Like you Hacked It - New Attacks and Tools to Wireles
 
What the HEC? Security implications of HDMI Ethernet Channel and other relate...
What the HEC? Security implications of HDMI Ethernet Channel and other relate...What the HEC? Security implications of HDMI Ethernet Channel and other relate...
What the HEC? Security implications of HDMI Ethernet Channel and other relate...
 
Introduction of HDMI
Introduction of HDMIIntroduction of HDMI
Introduction of HDMI
 
American Fuzzy Lop
American Fuzzy LopAmerican Fuzzy Lop
American Fuzzy Lop
 
PHP Object Injection Vulnerability in WordPress: an Analysis
PHP Object Injection Vulnerability in WordPress: an AnalysisPHP Object Injection Vulnerability in WordPress: an Analysis
PHP Object Injection Vulnerability in WordPress: an Analysis
 
OWASP Open SAMM
OWASP Open SAMMOWASP Open SAMM
OWASP Open SAMM
 
High Definition Fuzzing; Exploring HDMI vulnerabilities
High Definition Fuzzing; Exploring HDMI vulnerabilitiesHigh Definition Fuzzing; Exploring HDMI vulnerabilities
High Definition Fuzzing; Exploring HDMI vulnerabilities
 
Fuzzing underestimated method of finding hidden bugs
Fuzzing underestimated method of finding hidden bugsFuzzing underestimated method of finding hidden bugs
Fuzzing underestimated method of finding hidden bugs
 

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

Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU
 
Как приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMКак приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMTech Talks @NSU
 
Operating Systems Hardening
Operating Systems HardeningOperating Systems Hardening
Operating Systems HardeningVasily Sartakov
 
Formal verification of operating system kernels
Formal verification of operating system kernelsFormal verification of operating system kernels
Formal verification of operating system kernelsDenis Efremov
 
Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12Alex Tutubalin
 
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru GroupКак не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru GroupMail.ru Group
 
Формальная верификация кода на языке Си
Формальная верификация кода на языке СиФормальная верификация кода на языке Си
Формальная верификация кода на языке СиPositive Development User Group
 
Formal verification of C code
Formal verification of C codeFormal verification of C code
Formal verification of C codeDenis Efremov
 
Формальная верификация кода на языке Си
Формальная верификация кода на языке СиФормальная верификация кода на языке Си
Формальная верификация кода на языке СиPositive Hack Days
 
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)Mikhail Kurnosov
 
200 open source проектов спустя: опыт статического анализа исходного кода
200 open source проектов спустя:опыт статического анализа исходного кода200 open source проектов спустя:опыт статического анализа исходного кода
200 open source проектов спустя: опыт статического анализа исходного кодаPositive Hack Days
 
200 open source проектов спустя: опыт статического анализа исходного кода
200 open source проектов спустя: опыт статического анализа исходного кода200 open source проектов спустя: опыт статического анализа исходного кода
200 open source проектов спустя: опыт статического анализа исходного кодаAndrey Karpov
 
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...corehard_by
 
Лекция 3: Векторизация кода (Code vectorization, SIMD, SSE, AVX)
Лекция 3: Векторизация кода (Code vectorization, SIMD, SSE, AVX)Лекция 3: Векторизация кода (Code vectorization, SIMD, SSE, AVX)
Лекция 3: Векторизация кода (Code vectorization, SIMD, SSE, AVX)Mikhail Kurnosov
 
Лекция 3. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 3. Векторизация кода (Code vectorization: SSE, AVX)Лекция 3. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 3. Векторизация кода (Code vectorization: SSE, AVX)Mikhail Kurnosov
 
Ловим шеллкоды под ARM
Ловим шеллкоды под ARMЛовим шеллкоды под ARM
Ловим шеллкоды под ARMPositive Hack Days
 
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Mikhail Kurnosov
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPMikhail Kurnosov
 
Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ...
 Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ... Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ...
Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ...Yandex
 

Ähnlich wie Развитие технологий генерации эксплойтов на основе анализа бинарного кода (20)

Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVM
 
Как приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVMКак приручить дракона: введение в LLVM
Как приручить дракона: введение в LLVM
 
Operating Systems Hardening
Operating Systems HardeningOperating Systems Hardening
Operating Systems Hardening
 
Formal verification of operating system kernels
Formal verification of operating system kernelsFormal verification of operating system kernels
Formal verification of operating system kernels
 
Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12
 
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru GroupКак не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
 
Формальная верификация кода на языке Си
Формальная верификация кода на языке СиФормальная верификация кода на языке Си
Формальная верификация кода на языке Си
 
Formal verification of C code
Formal verification of C codeFormal verification of C code
Formal verification of C code
 
Формальная верификация кода на языке Си
Формальная верификация кода на языке СиФормальная верификация кода на языке Си
Формальная верификация кода на языке Си
 
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 4. Векторизация кода (Code vectorization: SSE, AVX)
 
200 open source проектов спустя: опыт статического анализа исходного кода
200 open source проектов спустя:опыт статического анализа исходного кода200 open source проектов спустя:опыт статического анализа исходного кода
200 open source проектов спустя: опыт статического анализа исходного кода
 
200 open source проектов спустя: опыт статического анализа исходного кода
200 open source проектов спустя: опыт статического анализа исходного кода200 open source проектов спустя: опыт статического анализа исходного кода
200 open source проектов спустя: опыт статического анализа исходного кода
 
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...
 
Лекция 3: Векторизация кода (Code vectorization, SIMD, SSE, AVX)
Лекция 3: Векторизация кода (Code vectorization, SIMD, SSE, AVX)Лекция 3: Векторизация кода (Code vectorization, SIMD, SSE, AVX)
Лекция 3: Векторизация кода (Code vectorization, SIMD, SSE, AVX)
 
Лекция 3. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 3. Векторизация кода (Code vectorization: SSE, AVX)Лекция 3. Векторизация кода (Code vectorization: SSE, AVX)
Лекция 3. Векторизация кода (Code vectorization: SSE, AVX)
 
Ловим шеллкоды под ARM
Ловим шеллкоды под ARMЛовим шеллкоды под ARM
Ловим шеллкоды под ARM
 
20110227 csseminar alvor_breslav
20110227 csseminar alvor_breslav20110227 csseminar alvor_breslav
20110227 csseminar alvor_breslav
 
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
Лекция 2. Оптимизация ветвлений и циклов (Branch prediction and loop optimiz...
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMP
 
Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ...
 Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ... Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ...
Использование C++ для низкоуровневой платформозависимой разработки — Кирилл ...
 

Mehr von Positive Hack Days

Инструмент ChangelogBuilder для автоматической подготовки Release Notes
Инструмент ChangelogBuilder для автоматической подготовки Release NotesИнструмент ChangelogBuilder для автоматической подготовки Release Notes
Инструмент ChangelogBuilder для автоматической подготовки Release NotesPositive Hack Days
 
Как мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows DockerКак мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows DockerPositive Hack Days
 
Типовая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive TechnologiesТиповая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive TechnologiesPositive Hack Days
 
Аналитика в проектах: TFS + Qlik
Аналитика в проектах: TFS + QlikАналитика в проектах: TFS + Qlik
Аналитика в проектах: TFS + QlikPositive Hack Days
 
Использование анализатора кода SonarQube
Использование анализатора кода SonarQubeИспользование анализатора кода SonarQube
Использование анализатора кода SonarQubePositive Hack Days
 
Развитие сообщества Open DevOps Community
Развитие сообщества Open DevOps CommunityРазвитие сообщества Open DevOps Community
Развитие сообщества Open DevOps CommunityPositive Hack Days
 
Методика определения неиспользуемых ресурсов виртуальных машин и автоматизаци...
Методика определения неиспользуемых ресурсов виртуальных машин и автоматизаци...Методика определения неиспользуемых ресурсов виртуальных машин и автоматизаци...
Методика определения неиспользуемых ресурсов виртуальных машин и автоматизаци...Positive Hack Days
 
Автоматизация построения правил для Approof
Автоматизация построения правил для ApproofАвтоматизация построения правил для Approof
Автоматизация построения правил для ApproofPositive Hack Days
 
Мастер-класс «Трущобы Application Security»
Мастер-класс «Трущобы Application Security»Мастер-класс «Трущобы Application Security»
Мастер-класс «Трущобы Application Security»Positive Hack Days
 
Формальные методы защиты приложений
Формальные методы защиты приложенийФормальные методы защиты приложений
Формальные методы защиты приложенийPositive Hack Days
 
Эвристические методы защиты приложений
Эвристические методы защиты приложенийЭвристические методы защиты приложений
Эвристические методы защиты приложенийPositive Hack Days
 
Теоретические основы Application Security
Теоретические основы Application SecurityТеоретические основы Application Security
Теоретические основы Application SecurityPositive Hack Days
 
От экспериментального программирования к промышленному: путь длиной в 10 лет
От экспериментального программирования к промышленному: путь длиной в 10 летОт экспериментального программирования к промышленному: путь длиной в 10 лет
От экспериментального программирования к промышленному: путь длиной в 10 летPositive Hack Days
 
Уязвимое Android-приложение: N проверенных способов наступить на грабли
Уязвимое Android-приложение: N проверенных способов наступить на граблиУязвимое Android-приложение: N проверенных способов наступить на грабли
Уязвимое Android-приложение: N проверенных способов наступить на граблиPositive Hack Days
 
Требования по безопасности в архитектуре ПО
Требования по безопасности в архитектуре ПОТребования по безопасности в архитектуре ПО
Требования по безопасности в архитектуре ПОPositive Hack Days
 
Механизмы предотвращения атак в ASP.NET Core
Механизмы предотвращения атак в ASP.NET CoreМеханизмы предотвращения атак в ASP.NET Core
Механизмы предотвращения атак в ASP.NET CorePositive Hack Days
 
SOC для КИИ: израильский опыт
SOC для КИИ: израильский опытSOC для КИИ: израильский опыт
SOC для КИИ: израильский опытPositive Hack Days
 
Honeywell Industrial Cyber Security Lab & Services Center
Honeywell Industrial Cyber Security Lab & Services CenterHoneywell Industrial Cyber Security Lab & Services Center
Honeywell Industrial Cyber Security Lab & Services CenterPositive Hack Days
 
Credential stuffing и брутфорс-атаки
Credential stuffing и брутфорс-атакиCredential stuffing и брутфорс-атаки
Credential stuffing и брутфорс-атакиPositive Hack Days
 

Mehr von Positive Hack Days (20)

Инструмент ChangelogBuilder для автоматической подготовки Release Notes
Инструмент ChangelogBuilder для автоматической подготовки Release NotesИнструмент ChangelogBuilder для автоматической подготовки Release Notes
Инструмент ChangelogBuilder для автоматической подготовки Release Notes
 
Как мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows DockerКак мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows Docker
 
Типовая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive TechnologiesТиповая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive Technologies
 
Аналитика в проектах: TFS + Qlik
Аналитика в проектах: TFS + QlikАналитика в проектах: TFS + Qlik
Аналитика в проектах: TFS + Qlik
 
Использование анализатора кода SonarQube
Использование анализатора кода SonarQubeИспользование анализатора кода SonarQube
Использование анализатора кода SonarQube
 
Развитие сообщества Open DevOps Community
Развитие сообщества Open DevOps CommunityРазвитие сообщества Open DevOps Community
Развитие сообщества Open DevOps Community
 
Методика определения неиспользуемых ресурсов виртуальных машин и автоматизаци...
Методика определения неиспользуемых ресурсов виртуальных машин и автоматизаци...Методика определения неиспользуемых ресурсов виртуальных машин и автоматизаци...
Методика определения неиспользуемых ресурсов виртуальных машин и автоматизаци...
 
Автоматизация построения правил для Approof
Автоматизация построения правил для ApproofАвтоматизация построения правил для Approof
Автоматизация построения правил для Approof
 
Мастер-класс «Трущобы Application Security»
Мастер-класс «Трущобы Application Security»Мастер-класс «Трущобы Application Security»
Мастер-класс «Трущобы Application Security»
 
Формальные методы защиты приложений
Формальные методы защиты приложенийФормальные методы защиты приложений
Формальные методы защиты приложений
 
Эвристические методы защиты приложений
Эвристические методы защиты приложенийЭвристические методы защиты приложений
Эвристические методы защиты приложений
 
Теоретические основы Application Security
Теоретические основы Application SecurityТеоретические основы Application Security
Теоретические основы Application Security
 
От экспериментального программирования к промышленному: путь длиной в 10 лет
От экспериментального программирования к промышленному: путь длиной в 10 летОт экспериментального программирования к промышленному: путь длиной в 10 лет
От экспериментального программирования к промышленному: путь длиной в 10 лет
 
Уязвимое Android-приложение: N проверенных способов наступить на грабли
Уязвимое Android-приложение: N проверенных способов наступить на граблиУязвимое Android-приложение: N проверенных способов наступить на грабли
Уязвимое Android-приложение: N проверенных способов наступить на грабли
 
Требования по безопасности в архитектуре ПО
Требования по безопасности в архитектуре ПОТребования по безопасности в архитектуре ПО
Требования по безопасности в архитектуре ПО
 
Механизмы предотвращения атак в ASP.NET Core
Механизмы предотвращения атак в ASP.NET CoreМеханизмы предотвращения атак в ASP.NET Core
Механизмы предотвращения атак в ASP.NET Core
 
SOC для КИИ: израильский опыт
SOC для КИИ: израильский опытSOC для КИИ: израильский опыт
SOC для КИИ: израильский опыт
 
Honeywell Industrial Cyber Security Lab & Services Center
Honeywell Industrial Cyber Security Lab & Services CenterHoneywell Industrial Cyber Security Lab & Services Center
Honeywell Industrial Cyber Security Lab & Services Center
 
Credential stuffing и брутфорс-атаки
Credential stuffing и брутфорс-атакиCredential stuffing и брутфорс-атаки
Credential stuffing и брутфорс-атаки
 
Доклад SiteSecure
Доклад SiteSecureДоклад SiteSecure
Доклад SiteSecure
 

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

  • 1. Развитие технологий генерации эксплойтов на основе анализа бинарного кода Андрей Федотов и Вадим Каушан {fedotoff, korpse}@ispas.ru
  • 2. Введение • Эксплуатация переполнения буфера • Работа с трассой машинных инструкций • Использование символьного выполнения для генерации эксплойта
  • 3. Постановка задачи • Известны данные, приводящие к аварийному завершению – Сетевой запрос – Файл – Параметр командной строки • Дан шеллкод для целевой системы • Нужно создать массив данных, приводящий к выполнению шеллкода
  • 4. Что нужно? • Точка получения данных • Точка падения • Путь от получения данных до падения – Слайсинг трассы • Предикат пути – Промежуточное представление • Дополнительные уравнения – Предикат безопасности – Уравнения для шеллкода • Решатель
  • 5. Слайсинг трассы • Алгоритм работает с трассой инструкций • Выделяет релевантные инструкции • Распространение зависимостей • Виды – Прямой (обработка буфера) – Обратный (создание буфера) • Учёт зависимостей по данным на уровне машинных команд – Адресные (MOV EAX, [ECX+EDX]) – Флаговые (CMP EAX,0; JZ addr) • Позволяет значительно сократить количество обрабатываемых инструкций
  • 6.
  • 7. Динамический анализ помеченных данных • Taint-анализ: аналог слайсинга • Распространение помеченных данных • На каждом шаге фиксируем, какие данные помечены – Изначально помечены входные данные – Поиск места перезаписи адреса возврата – Поиск буферов, в которых можно разместить шеллкод
  • 8.
  • 9. Поиск точек падения • Нарушение нормального выполнения программы – Каждое нарушение выполнения порождает прерывание – Обработка инструкций передачи управления • Ложные срабатывания – Возврат из прерывания не попал в трассу – Штатное завершение программы • exit() • ExitProcess()
  • 10. Вход и выход из прерывания:
  • 11. Вход и выход из прерывания:
  • 12. Поиск точек получения данных • Вызовы библиотечных функций – read, recv, ReadFile – Легко найти – Иногда вызовов очень много (ReadFile) • Параметры командной строки – Поиск вызова main() • Поиск по адресу • Обратный слайсинг – Когда нет информации о способе ввода данных
  • 13. Промежуточное представление • В x86 много различных инструкций. Набор команд регулярно расширяется. • Есть и другие архитектуры: ARM, PowerPC, … • Целесообразно использовать промежуточное представление • Промежуточное представление Pivot – «RISC-машина», 8 команд-операторов
  • 14. Промежуточное представление 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
  • 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;
  • 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)
  • 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
  • 19. Пример описания инструкции add al,05 RAXRAX EAXEAX AXAX ALAL AHAH 0 EСXEСX СXСX СLСL СHСH RCXRCX • Регистры и память представляем как массивы битовых векторов • К отдельным регистрам обращаемся по смещению • Регистры и память представляем как массивы битовых векторов • К отдельным регистрам обращаемся по смещению
  • 23. Поиск ячейки перезаписи адреса возврата Фрагмент участка слайса, где происходит перезапись адреса возврата
  • 24. Поиск шага падения Фрагмент участка трассы с падением Плагин CrashInfo автоматически находит в трассе места возможных падений программ Плагин CrashInfo автоматически находит в трассе места возможных падений программ
  • 28. Боремся с ASLR • Ищем трамплины в исполняемых секциях • Трамплины – инструкции вида: – call reg opcode: 0xff 0xd? – jmp reg opcode: 0xff 0xe? • Насколько вероятно найти в коде трамплин? Размер Вероятность 10КБ 14,1% 50КБ 53,3% 100КБ 78,2% 500КБ 99,9%
  • 31.
  • 32.
  • 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»
  • 34. Операционная система Приложение Размер слайса Размер данных, байт Время решения, с Время генерации, с 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
  • 35. Открытые вопросы и дальнейшие направления исследования • Автоматизация поиска точек получения входных данных; • Преодоление механизмов защиты; – DEP, gcc: stack protector + FORTIFY_SOURCE; • Эксплуатация уязвимостей форматной строки; • Предотвращение досрочного аварийного завершения – до срабатывания шеллкода; • Обработка символьных указателей; • Проведение экспериментов на архитектуре ARM • Автоматический перебор траекторий выполнения с целью поиска ошибок