'

Выбор точки внедрения для фаззинга в памяти

Понравилась презентация – покажи это...





Слайд 0

Выбор точки внедрения для фаззинга в памяти Технологический институт «Южного федерального университета» в г. Таганроге докладчик: Благодаренко А. В. руководитель: д.т.н., проф. Макаревич О. Б.


Слайд 1

Фаззинг Фаззинг – тестирование методом черного ящика, основанное на передаче большого набора входных данных исследуемому ПО Внедрение Файлы Сеть IOCTL Окружение Данные Генерация Мутация 2


Слайд 2

Фаззинг в памяти Фаззинг в памяти - вид фаззинга при котором данные передаются через внутренние структуры программы Позволяет миновать интерфейсные функции программы и их ограничения ( скорость, объемы данных ). Позволяет сфокусироваться на данных, обрабатываемых исследуемой частью кода. Не требуется подготовка данных в формате, который требуется интерфейсными функциями. 3


Слайд 3

Цикл мутации 4


Слайд 4

Восстановление состояния 5


Слайд 5

Corelan in-memory fuzzer Целевой процесс/модуль Адрес точки входа в функцию (получение слепка) Адрес точки выхода из функции (восстановление слепка) Необходимы данные: Аргументы функции 6


Слайд 6

Фаззинг и модульные тесты while(1): accept(); recv() unmarshal() parse() func-1() func-2() … inline int __cdecl foo_sub_XX ( int a, int b, int c ); BOOL APIENTRY DllMain( … ) { foo_sub_XX (param_a, param_b, param_c ); } Восстановление прототипов функций Динамический анализ Исполнение в контексте целевого процесса 7


Слайд 7

Система Dataflow 8


Слайд 8

Откуда начинать? 9


Слайд 9

Рейтинг функций Простой ориентированный граф G(V,E) Матрица смежности , где Матрица E дает информацию обо всех путях длины 1 в графе G(V,E). Композиция отношения E самой с собой Матрица достижимости = 10


Слайд 10

Параметры функций 11


Слайд 11

Фаззер файлов .pdf для программы Evince Пример 12


Слайд 12

Тестовый запуск приложения Начать исследование Тестовый запуск 1 Тестовый запуск 2 Закончить исследование Получить статистику исполнения 13


Слайд 13

Функции, принимающие данные Evince: 0xC030 14


Слайд 14

Функции, принимающие данные Evince: 0x3290 15


Слайд 15

Рейтинг функций 16


Слайд 16

Оценка потенциального охвата 17


Слайд 17

Подготовка теста. Возможности Вызов внутренних функций с заданными параметрами Динамическая оценка покрытия Последовательное внедрение ошибок Любые другие возможности, применимые к динамическим библиотекам 18


Слайд 18

Подготовка теста #include "evince.h" CHECK_WITH_FAULT_INJECT( evince_sub_3290( 0x00f45158, ( int )fileName, 0x00f49038, 0, 0, 0 ) ); if( SendCommand( COMMAND_TRACK_STAT, ffd.cFileName ) ) { LogErr( "Can't send command\n" ); } 19


Слайд 19

Исполнение теста Остановка на определенном этапе работы исследуемого ПО Загрузка динамической библиотеки в адресное пространство исследуемого ПО Исполнение Взаимодействие с тестирующим ПО: Внедрение ошибок Динамическая оценка покрытия 20


Слайд 20

Оценка результатов 21


Слайд 21

Вопросы? 22


×

HTML:





Ссылка: