Решетневские чтения. 2018
УДК 004.056
ФАЗЗИНГ НА ОСНОВАНИИ СОСТОЯНИЯ ИСПОЛНЕНИЯ ПРОГРАММЫ
М. В. Созин
Сибирский государственный университет науки и технологий имени академика М. Ф. Решетнева Российская Федерация, 660037, г. Красноярск, просп. им. газ. «Красноярский рабочий», 31
Е-mail: [email protected]
Рассматриваются вопросы, связанные с тестированием программного обеспечения на предмет ошибок, в частности в области пересечения статического и динамического анализа. Показанные методы позволяют максимизировать эффективность тестирования программного обеспечения. Решение, использующее данные методы, может быть применено в области тестирования ПО, сертификации ПО.
Ключевые слова: фаззинг, граф потока управления, тестирование, генетический алгоритм.
FUZZING BASED ON EXECUTION STATE M. V. Sozin
Reshetnev Siberian State University of Science and Technology 31, Krasnoyarsky Rabochy Av., Krasnoyarsk, 660037, Russian Federation Е-mail: [email protected]
The issues related to testing program applications especially static and dynamic analysis field conflux. Showed methods allow to maximize program application testing efficiency. Program based on this methods could be used direct in program application testing and in adjacent fields.
Keywords: fuzzing, control flow graph, testing, genetic algorithm.
Введение. Выделяют 2 типа анализа программы, статическое и динамическое тестирование. По отдельности эти методики не используются, но часто прикладные программы реализуют только один из видов тестирования.
В данной методике предлагается объединить оба вида тестирования в одно средство, взяв поиск ошибок в бинарном файле от статического анализа и проверку того, являются ли ошибки узвимостями, от динамического анализа.
Смежные исследования в этой области представлены в работах [1-6].
Основные используемые методики. В данной методике объединяются 4 метода:
а) построение графа потока управление - метод, который позволяет на основе бинарного файла создать дерево возможных путей, состоящее из базовых блоков и ребер, которые может выбрать поток управления;
б) поиск ошибок в бинарном файле - метод, который позволит найти паттерны ошибок в программе. Далее появляется возможность связать их с базовыми блоками и составить дерево возможных путей, включающую информацию об паттернах ошибок, содержащихся в базовых блоках;
в) контроль потока управления - метод, который позволит в реальном времени анализировать набор базовых блоков, через которые проходит программа. Это позволит проверять задействуются ли базовые блоки с паттернами ошибок для конкретного набора входных данных;
г) фаззинг - позволит искать ошибки в программе, путём подачи различных входных данных, вкупе с предыдущими методами позволяет проверять, что фаззинг задействует базовые блоки с паттернами ошибок и максимизировать веротность поиска ошибки;
д) генетический алгоритм для генерации входных данных - метод, который позволит генерировать оптимальные входные данные, при котрых поток управления будет проходить через бозовые блоки с ошибками.
Реализация объединения методов. Сперва на основе бинарного файла строится дерево возможных путей. Далее в бинарном файле производится поиск паттернов ошибок с помощью статического анализа, После чего начинается процесс фаззинга. Изначально для фаззинга используеются случайные или частично случайные входные данные. После сбора статистики того, к каким путям исполнения приводят конкретные входные данные генерируются новые входные данные, на основе входных данных, которые вели к блокам с паттернами ошибок. Использование такой цепочки позволит повысить эффективность генерации входных данных, скорость и эффективность фаззинга.
Проблемы метода. Могут возникнуть проблемы с зашифрованными бинарными файлами, а также с программами, использующими метод полиморфизма.
Зашифрованные банрные файлы не позволят протестировать с помощью статического анализатора, что не позволит польностью реализовать метод.
Программы, использующие полиморфизм могут изменять дерево возможных путей при каждом запус-
Информационная безопасность
ке, соответственно знания о том, как входные данные влияют на прохождение базовых блоков станет бесполезно, а это является ключевой особенность ме-тодаю.
Выводы. Реализация данной методики позволит ускорить нахождение реальных ошибок в программе с помощью тестирования. Данный метод можно использовать в программах Bug Bounty, при сертификации ПО и при поиске ошибок в программном обеспечении.
References
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. P. 2329-2344.
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. P. 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., Zolotarev V. The technique of dynamic binary analysis and its application in the information security sphere // In Proceedings of IEEE EuroCon -2013, Zagreb, Croatia. 2013. P. 112-118.
6. Shudrak M. O., Zolotarev V. V. Improving fuzzing using software complexity metrics // Lecture Notes in Computer Science. 2016. Vol. 9558. Р. 246-261.
© torn М. В., 2018