SlideShare a Scribd company logo
Динамический анализ
исполняемого кода в формате
ELF на основе статической
бинарной инструментации
Михаил Ермаков
ИСП РАН, Москва
Санкт-Петербург, 12.11.2015
2/29
Содержание
● Динамический анализ: цели и подходы
● Динамический анализ: задача обхода путей
● Статическая инструментация: подзадачи и
методы решения
● Статическая инструментация: практическая
реализация
3/29
Динамический анализ
● Исследование в рамках выполнения программы
● Отслеживание событий
– Временные
– Позиционные
– Функциональные
● Проверка свойств
● Формирование статистики, трасс
4/29
Динамический анализ: подходы
● Аппаратные подходы
● Внешние программные средства
● Эмуляторы/виртуальные машины
● Инструментация:
– исходного кода
– статическая
– динамическая
5
Динамический анализ:
инструментация (1)
● Внедрение дополнительного кода,
выполняющегося как побочный эффект
● Позволяет работать на уровне блоков
инструкций
● Накладные расходы:
– разбор
– модификация
– внедряемый код
6/29
Динамический анализ:
инструментация (2)
● Динамическая
– Во время выполнения
– Точность выше
– Локальная трансформация
● Статическая
– Предварительно, независимо от среды выполнения
– Точность ниже
– Глобальная трансформация
7/29
Динамический анализ:
статическая инструментация
● Позволяет манипулировать на низком уровне (+)
● Эффективна при многократных запусках (+)
● Интегрируема со статическим анализом
бинарного кода (+)
● Чёткое ограничение модифицируемого кода (+/-)
● Нет прямого соотношения с выполняемым кодом
(-)
8/29
Содержание
● Динамический анализ: цели и подходы
● Динамический анализ: задача обхода
путей
● Статическая инструментация: подзадачи и
методы решения
● Статическая инструментация: практическая
реализация
9/29
Динамический анализ:
автоматический обход путей
● Итеративное выполнение на различных
наборах данных:
– Отслеживание потока данных, зависимых от
входных, — помеченных данных
– Создание трассы операций потока помеченных
данных в виде булевых формул (ограничений)
– Модификация трассы и разрешение
ограничений для создания новых наборов
данных
10/29
Автоматический обход путей:
поток помеченных данных (1)
int x = read(...)
int y = x;
if (y < 0)
do1();
else
do2();
x : bitvector(32);
y : bitvector(32);
taint (x);
assert (y = x);
assert (y < 0 = true);
... // do1()
11/29
Автоматический обход путей:
поток помеченных данных (2)
x : bitvector(32);
y : bitvector(32);
taint (x);
assert (y = x);
assert (y < 0 = false);
int x = read(...)
int y = x;
if (y < 0)
do1();
else
do2();
12/29
Автоматический обход путей:
особенности задачи
● Повторные запуски
● Экспоненциальный рост числа путей
● Сложность задачи проверки выполнимости
трассы ограничений
13/29
Содержание
● Динамический анализ: цели и подходы
● Динамический анализ: задача обхода путей
● Статическая инструментация: подзадачи
и методы решения
● Статическая инструментация: практическая
реализация
14/29
Статическая инструментация:
последовательность действий
● Вход: (точка инструментации, код
инструментации)
● Разбор исполняемого кода, инстанциация
пар для спецификаций
● Генерация исполняемого кода
инструментации в виде набора блоков
● Внедрение нового кода
15/29
Статическая инструментация:
формат ELF
● Состоит из секций, обладающих
виртуальным адресом —
позицией в образе памяти
● Возможны относительные
зависимости между секциями
● Возможны относительные
зависимости внутри секций
● Секции объединяются в
сегменты, возможность
изменений ограничена
Заголовок
.hash
.dynsym
.dynstr
.text
.plt
.got
.dynamic
...
16/29
Статическая инструментация:
внедрение кода (1)
● Решение: добавление
инструментационного кода в
виде дополнительных секций
● В точках инструментации —
инструкции перехода в .text_s
● В конце блоков .text_s —
инструкции обратного перехода
● Заменённые инструкции — перед
концом блоков .text_s
Заголовок
.hash
.dynsym
.dynstr
.text
.plt
.got
.dynamic
...
.text_s
17/29
Статическая инструментация:
внедрение кода (2)
.text
А:Инструкция A
B:Инструкция B
…
C:Инструкция C
.text
А:Переход
B:Инструкция B
…
C:Инструкция C
.text_s
1:Инструкция SS
X:Инструкция X
Y:Инструкция Y
…
Z:Инструкция Z
2:Инструкция SR
3:Инструкция A
R:Переход
.text_s
1:NOP
X:Инструкция X
Y:Инструкция Y
…
Z:Инструкция Z
2:NOP
3:NOP
R:NOP
SS — инструкция сохранения состояния
SR — инструкция восстановления состояния
NOP — «пустая» инструкция
18/29
Статическая инструментация:
внедрение кода (3)
• Возможные проблемы:
1)Инструкции в составе блоков
2)Инструкции зависят от позиции
3)Инструкции перехода больше по размеру
• Решения:
1)Перенос блоков (разбиение по блокам .text_s)
2)Трансформация инструкций в эквивалентные
3)Перенос блоков
19/29
Статическая инструментация:
оптимизация переходов (1)
● Расширение заменяемой инструкции до
блока
● Объединение блоков инструментационного
кода
20/29
Статическая инструментация:
оптимизация переходов (2)
.text
А:Инструкция A ⇒ переход
B:Инструкция B
C:Инструкция C
D:Инструкция D ⇒ переход
E:Инструкция E
.text_s
Блок 1
1:Инструкция SS
...
2:Инструкция SR
3:Инструкция A
4:Инструкция B
5:Инструкция C
R:Переход
Блок 2
6:Инструкция SS
...
7:Инструкция SR
8:Инструкция D
R:Переход
21/29
Статическая инструментация:
коррекция зависимостей (1)
● Целевой исполняемый код — внешние
зависимости X
● Инструментационный код — внешние
зависимости Y
● Зависимость d∈Y, d∉X ⇒ необходимо
расширить X
● Зависимость d Y, d X необходимо∈ ∈ ⇒
скорректировать d под X
22/29
Статическая инструментация:
коррекция зависимостей (2)
● Информация о зависимостях —
специальные секции (.rel.*, .plt, .got и др.)
● Добавление зависимостей — расширение
секций
● Выставление зависимостей и
корректировка смещений (аналогично
компоновщику)
23/29
Содержание
● Динамический анализ: цели и подходы
● Динамический анализ: задача обхода путей
● Статическая инструментация: подзадачи и
методы решения
● Статическая инструментация:
практическая реализация
24/29
Практическая реализация:
схема работы
Спецификации
модуля
инструментации
Объектный файл
кода
инструментации
Исходный
ARM ELF файл
ARM ELF файл:
расширение
секций
Код
инструментации
ARM ELF файл:
коррекция
зависимостей
Код
инструментации
ARM ELF файл:
полная
инструментация
Код
инструментации
objdump + gcc
readelf
+
objcopy
addsymbol
rewriter
25/29
Практическая реализация:
ограничения
● Поддержка только для ARM, Thumb-2
(ARMv7)
● Поддержка ограниченного количества типов
точек инструментации
● Наличие таблицы символов для точности
работы objdump (маркеры ARM/Thumb)
26/29
Практическая реализация:
применение для анализа
● Инструмент Avalanche: автоматический
обход путей и обнаружение дефектов
● tracegrind, covgrind: Valgrind ⇒ статика
tracegrind
Управляющий
модуль
covgrind
STP
программа
+
входные данные
трасса
выполнения
программа
+
входные
данные
дефекты
+
значения
эвристики
наборы булевых
ограничений
новые наборы
входных данных
27/29
Практическая реализация:
результаты применения
итерации дефекты (Tr + Cg)/STP
статика динамика статика динамика статика динамика
swfdump 575 105 4 1 72/28 87/13
mpeg2dec 302 55 1 1 37/63 89/11
cjpeg 1331 236 1 1 10/90 88/12
qtdump 1027 189 1 1 21/79 80/20
mpeg3dump 125 54 2 1 41/59 76/24
28/29
Направления дальнейших
исследований
● Интеграция с системами статического
анализа исполняемого кода (например,
BAP)
● Поддержка дополнительных наборов
инструкций
● Оптимизация структуры
инструментационного кода
29/29
Спасибо за внимание!
30/29
[Nr] Name Addr Size
[0] NULL 0 0
[1] .interp 10154 13
[2] .note.ABI­tag 10168 20
[3] .note.gnu.build­id 10188 24
[4] .hash 101ac 30
[5] .gnu.hash 101dc 34
[6] .dynsym 10210 70
[7] .dynstr 10280 4d
[8] .gnu.version 102ce e
[9] .gnu.version_r 102dc 20
[10] .rel.dyn 102fc 8
[11] .rel.plt 10304 30
[12] .init 10334 c
[13] .plt 10340 5c
[14] .text 1039c 1a0
[15] .fini 1053c 8
[16] .rodata 10544 4
[17] .ARM.exidx 10548 8
[18] .eh_frame 10550 4
[19] .init_array 20f04 4
[20] .fini_array 20f08 4
[21] .jcr 20f0c 4
[22] .dynamic 20f10 f0
[23] .got 21000 28
[24] .data 21028 8
[25] .bss 21030 8
[36] .shstrtab 0 170
[37] .symtab 0 7a0
[38] .strtab 0 3ae
[Nr] Name Addr Size
[0] NULL 0 0
[1] .interp 10154 13
[2] .note.ABI­tag 10168 20
[3] .note.gnu.build­id 10188 24
[4] .hash 101ac 30
[5] .gnu.hash 101dc 34
[6] .dynsym 10210 80
[7] .dynstr 1064c 65
[8] .gnu.version 10290 10
[9] .gnu.version_r 102ac 40
[10] .rel.dyn 102fc 8
[11] .init 102a0 c
[12] .plt 10334 68
[13] .text 1039c 1a0
[14] .fini 1053c 8
[15] .rodata 10544 4
[16] .ARM.exidx 10548 8
[17] .eh_frame 10550 4
[18] .init_array 20f04 4
[19] .fini_array 20f08 4
[20] .jcr 20f0c 4
[21] .dynamic 10554 f8
[22] .got 21000 28
[23] .data 21028 8
[24] .bss 21030 8
[35] .rodata_s 21590 1000
[36] .text_s 2103c 554
[37] .got2 21038 4
[38] .rel.plt 23590 60
[39] .shstrtab 0 188
[40] .symtab 0 7d0
[41] .strtab 0 3ae

