Тип работы:
Предмет:
Язык работы:


Автоматическое создание модульных тестов для обнаружения уязвимостей в исходных кодах приложений

Работа №143619

Тип работы

Дипломные работы, ВКР

Предмет

математика и информатика

Объем работы38
Год сдачи2023
Стоимость4600 руб.
ПУБЛИКУЕТСЯ ВПЕРВЫЕ
Просмотрено
15
Не подходит работа?

Узнай цену на написание


Введение 4
Постановка задачи 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


Информационная безопасность является актуальным и востребованным направлением ИТ. Многие компании вынуждены вкладываться в безопасность своих систем, что повышает доверие клиентов, не говоря уже о том, что не найденные вовремя уязвимости могут привести к существенным убыткам и снижению использования ИТ-продуктов. Есть множество способов по обеспечению безопасности на разных уровнях разработки, начиная с комплекса мероприятий/технических средств изнутри компании и заканчивая аудитом информационной безопасности извне.
Одним из способов проверить безопасность приложения является использование сторонних инструментов, в том числе анализаторов. Периодическое тестирование способно выявить уязвимости, появившиеся в ходе разработки, что даёт возможность своевременно от них избавиться.
Существует множество разных подходов для анализа программ. Наиболее востребованными технологиями на сегодняшний день являются динамический и статический анализы. Рассмотрим их с точки зрения безопасности. Статический анализ кода производится без запуска программы. Он позволяет сканировать код и выявлять известные уязвимости. Однако, поскольку информация о ходе выполнения программы недоступна, такой вид анализа часто лишь сообщает о возможных проблемах с безопасностью, никак не проверяя их и не уточняя способ их воспроизведения. Таким образом, значительная часть найденных потенциальных уязвимостей оказывается нереализуемой, но требует много времени на валидацию. В отличие от статического, динамический анализ осуществляется при помощи запуска программы, что позволяет ему исследовать код качественнее, используя информацию о программных сущностях во время исполнения.
В целом такие утилиты часто нуждаются в достаточно большом количестве входных данных и оценивают покрытие кода, показывающие полноту анализа. Однако собрать данные, чтобы проверить инструмент, может быть слишком затратно. К тому же нет никаких гарантий, что их будет достаточно или что они не устареют. Такой подход нельзя назвать автоматическим.
Есть несколько особых техник, не имеющих этого недостатка: фаззинг и символьное исполнение. В данной работе изучаются эти подходы (в основном символьное исполнение) и их применимость для поставленной задачи. Предоставляется решение в виде приложения-анализатора.
Модульные тесты — простой и понятный формат результата для разработчиков. Их легко проверить. В контексте данной задачи они могут содержать всю необходимую информацию для воспроизведения уязвимости. Именно в этом формате и представляется результат работы анализатора.

Возникли сложности?

Нужна помощь преподавателя?

Помощь в написании работ!


Были получены следующие результаты:
• Разработано приложение для генерации security тестов на основе UTBot
• Создан формат базы знаний, реализована его обработка и проверка уязвимостей
• Расширена функциональность базового инструмента
• Добавлена возможность интеграции с другими инструментами


[1] R. Baldoni, E. Coppa, D’elia Daniele Cono, C. Demetrescu, I. Finocchi. A survey of symbolic execution techniques. ACM Computing Surveys (CSUR), 2018. Vol. 51, no. 3, pp. 1-39.
[2] UTBot repository. URL: https://github.com/UnitTestBot/UTBotJava (дата обр. 21.05.2023).
[3] Java Pathfinder repository. URL: https://github.com/javapathfinder/ jpf-core (дата обр. 21.05.2023).
[4] SymbolicPathFinder repository. URL: https://github.com/
SymbolicPathFinder/jpf-symbc (дата обр. 21.05.2023).
[5] JBSE repository. URL: https://github.com/pietrobraione/jbse (дата обр. 21.05.2023).
[6] JDart repository. URL: https://github. com/psycopaths/jdart (дата обр. 21.05.2023).
[7] CATG repository. URL: https://github.com/ksen007/janala2 (дата обр. 21.05.2023).
[8] jCUTE repository. URL: https://github.com/osl/jcute (дата обр. 21.05.2023).
[9] SAFELI. X. Fu and K. Qian. SAFELI: SQL injection scanner using symbolic execution. In Proceedings of the workshop on Testing, Analysis, and Verification of Web Services and Applications (TAV-WEB ’08), pages 34-39, 2008.
[10] cyber-utbot-api. URL: https://github.com/cyberok-org/cyber- utbot-api (дата обр. 29.05.2023).
[11] UtBot_Security_Tests. URL: https://
cyberok.gitlab.yandexcloud.net/sast/UtBot_Security_Tests (дата обр. 29.05.2023).
[12] Soot. URL: http://soot-oss.github.io/soot (дата обр. 21.05.2023).
[13] Mockito. URL: https://site.mockito.org (дата обр. 21.05.2023).
[14] cyber-utbot-exploit-base. URL: https://github.com/cyberok-org/ cyber-utbot-exploit-base (дата обр. 29.05.2023).
[15] ProGuard. URL: https://www.guardsquare.com/proguard (дата обр. 21.05.2023).


Работу высылаем на протяжении 30 минут после оплаты.



Подобные работы


©2025 Cервис помощи студентам в выполнении работ