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


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

Работа №126913

Тип работы

Бакалаврская работа

Предмет

программирование

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

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


Введение 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

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

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

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

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


Были получены следующие результаты:
• Разработано приложение для генерации 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ервис помощи студентам в выполнении работ