SlideShare une entreprise Scribd logo
1  sur  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
• Автоматический перебор траекторий выполнения с
целью поиска ошибок
Вопросы?

Contenu connexe

Tendances

Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
Address Sanitizer или как сделать программы на c/с++ надежнее и безопаснее (К...
Ontico
 
Всё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программистаВсё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программиста
Andrey Karpov
 
презентация лр № 4 091214 v1
презентация лр № 4 091214 v1презентация лр № 4 091214 v1
презентация лр № 4 091214 v1
Gulnaz Shakirova
 
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
 
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Platonov Sergey
 

Tendances (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
 
Огранизация ввода и вывода данных
Огранизация ввода и вывода данныхОгранизация ввода и вывода данных
Огранизация ввода и вывода данных
 

En vedette

Reverse Engineering automation
Reverse Engineering automationReverse Engineering automation
Reverse Engineering automation
Positive Hack Days
 
Introduction of HDMI
Introduction of HDMIIntroduction of HDMI
Introduction of HDMI
drawtenor74
 
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
Positive Hack Days
 

En vedette (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
 

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

Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Tech Talks @NSU
 
Operating Systems Hardening
Operating Systems HardeningOperating Systems Hardening
Operating Systems Hardening
Vasily Sartakov
 
Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12Доклад в Mail.ru 01.11.12
Доклад в Mail.ru 01.11.12
Alex Tutubalin
 
Лекция 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
 
Ловим шеллкоды под ARM
Ловим шеллкоды под ARMЛовим шеллкоды под ARM
Ловим шеллкоды под ARM
Positive Hack Days
 

Similaire à Развитие технологий генерации эксплойтов на основе анализа бинарного кода (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++ для низкоуровневой платформозависимой разработки — Кирилл ...
 

Plus de Positive Hack Days

Мастер-класс «Трущобы Application Security»
Мастер-класс «Трущобы Application Security»Мастер-класс «Трущобы Application Security»
Мастер-класс «Трущобы Application Security»
Positive Hack Days
 
Эвристические методы защиты приложений
Эвристические методы защиты приложенийЭвристические методы защиты приложений
Эвристические методы защиты приложений
Positive Hack Days
 
Уязвимое Android-приложение: N проверенных способов наступить на грабли
Уязвимое Android-приложение: N проверенных способов наступить на граблиУязвимое Android-приложение: N проверенных способов наступить на грабли
Уязвимое Android-приложение: N проверенных способов наступить на грабли
Positive Hack Days
 
Механизмы предотвращения атак в ASP.NET Core
Механизмы предотвращения атак в ASP.NET CoreМеханизмы предотвращения атак в ASP.NET Core
Механизмы предотвращения атак в ASP.NET Core
Positive Hack Days
 

Plus de 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
 

Dernier

СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
Хроники кибер-безопасника
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
Хроники кибер-безопасника
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
Хроники кибер-безопасника
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
Хроники кибер-безопасника
 
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Ирония безопасности
 
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
Ирония безопасности
 

Dernier (9)

СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
 
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdfMalware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
 
Ransomware_Q3 2023. The report [RU].pdf
Ransomware_Q3 2023.  The report [RU].pdfRansomware_Q3 2023.  The report [RU].pdf
Ransomware_Q3 2023. The report [RU].pdf
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
 
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
 
MS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdfMS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdf
 
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
 

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

  • 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 • Автоматический перебор траекторий выполнения с целью поиска ошибок