ВЫБОР ТОЧКИ ВНЕДРЕНИЯ ДЛЯ ФАЗЗИНГА В ПАМЯТИ Технологический институт « Южного федерального университета » в г. Таганроге докладчик: Благодаренко А. В. руководитель: д.т.н., проф. Макаревич О. Б.
Фаззинг Фаззинг – тестирование методом черного ящика, основанное на передаче большого набора входных данных исследуемому ПО Внедрение ФайлыСеть IOCTL Окружение Данные ГенерацияМутация 2
Фаззинг в памяти Фаззинг в памяти - вид фаззинга при котором данные передаются через внутренние структуры программы Позволяет миновать интерфейсные функции программы и их ограничения ( скорость, объемы данных ). Позволяет сфокусироваться на данных, обрабатываемых исследуемой частью кода. Не требуется подготовка данных в формате, который требуется интерфейсными функциями. 3
Цикл мутации 4
Восстановление состояния 5
Corelan in-memory fuzzer Целевой процесс / модуль Адрес точки входа в функцию ( получение слепка ) Адрес точки выхода из функции ( восстановление слепка ) Необходимы данные: Аргументы функции 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
Система Dataflow 8
Откуда начинать ? 9
Рейтинг функций Простой ориентированный граф G(V,E) Матрица смежности, где Матрица E дает информацию обо всех путях длины 1 в графе G(V,E). Композиция отношения E самой с собой Матрица достижимости = 10
Параметры функций 11
Фаззер файлов.pdf для программы Evince Пример 12
Тестовый запуск приложения Начать исследование Тестовый запуск 1 Тестовый запуск 2 Закончить исследование Получить статистику исполнения 13
Функции, принимающие данные Evince: 0xC030 14
Функции, принимающие данные Evince: 0x
Рейтинг функций 16
Оценка потенциального охвата 17
Подготовка теста. Возможности Вызов внутренних функций с заданными параметрами Динамическая оценка покрытия Последовательное внедрение ошибок Любые другие возможности, применимые к динамическим библиотекам 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
Исполнение теста Остановка на определенном этапе работы исследуемого ПО Загрузка динамической библиотеки в адресное пространство исследуемого ПО Исполнение Взаимодействие с тестирующим ПО : Внедрение ошибок Динамическая оценка покрытия 20
Оценка результатов 21
Вопросы ? 22