Тема: Автоматическое создание модульных тестов для обнаружения уязвимостей в исходных кодах приложений
Закажите новую по вашим требованиям
Представленный материал является образцом учебного исследования, примером структуры и содержания учебного исследования по заявленной теме. Размещён исключительно в информационных и ознакомительных целях.
Workspay.ru оказывает информационные услуги по сбору, обработке и структурированию материалов в соответствии с требованиями заказчика.
Размещение материала не означает публикацию произведения впервые и не предполагает передачу исключительных авторских прав третьим лицам.
Материал не предназначен для дословной сдачи в образовательные организации и требует самостоятельной переработки с соблюдением законодательства Российской Федерации об авторском праве и принципов академической добросовестности.
Авторские права на исходные материалы принадлежат их законным правообладателям. В случае возникновения вопросов, связанных с размещённым материалом, просим направить обращение через форму обратной связи.
📋 Содержание
Постановка задачи 6
1. Обзор 7
1.1. Предметная область 7
1.1.1 Символьное исполнение 7
1.1.2 SMT-решатель 9
1.1.3 Конколическое исполнение 9
1.1.4 Фаззинг 9
1.1.5 Taint-анализ 9
1.1.6 Уязвимости 10
1.2. Поиск базового инструмента 12
1.2.1 UTBot 12
1.2.2 SymbolicPathFinder 12
1.2.3 JBSE 13
1.2.4 Вывод 13
1.3. Существующие решения 13
2. Особенности реализации 15
2.1. Исследование базового инструмента 15
2.1.1 Принцип работы 15
2.1.2 Дополнительная функциональность 16
2.2. Реализация поверх UTBot 16
2.2.1 API 16
2.2.2 Изменение функциональности 17
2.3. Расширение функциональности 19
2.3.1 Обёртки 20
2.3.2 Подмена методов 24
2.4. Проверки уязвимостей 24
2.5. База знаний 27
2.6. Сторонние расширения 29
2.6.1 CyberPathSelector 29
2.6.2 Фаззинг аргументов 30
3. Примеры использования 32
3.1. Пример с HttpServletRequest 32
3.2. Большой пример с HttpServletRequest 33
3.3. BenchmarkTest00262 (OWASP) 33
Выводы 34
Заключение 35
Список литературы 36
Приложение 38
📖 Введение
Одним из способов проверить безопасность приложения является использование сторонних инструментов, в том числе анализаторов. Периодическое тестирование способно выявить уязвимости, появившиеся в ходе разработки, что даёт возможность своевременно от них избавиться.
Существует множество разных подходов для анализа программ. Наиболее востребованными технологиями на сегодняшний день являются динамический и статический анализы. Рассмотрим их с точки зрения безопасности. Статический анализ кода производится без запуска программы. Он позволяет сканировать код и выявлять известные уязвимости. Однако, поскольку информация о ходе выполнения программы недоступна, такой вид анализа часто лишь сообщает о возможных проблемах с безопасностью, никак не проверяя их и не уточняя способ их воспроизведения. Таким образом, значительная часть найденных потенциальных уязвимостей оказывается нереализуемой, но требует много времени на валидацию. В отличие от статического, динамический анализ осуществляется при помощи запуска программы, что позволяет ему исследовать код качественнее, используя информацию о программных сущностях во время исполнения.
В целом такие утилиты часто нуждаются в достаточно большом количестве входных данных и оценивают покрытие кода1, показывающие полноту анализа. Однако собрать данные, чтобы проверить инструмент, может быть слишком затратно. К тому же нет никаких гарантий, что их будет достаточно или что они не устареют. Такой подход нельзя назвать автоматическим.
Есть несколько особых техник, не имеющих этого недостатка: фаззинг и символьное исполнение. В данной работе изучаются эти подходы (в основном символьное исполнение) и их применимость для поставленной задачи. Предоставляется решение в виде приложения-анализатора.
Модульные тесты — простой и понятный формат результата для разработчиков. Их легко проверить. В контексте данной задачи они могут содержать всю необходимую информацию для воспроизведения уязвимости. Именно в этом формате и представляется результат работы анализатора.
✅ Заключение
• Разработано приложение для генерации security тестов на основе UTBot
• Создан формат базы знаний, реализована его обработка и проверка уязвимостей
• Расширена функциональность базового инструмента
• Добавлена возможность интеграции с другими инструментами.