More Related Content

PDF
TMPA-2015: Formal Methods in Robotics
PDF
TMPA-2015: Multi-Module Application Tracing in z/OS Environment
PPTX
TMPA-2015: Standards and Standartization in Program Engineering. Why Would Yo...
PDF
A Method of Building Extended Finite State Machines According to HDL-Descript...
PDF
TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Lineri...
PPTX
TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...
PDF
Test Set Generation Based on a Management Stream Model
PPTX
TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...
TMPA-2015: Formal Methods in Robotics
TMPA-2015: Multi-Module Application Tracing in z/OS Environment
TMPA-2015: Standards and Standartization in Program Engineering. Why Would Yo...
A Method of Building Extended Finite State Machines According to HDL-Descript...
TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Lineri...
TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...
Test Set Generation Based on a Management Stream Model
TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...

What's hot (20)

PPTX
TMPA-2015: Automated process of creating test scenarios for financial protoco...
PPTX
TMPA-2013 Itsykson: Java Program Analysis
PDF
Static Analysis of Transactions Management in Applications for Java EE Platform
PDF
Lightweight Static Analysis for Data Race Detection in Operating System Kernels
PDF
TMPA-2015: Lexical analysis of dynamically formed string expressions
PDF
Approaches to the Fragmentation of a Paravirtualization System
PDF
The Analysis of Test Scenario Coverage for a UCM-Model
PPT
TMPA-2015: Information Support System for Autonomous Spacecraft Control Macro...
PPT
TMPA-2013 Senov: Applying OLAP and MapReduce Technologies for Performance Tes...
PDF
TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...
PDF
TMPA-2013 Dmitry Zaitsev
PDF
Testing of a Risk Control System Implementation for High-Load Exchange and Br...
PDF
Service Robotics in Science and Education
PDF
TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Ana...
PPT
TMPA-2013 Smirnov
PPT
20120309 formal semantics shilov_lecture04
PPTX
TMPA-2013: Shipin System-C Control Points
PPTX
Применение статического анализа кода в преподавании и в разработке свободного ПО
PPT
Anti-fraud solutions in RTB / Вадим Антонюк (IPONWEB)
PDF
A runtime verification system for Software Defined Networks
TMPA-2015: Automated process of creating test scenarios for financial protoco...
TMPA-2013 Itsykson: Java Program Analysis
Static Analysis of Transactions Management in Applications for Java EE Platform
Lightweight Static Analysis for Data Race Detection in Operating System Kernels
TMPA-2015: Lexical analysis of dynamically formed string expressions
Approaches to the Fragmentation of a Paravirtualization System
The Analysis of Test Scenario Coverage for a UCM-Model
TMPA-2015: Information Support System for Autonomous Spacecraft Control Macro...
TMPA-2013 Senov: Applying OLAP and MapReduce Technologies for Performance Tes...
TMPA-2015: Expanding the Meta-Generation of Correctness Conditions by Means o...
TMPA-2013 Dmitry Zaitsev
Testing of a Risk Control System Implementation for High-Load Exchange and Br...
Service Robotics in Science and Education
TMPA-2013 Vert Krikun: Finding Defects in C and C++ Pointers Using Static Ana...
TMPA-2013 Smirnov
20120309 formal semantics shilov_lecture04
TMPA-2013: Shipin System-C Control Points
Применение статического анализа кода в преподавании и в разработке свободного ПО
Anti-fraud solutions in RTB / Вадим Антонюк (IPONWEB)
A runtime verification system for Software Defined Networks
Ad

