Актуальные проблемы авиации и космонавтики - 2019. Том 2
УДК 004.056
АНАЛИЗ ВНУТРЕННЕГО СОСТОЯНИЯ ПРОГРАММЫ ДЛЯ ГЕНЕРАЦИИ ВХОДНЫХ ДАННЫХ ПРИ ФАЗЗИНГ-ТЕСТИРОВАНИИ
М. В. Созин
Сибирский государственный университет науки и технологий имени академика М. Ф. Решетнева
Российская Федерация, 660037, г. Красноярск, просп. им. газ. «Красноярский рабочий», 31
E-mail: mikawamp@gmail.com
Рассматриваются вопросы связанные с генерацией входных данных для фаззинг-тестирования, основанной на анализе графа потока исполнения программы. Описанный подход позволит повысить эффективность фаззинг-тестирования путём повышения качества данных для тестирования. Решение использующее данные методы может быть использовано при тестировании ПО и при разработке программ для автоматической генерации эксплойтов.
Ключевые слова: фаззинг, граф потока управления, тестирование.
FUZZING DATA GENERATION BASED ON EXECUTION STATE
M. V. Sozin
Reshetnev Siberian State University of Science and Technology 31, Krasnoyarsky Rabochy Av., Krasnoyarsk, 660037, Russian Federation E-mail: mikawamp@gmail.com
The issues related to generation data for fuzzing testing based on analysis execution state. Related method allow to improve testing process via improve quality of input data Program based on this methods could be used direct in program application testing and in automatic exploit generators.
Keywords: fuzzing, control flow graph, testing.
Введение. Фаззинг-тестирование - метод анализа программы, основанный на подаче тестируемой программе различных данных для проверки отсутствия ошибок при их обработке. Классически выделяют 3 вида тестирования программы: чёрный ящик, серый ящик и белый ящик.
В данной методике предлагается использовать метод белого ящика, а также дополнительные возможности внутри программы, такие как санитайзеры, в целях получения информации о внутреннем состоянии программы для оптимизации входных данных.
Смежные исследования в этой области представлены в работах [1-6].
Основные используемые методики. Для достижения результатов объединяются следующие методы:
а) построение графа потока управления - метод, позволяющий получить дерево возможных путей исполнения программы, состоящее из базовых блоков и ребер дерева;
б) поиск паттернов ошибок в программном коде - метод, позволяющий используя существующую базу паттернов ошибок найти слабые места в коде;
в) генератор входных данных для фаззинг-тестирования - программа, целью которой является генерация входных данных, которые будет использованы в тестировании. В качестве входных данных получает граф потока управления и список базовых блоков, в которых находятся ошибки. На основе этого и сигналов управления от фаззера и санитайзеров происходит контроль процесса генерации входных данных;
г) санитайзеры - функции внутри программы, которые позволяют обнаружить аномальное состояние или поведение программы. Аномальность состояния определяется самими санитайзеры;
д) фаззинг-тестирование - позволяет находить ошибки в программе, путём подачи сгенерированных входных данных.
Секция «Информационнаябезопасность»
Реализация методики. Сперва строится дерево возможных путей исполнения программы. Далее производится статический анализ программы с целью обнаружения путей, потенциально содержащих уязвимости. После начинается фаззинг с использованием случайных или псевдослучайных данных, в процессе генератор входных данных начинает собирать статистику сигналов, поступающих от программы и санитайзеров. Дальнейшая генерация данных начинается с учётом статистики того, какие данных проходили по путям исполнения, проходящим через уязвимые участки и какие данные привели к ошибкам.
Проблемы методики. Методика использует метод белого ящика, а это означает, что для программы должны быть доступны исходные коды. Также методика, в основном, не будет обнаруживать ошибки, которые не находятся в списке паттернов ошибок, и не были обнаружены на этапе статического тестирования.
Выводы. Реализация данной методики позволит более полно обрабатывать ошибки с помощью фаззинг-тестирования, а также позволит ранжировать ошибки, полученные на этапе поиска по паттернам, по влиянию, которое они оказывают на программу, что позволит определить порядок исправления ошибок. Данная методика может использоваться для автоматического тестирования программ с открытым исходным кодом. Также может использовать как составная часть автоматического генератора эксплойтов.
Библиографические ссылки
1 Böhme, M., Pham, V., Nguyen, M., Roychoudhury, A. Directed Greybox Fuzzing / Proceedings of the 2017 ACM SIGSAC Conference on Computer and Communications Security, 2017, pp. 23292344.
2 Böhme, M., Pham, V., Roychoudhury, A. Coverage-based Greybox Fuzzing as Markov Chain / Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications Security, pp. 1032-1043.
3 Pak, B. Hybrid Fuzz Testing: Discovering Software Bugs via Fuzzing and Symbolic Execution / PhD Thesis. Carnegi Mellon University, 2012. - 80 p.
4 Addison A. Blending fuzzing and symbolic execution for malware analysis / Diss. for the Degree Bachelor of Science in Comp. Sc. - Georgia Institute of Technology, 2017. - 24 p.
5 Shudrak M. The technique of dynamic binary analysis and its application in the information security sphere / Shudrak M., Zolotarev V. // In Proceedings of IEEE EuroCon - 2013, Zagreb, Croatia. 2013 - pp. 112-118.
6 Improving fuzzing using software complexity metrics / Shudrak M.O., Zolotarev V.V. / Lecture Notes in Computer Science. 2016. Т. 9558. С. 246-261
© Созин М. В., 2019