Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

2,695 views

Published on

The dynamic analysis of executable code in ELF format based on static binary instrumentation
Mikhail Yermakov,ISP RAS

12 - 14 November 2015
Tools and Methods of Program Analysis in St. Petersburg

Published in: Science
  • Be the first to comment

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

  1. 1. Динамический анализ исполняемого кода в формате ELF на основе статической бинарной инструментации Михаил Ермаков ИСП РАН, Москва Санкт-Петербург, 12.11.2015
  2. 2. 2/29 Содержание ● Динамический анализ: цели и подходы ● Динамический анализ: задача обхода путей ● Статическая инструментация: подзадачи и методы решения ● Статическая инструментация: практическая реализация
  3. 3. 3/29 Динамический анализ ● Исследование в рамках выполнения программы ● Отслеживание событий – Временные – Позиционные – Функциональные ● Проверка свойств ● Формирование статистики, трасс
  4. 4. 4/29 Динамический анализ: подходы ● Аппаратные подходы ● Внешние программные средства ● Эмуляторы/виртуальные машины ● Инструментация: – исходного кода – статическая – динамическая
  5. 5. 5 Динамический анализ: инструментация (1) ● Внедрение дополнительного кода, выполняющегося как побочный эффект ● Позволяет работать на уровне блоков инструкций ● Накладные расходы: – разбор – модификация – внедряемый код
  6. 6. 6/29 Динамический анализ: инструментация (2) ● Динамическая – Во время выполнения – Точность выше – Локальная трансформация ● Статическая – Предварительно, независимо от среды выполнения – Точность ниже – Глобальная трансформация
  7. 7. 7/29 Динамический анализ: статическая инструментация ● Позволяет манипулировать на низком уровне (+) ● Эффективна при многократных запусках (+) ● Интегрируема со статическим анализом бинарного кода (+) ● Чёткое ограничение модифицируемого кода (+/-) ● Нет прямого соотношения с выполняемым кодом (-)
  8. 8. 8/29 Содержание ● Динамический анализ: цели и подходы ● Динамический анализ: задача обхода путей ● Статическая инструментация: подзадачи и методы решения ● Статическая инструментация: практическая реализация
  9. 9. 9/29 Динамический анализ: автоматический обход путей ● Итеративное выполнение на различных наборах данных: – Отслеживание потока данных, зависимых от входных, — помеченных данных – Создание трассы операций потока помеченных данных в виде булевых формул (ограничений) – Модификация трассы и разрешение ограничений для создания новых наборов данных
  10. 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. 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. 12/29 Автоматический обход путей: особенности задачи ● Повторные запуски ● Экспоненциальный рост числа путей ● Сложность задачи проверки выполнимости трассы ограничений
  13. 13. 13/29 Содержание ● Динамический анализ: цели и подходы ● Динамический анализ: задача обхода путей ● Статическая инструментация: подзадачи и методы решения ● Статическая инструментация: практическая реализация
  14. 14. 14/29 Статическая инструментация: последовательность действий ● Вход: (точка инструментации, код инструментации) ● Разбор исполняемого кода, инстанциация пар для спецификаций ● Генерация исполняемого кода инструментации в виде набора блоков ● Внедрение нового кода
  15. 15. 15/29 Статическая инструментация: формат ELF ● Состоит из секций, обладающих виртуальным адресом — позицией в образе памяти ● Возможны относительные зависимости между секциями ● Возможны относительные зависимости внутри секций ● Секции объединяются в сегменты, возможность изменений ограничена Заголовок .hash .dynsym .dynstr .text .plt .got .dynamic ...
  16. 16. 16/29 Статическая инструментация: внедрение кода (1) ● Решение: добавление инструментационного кода в виде дополнительных секций ● В точках инструментации — инструкции перехода в .text_s ● В конце блоков .text_s — инструкции обратного перехода ● Заменённые инструкции — перед концом блоков .text_s Заголовок .hash .dynsym .dynstr .text .plt .got .dynamic ... .text_s
  17. 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. 18/29 Статическая инструментация: внедрение кода (3) • Возможные проблемы: 1)Инструкции в составе блоков 2)Инструкции зависят от позиции 3)Инструкции перехода больше по размеру • Решения: 1)Перенос блоков (разбиение по блокам .text_s) 2)Трансформация инструкций в эквивалентные 3)Перенос блоков
  19. 19. 19/29 Статическая инструментация: оптимизация переходов (1) ● Расширение заменяемой инструкции до блока ● Объединение блоков инструментационного кода
  20. 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. 21/29 Статическая инструментация: коррекция зависимостей (1) ● Целевой исполняемый код — внешние зависимости X ● Инструментационный код — внешние зависимости Y ● Зависимость d∈Y, d∉X ⇒ необходимо расширить X ● Зависимость d Y, d X необходимо∈ ∈ ⇒ скорректировать d под X
  22. 22. 22/29 Статическая инструментация: коррекция зависимостей (2) ● Информация о зависимостях — специальные секции (.rel.*, .plt, .got и др.) ● Добавление зависимостей — расширение секций ● Выставление зависимостей и корректировка смещений (аналогично компоновщику)
  23. 23. 23/29 Содержание ● Динамический анализ: цели и подходы ● Динамический анализ: задача обхода путей ● Статическая инструментация: подзадачи и методы решения ● Статическая инструментация: практическая реализация
  24. 24. 24/29 Практическая реализация: схема работы Спецификации модуля инструментации Объектный файл кода инструментации Исходный ARM ELF файл ARM ELF файл: расширение секций Код инструментации ARM ELF файл: коррекция зависимостей Код инструментации ARM ELF файл: полная инструментация Код инструментации objdump + gcc readelf + objcopy addsymbol rewriter
  25. 25. 25/29 Практическая реализация: ограничения ● Поддержка только для ARM, Thumb-2 (ARMv7) ● Поддержка ограниченного количества типов точек инструментации ● Наличие таблицы символов для точности работы objdump (маркеры ARM/Thumb)
  26. 26. 26/29 Практическая реализация: применение для анализа ● Инструмент Avalanche: автоматический обход путей и обнаружение дефектов ● tracegrind, covgrind: Valgrind ⇒ статика tracegrind Управляющий модуль covgrind STP программа + входные данные трасса выполнения программа + входные данные дефекты + значения эвристики наборы булевых ограничений новые наборы входных данных
  27. 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. 28/29 Направления дальнейших исследований ● Интеграция с системами статического анализа исполняемого кода (например, BAP) ● Поддержка дополнительных наборов инструкций ● Оптимизация структуры инструментационного кода
  29. 29. 29/29 Спасибо за внимание!
  30. 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

×