Viewers also liked (18)

PDF
TMPA-2015: The Application of Parameterized Hierarchy Templates for Automated...
PDF
TMPA-2015: Software Engineering Education: The Messir Approach
PDF
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines
PPTX
TMPA-2015: Generation of Test Scenarios for Non Deterministic and Concurrent ...
PPT
TMPA-2015: ClearTH: a Tool for Automated Testing of Post Trade Systems
PDF
TMPA-2015: Implementing the MetaVCG Approach in the C-light System
PDF
TMPA-2015: The Verification of Functional Programs by Applying Statechart Dia...
PDF
TMPA-2015: Towards a Usable Defect Prediction Tool: Crossbreeding Machine Lea...
PDF
TMPA-2015: A Need To Specify and Verify Standard Functions
PPT
TMPA-2015: FPGA-Based Low Latency Sponsored Access
PDF
TMPA-2015: Kotlin: From Null Dereference to Smart Casts
PDF
TMPA-2017: The Quest for Average Response Time
PDF
TMPA-2017: Evolutionary Algorithms in Test Generation for digital systems
PDF
TMPA-2017: Modeling of PLC-programs by High-level Coloured Petri Nets
PDF
TMPA-2017: A Survey of High-Performance Computing for Software Verification
PDF
TMPA-2017: Layered Layouts for Software Systems Visualization
PDF
TMPA-2017: Stemming Architectural Decay in Software Systems
PDF
TMPA-2017: Functional Parser of Markdown Language Based on Monad Combining an...
TMPA-2015: The Application of Parameterized Hierarchy Templates for Automated...
TMPA-2015: Software Engineering Education: The Messir Approach
TMPA-2015: Multi-Platform Approach to Reverse Debugging of Virtual Machines
TMPA-2015: Generation of Test Scenarios for Non Deterministic and Concurrent ...
TMPA-2015: ClearTH: a Tool for Automated Testing of Post Trade Systems
TMPA-2015: Implementing the MetaVCG Approach in the C-light System
TMPA-2015: The Verification of Functional Programs by Applying Statechart Dia...
TMPA-2015: Towards a Usable Defect Prediction Tool: Crossbreeding Machine Lea...
TMPA-2015: A Need To Specify and Verify Standard Functions
TMPA-2015: FPGA-Based Low Latency Sponsored Access
TMPA-2015: Kotlin: From Null Dereference to Smart Casts
TMPA-2017: The Quest for Average Response Time
TMPA-2017: Evolutionary Algorithms in Test Generation for digital systems
TMPA-2017: Modeling of PLC-programs by High-level Coloured Petri Nets
TMPA-2017: A Survey of High-Performance Computing for Software Verification
TMPA-2017: Layered Layouts for Software Systems Visualization
TMPA-2017: Stemming Architectural Decay in Software Systems
TMPA-2017: Functional Parser of Markdown Language Based on Monad Combining an...
Ad

Similar to TMPA-2015: The dynamic Analysis of Executable Code in ELF Format Based on Static Binary Instrumentation (20)

PPT
Развитие технологий генерации эксплойтов на основе анализа бинарного кода
PPTX
Эффективный C++
PDF
C++ весна 2014 лекция 2
PDF
Как приручить дракона: введение в LLVM
PDF
Tech Talks @NSU: Как приручить дракона: введение в LLVM
PPTX
Технологии анализа бинарного кода приложений: требования, проблемы, инструменты
PDF
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
PDF
PDF
Practical Language for Extracting Data from Source Codes and Preparing Them f...
PPTX
Улучшение качества открытого программного обеспечения с помощью инструментов ...
PPTX
Опыт разработки статического анализатора кода
PDF
Трудности сравнения анализаторов кода или не забывайте об удобстве использования
PPTX
Основы и применение статического анализа кода при разработке лекция 1
PPTX
Принципы работы статического анализатора кода PVS-Studio
PPTX
Расширяем идею статического анализа от проверки кода до других процессов разр...
PPTX
Статический анализ кода: Что? Как? Зачем?
PPTX
Алексей Баранцев -- Какое дело тестировщикам до исходного кода?
PPTX
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
PPTX
SAST и Application Security: как бороться с уязвимостями в коде
PDF
static - defcon russia 20
Развитие технологий генерации эксплойтов на основе анализа бинарного кода
Эффективный C++
C++ весна 2014 лекция 2
Как приручить дракона: введение в LLVM
Tech Talks @NSU: Как приручить дракона: введение в LLVM
Технологии анализа бинарного кода приложений: требования, проблемы, инструменты
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...
Practical Language for Extracting Data from Source Codes and Preparing Them f...
Улучшение качества открытого программного обеспечения с помощью инструментов ...
Опыт разработки статического анализатора кода
Трудности сравнения анализаторов кода или не забывайте об удобстве использования
Основы и применение статического анализа кода при разработке лекция 1
Принципы работы статического анализатора кода PVS-Studio
Расширяем идею статического анализа от проверки кода до других процессов разр...
Статический анализ кода: Что? Как? Зачем?
Алексей Баранцев -- Какое дело тестировщикам до исходного кода?
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
SAST и Application Security: как бороться с уязвимостями в коде
static - defcon russia 20

More from Iosif Itkin (20)

PDF
Foundations of Software Testing Lecture 4
PPTX
QA Financial Forum London 2021 - Automation in Software Testing. Humans and C...
PDF
Exactpro FinTech Webinar - Global Exchanges Test Oracles
PDF
Exactpro FinTech Webinar - Global Exchanges FIX Protocol
PDF
Operational Resilience in Financial Market Infrastructures
PDF
20 Simple Questions from Exactpro for Your Enjoyment This Holiday Season
PDF
Testing the Intelligence of your AI
PDF
EXTENT 2019: Exactpro Quality Assurance for Financial Market Infrastructures
PDF
ClearTH Test Automation Framework: Case Study in IRS & CDS Swaps Lifecycle Mo...
PPTX
EXTENT Talks 2019 Tbilisi: Failover and Recovery Test Automation - Ivan Shamrai
PDF
EXTENT Talks QA Community Tbilisi 20 April 2019 - Conference Open
PDF
User-Assisted Log Analysis for Quality Control of Distributed Fintech Applica...
PPTX
QAFF Chicago 2019 - Complex Post-Trade Systems, Requirements Traceability and...
PDF
QA Community Saratov: Past, Present, Future (2019-02-08)
PDF
Machine Learning and RoboCop Testing
PDF
Behaviour Driven Development: Oltre i limiti del possibile
PDF
2018 - Exactpro Year in Review
PPTX
Exactpro Discussion about Joy and Strategy
PPTX
FIX EMEA Conference 2018 - Post Trade Software Testing Challenges
PDF
BDD. The Outer Limits. Iosif Itkin at Youcon (in Russian)
Foundations of Software Testing Lecture 4
QA Financial Forum London 2021 - Automation in Software Testing. Humans and C...
Exactpro FinTech Webinar - Global Exchanges Test Oracles
Exactpro FinTech Webinar - Global Exchanges FIX Protocol
Operational Resilience in Financial Market Infrastructures
20 Simple Questions from Exactpro for Your Enjoyment This Holiday Season
Testing the Intelligence of your AI
EXTENT 2019: Exactpro Quality Assurance for Financial Market Infrastructures
ClearTH Test Automation Framework: Case Study in IRS & CDS Swaps Lifecycle Mo...
EXTENT Talks 2019 Tbilisi: Failover and Recovery Test Automation - Ivan Shamrai
EXTENT Talks QA Community Tbilisi 20 April 2019 - Conference Open
User-Assisted Log Analysis for Quality Control of Distributed Fintech Applica...
QAFF Chicago 2019 - Complex Post-Trade Systems, Requirements Traceability and...
QA Community Saratov: Past, Present, Future (2019-02-08)
Machine Learning and RoboCop Testing
Behaviour Driven Development: Oltre i limiti del possibile
2018 - Exactpro Year in Review
Exactpro Discussion about Joy and Strategy
FIX EMEA Conference 2018 - Post Trade Software Testing Challenges
BDD. The Outer Limits. Iosif Itkin at Youcon (in Russian)

TMPA-2015: The dynamic Analysis of Executable Code in ELF Format Based on Static Binary Instrumentation

  • 1. Динамический анализ исполняемого кода в формате ELF на основе статической бинарной инструментации Михаил Ермаков ИСП РАН, Москва Санкт-Петербург, 12.11.2015
  • 2. 2/29 Содержание ● Динамический анализ: цели и подходы ● Динамический анализ: задача обхода путей ● Статическая инструментация: подзадачи и методы решения ● Статическая инструментация: практическая реализация
  • 3. 3/29 Динамический анализ ● Исследование в рамках выполнения программы ● Отслеживание событий – Временные – Позиционные – Функциональные ● Проверка свойств ● Формирование статистики, трасс
  • 4. 4/29 Динамический анализ: подходы ● Аппаратные подходы ● Внешние программные средства ● Эмуляторы/виртуальные машины ● Инструментация: – исходного кода – статическая – динамическая
  • 5. 5 Динамический анализ: инструментация (1) ● Внедрение дополнительного кода, выполняющегося как побочный эффект ● Позволяет работать на уровне блоков инструкций ● Накладные расходы: – разбор – модификация – внедряемый код
  • 6. 6/29 Динамический анализ: инструментация (2) ● Динамическая – Во время выполнения – Точность выше – Локальная трансформация ● Статическая – Предварительно, независимо от среды выполнения – Точность ниже – Глобальная трансформация
  • 7. 7/29 Динамический анализ: статическая инструментация ● Позволяет манипулировать на низком уровне (+) ● Эффективна при многократных запусках (+) ● Интегрируема со статическим анализом бинарного кода (+) ● Чёткое ограничение модифицируемого кода (+/-) ● Нет прямого соотношения с выполняемым кодом (-)
  • 8. 8/29 Содержание ● Динамический анализ: цели и подходы ● Динамический анализ: задача обхода путей ● Статическая инструментация: подзадачи и методы решения ● Статическая инструментация: практическая реализация
  • 9. 9/29 Динамический анализ: автоматический обход путей ● Итеративное выполнение на различных наборах данных: – Отслеживание потока данных, зависимых от входных, — помеченных данных – Создание трассы операций потока помеченных данных в виде булевых формул (ограничений) – Модификация трассы и разрешение ограничений для создания новых наборов данных
  • 10. 10/29 Автоматический обход путей: поток помеченных данных (1) int x = read(...) int y = x; if (y < 0) do1(); else do2(); x : bitvector(32); y : bitvector(32); taint (x); assert (y = x); assert (y < 0 = true); ... // do1()
  • 11. 11/29 Автоматический обход путей: поток помеченных данных (2) x : bitvector(32); y : bitvector(32); taint (x); assert (y = x); assert (y < 0 = false); int x = read(...) int y = x; if (y < 0) do1(); else do2();
  • 12. 12/29 Автоматический обход путей: особенности задачи ● Повторные запуски ● Экспоненциальный рост числа путей ● Сложность задачи проверки выполнимости трассы ограничений
  • 13. 13/29 Содержание ● Динамический анализ: цели и подходы ● Динамический анализ: задача обхода путей ● Статическая инструментация: подзадачи и методы решения ● Статическая инструментация: практическая реализация
  • 14. 14/29 Статическая инструментация: последовательность действий ● Вход: (точка инструментации, код инструментации) ● Разбор исполняемого кода, инстанциация пар для спецификаций ● Генерация исполняемого кода инструментации в виде набора блоков ● Внедрение нового кода
  • 15. 15/29 Статическая инструментация: формат ELF ● Состоит из секций, обладающих виртуальным адресом — позицией в образе памяти ● Возможны относительные зависимости между секциями ● Возможны относительные зависимости внутри секций ● Секции объединяются в сегменты, возможность изменений ограничена Заголовок .hash .dynsym .dynstr .text .plt .got .dynamic ...
  • 16. 16/29 Статическая инструментация: внедрение кода (1) ● Решение: добавление инструментационного кода в виде дополнительных секций ● В точках инструментации — инструкции перехода в .text_s ● В конце блоков .text_s — инструкции обратного перехода ● Заменённые инструкции — перед концом блоков .text_s Заголовок .hash .dynsym .dynstr .text .plt .got .dynamic ... .text_s
  • 17. 17/29 Статическая инструментация: внедрение кода (2) .text А:Инструкция A B:Инструкция B … C:Инструкция C .text А:Переход B:Инструкция B … C:Инструкция C .text_s 1:Инструкция SS X:Инструкция X Y:Инструкция Y … Z:Инструкция Z 2:Инструкция SR 3:Инструкция A R:Переход .text_s 1:NOP X:Инструкция X Y:Инструкция Y … Z:Инструкция Z 2:NOP 3:NOP R:NOP SS — инструкция сохранения состояния SR — инструкция восстановления состояния NOP — «пустая» инструкция
  • 18. 18/29 Статическая инструментация: внедрение кода (3) • Возможные проблемы: 1)Инструкции в составе блоков 2)Инструкции зависят от позиции 3)Инструкции перехода больше по размеру • Решения: 1)Перенос блоков (разбиение по блокам .text_s) 2)Трансформация инструкций в эквивалентные 3)Перенос блоков
  • 19. 19/29 Статическая инструментация: оптимизация переходов (1) ● Расширение заменяемой инструкции до блока ● Объединение блоков инструментационного кода
  • 20. 20/29 Статическая инструментация: оптимизация переходов (2) .text А:Инструкция A ⇒ переход B:Инструкция B C:Инструкция C D:Инструкция D ⇒ переход E:Инструкция E .text_s Блок 1 1:Инструкция SS ... 2:Инструкция SR 3:Инструкция A 4:Инструкция B 5:Инструкция C R:Переход Блок 2 6:Инструкция SS ... 7:Инструкция SR 8:Инструкция D R:Переход
  • 21. 21/29 Статическая инструментация: коррекция зависимостей (1) ● Целевой исполняемый код — внешние зависимости X ● Инструментационный код — внешние зависимости Y ● Зависимость d∈Y, d∉X ⇒ необходимо расширить X ● Зависимость d Y, d X необходимо∈ ∈ ⇒ скорректировать d под X
  • 22. 22/29 Статическая инструментация: коррекция зависимостей (2) ● Информация о зависимостях — специальные секции (.rel.*, .plt, .got и др.) ● Добавление зависимостей — расширение секций ● Выставление зависимостей и корректировка смещений (аналогично компоновщику)
  • 23. 23/29 Содержание ● Динамический анализ: цели и подходы ● Динамический анализ: задача обхода путей ● Статическая инструментация: подзадачи и методы решения ● Статическая инструментация: практическая реализация
  • 24. 24/29 Практическая реализация: схема работы Спецификации модуля инструментации Объектный файл кода инструментации Исходный ARM ELF файл ARM ELF файл: расширение секций Код инструментации ARM ELF файл: коррекция зависимостей Код инструментации ARM ELF файл: полная инструментация Код инструментации objdump + gcc readelf + objcopy addsymbol rewriter
  • 25. 25/29 Практическая реализация: ограничения ● Поддержка только для ARM, Thumb-2 (ARMv7) ● Поддержка ограниченного количества типов точек инструментации ● Наличие таблицы символов для точности работы objdump (маркеры ARM/Thumb)
  • 26. 26/29 Практическая реализация: применение для анализа ● Инструмент Avalanche: автоматический обход путей и обнаружение дефектов ● tracegrind, covgrind: Valgrind ⇒ статика tracegrind Управляющий модуль covgrind STP программа + входные данные трасса выполнения программа + входные данные дефекты + значения эвристики наборы булевых ограничений новые наборы входных данных
  • 27. 27/29 Практическая реализация: результаты применения итерации дефекты (Tr + Cg)/STP статика динамика статика динамика статика динамика swfdump 575 105 4 1 72/28 87/13 mpeg2dec 302 55 1 1 37/63 89/11 cjpeg 1331 236 1 1 10/90 88/12 qtdump 1027 189 1 1 21/79 80/20 mpeg3dump 125 54 2 1 41/59 76/24
  • 28. 28/29 Направления дальнейших исследований ● Интеграция с системами статического анализа исполняемого кода (например, BAP) ● Поддержка дополнительных наборов инструкций ● Оптимизация структуры инструментационного кода
  • 30. 30/29 [Nr] Name Addr Size [0] NULL 0 0 [1] .interp 10154 13 [2] .note.ABI­tag 10168 20 [3] .note.gnu.build­id 10188 24 [4] .hash 101ac 30 [5] .gnu.hash 101dc 34 [6] .dynsym 10210 70 [7] .dynstr 10280 4d [8] .gnu.version 102ce e [9] .gnu.version_r 102dc 20 [10] .rel.dyn 102fc 8 [11] .rel.plt 10304 30 [12] .init 10334 c [13] .plt 10340 5c [14] .text 1039c 1a0 [15] .fini 1053c 8 [16] .rodata 10544 4 [17] .ARM.exidx 10548 8 [18] .eh_frame 10550 4 [19] .init_array 20f04 4 [20] .fini_array 20f08 4 [21] .jcr 20f0c 4 [22] .dynamic 20f10 f0 [23] .got 21000 28 [24] .data 21028 8 [25] .bss 21030 8 [36] .shstrtab 0 170 [37] .symtab 0 7a0 [38] .strtab 0 3ae [Nr] Name Addr Size [0] NULL 0 0 [1] .interp 10154 13 [2] .note.ABI­tag 10168 20 [3] .note.gnu.build­id 10188 24 [4] .hash 101ac 30 [5] .gnu.hash 101dc 34 [6] .dynsym 10210 80 [7] .dynstr 1064c 65 [8] .gnu.version 10290 10 [9] .gnu.version_r 102ac 40 [10] .rel.dyn 102fc 8 [11] .init 102a0 c [12] .plt 10334 68 [13] .text 1039c 1a0 [14] .fini 1053c 8 [15] .rodata 10544 4 [16] .ARM.exidx 10548 8 [17] .eh_frame 10550 4 [18] .init_array 20f04 4 [19] .fini_array 20f08 4 [20] .jcr 20f0c 4 [21] .dynamic 10554 f8 [22] .got 21000 28 [23] .data 21028 8 [24] .bss 21030 8 [35] .rodata_s 21590 1000 [36] .text_s 2103c 554 [37] .got2 21038 4 [38] .rel.plt 23590 60 [39] .shstrtab 0 188 [40] .symtab 0 7d0 [41] .strtab 0 3ae