Объектом исследования выступает процесс компонентного анализа программного
обеспечения, рассматриваемый как элемент обеспечения безопасности,
лицензионной чистоты и управляемости жизненного цикла web-сервисов на базе
Spring Boot. Цель работы заключалась в создании прототипа SCA-системы,
способной надёжно выявлять сторонние, модифицированные и обфусцированные
библиотеки с помощью алгоритмовWinnowing и Dolos, заимствованных из практик
поиска программного плагиата. Для реализации проекта задействованы JDK 17,
PostgreSQL, Spring Boot, Hibernate, синтаксический парсер tree-sitter, а также
репозитории GitHub и Maven, что позволило построить цепочку. В результате
создан модульный прототип, прошедший модульные, интеграционные и нагрузочные
испытания и показавший высокую точность обнаружения компонентов даже
при существенных изменениях исходного кода, превосходя классический анализ
зависимостей по полноте выявления библиотек. Инструмент может применяться в
DevSecOps-конвейерах для автоматической проверки зависимостей, при аудите
open-source-лицензий, в образовательных курсах по SCA и во внутренних платформах
разработки крупных компаний, где требуется обнаруживать скрытые или
изменённые библиотеки до выпуска релиза.
Введение ........................................................................................................ 10
1 Исследование методов и средств анализа компонентов программ ........... 13
1.1 Анализ избранных работ ......................................................................... 13
1.1.1 Динамика анализа состава программного обеспечения....................... 13
1.1.2 Исследование методик поиска используемых библиотек.................... 14
1.1.3 Эмпирическое изучение инструментов SCA для программ на языке
C/C++ ................................................................................................... 15
1.1.4 Система поиска плагиата Dolos............................................................ 17
1.1.5Winnowing - локальный алгоритм для снятия отпечатков документа. 18
1.1.6 Автоматическое распознавание ИИ-обфусцированного плагиата ...... 19
1.2 Обзор сценариев применения SCA ......................................................... 19
1.2.1 Большие проекты с множеством зависимостей.................................... 20
1.2.2 Проекты с активным изменением списка зависимостей...................... 20
1.2.3 Проекты с высокими требованиями к безопасности ........................... 21
1.2.4 Проекты с модифицированными зависимостями ................................ 22
1.2.5 Проекты, разработанные с участием больших языковых моделей ...... 22
1.2.6 Требования пользователей SCA решений ............................................ 23
1.3 Обзор методов компонентного анализа .................................................. 24
1.3.1 Метод белых списков............................................................................ 24
1.3.2 Машинное обучение ............................................................................. 26
1.3.3 Сравнение сходства .............................................................................. 27
1.3.4 Снятие отпечатков ................................................................................ 28
1.3.5 Алгоритм на базе графа зависимостей пакетов (ГЗП)......................... 29
1.3.6 Алгоритмы Dolos, Winnowing............................................................... 31
1.4 Анализ существующих решений по поиску зависимостей..................... 33
1.4.1 Trivy....................................................................................................... 34
1.4.2 Syft ........................................................................................................ 35
1.4.3 Solar appScreener................................................................................... 36
1.4.4 Dolos...................................................................................................... 38
1.4.5 Turnitin................................................................................................... 39
1.5 Подбор инструментальных средств для построения SCA решения ....... 41
1.6 Направления дальнейшего исследования ............................................... 43
2 Проектирование решения по анализу компонентов программ ................. 46
2.1 Обоснование необходимости разработки ............................................... 46
2.2 Описание объектa исследования ............................................................. 49
2.2.1 Характеристика тестовой базы............................................................. 49
2.2.2 Ограничения.......................................................................................... 50
2.2.3 Критерии выбора тестовых примеров .................................................. 50
2.2.4 Описание экспериментальных кейсов .................................................. 51
2.3 Проектирование системы ........................................................................ 53
2.3.1 Функциональные требования................................................................ 53
2.3.2 Нефункциональные требования ........................................................... 54
2.3.3 Ограничения и предположения............................................................. 55
2.4 Формирование архитектурного подхода ................................................. 56
2.5 Выбор алгоритма...................................................................................... 60
2.5.1 Методика нормализации и токенизации .............................................. 61
2.5.2 Подход к определению заимствования ................................................ 63
2.5.3 Распределение зависимостей по файловой структуре......................... 64
2.6 Хранение эталонных библиотек .............................................................. 66
2.7 Интерфейс взаимодействия с системой .................................................. 68
2.8 Архитектура системы .............................................................................. 69
2.8.1 Модуль сбора отпечатков ..................................................................... 70
2.8.2 База отпечатков..................................................................................... 71
2.8.3 Модуль сопоставления отпечатков....................................................... 73
2.8.4 Модуль составления отчетов ................................................................ 74
2.9 Расширение архитектуры ........................................................................ 75
3 Реализация решения по анализу компонентов программ.......................... 77
3.1 Общая архитектура и технологический стек .......................................... 77
3.1.1 Выбор языка и фреймворка .................................................................. 77
3.1.2 Слои приложения.................................................................................. 78
3.1.3 База данных и JPA................................................................................. 80
3.1.4 Средства сборки и развертки ............................................................... 81
3.2 Модуль анализа кода................................................................................ 82
3.2.1 Tree-Sitter............................................................................................... 82
3.2.2 Обход AST в глубину............................................................................ 83
3.2.3 Токенизация .......................................................................................... 84
3.2.4Winnowing ............................................................................................. 85
3.2.5 Снятие отпечатков ................................................................................ 85
3.2.6 Добавление эталонной компоненты ..................................................... 87
3.3 Сервисный слой ....................................................................................... 88
3.3.1 Интерфейсы .......................................................................................... 88
3.3.2 Сервис загрузки данных ....................................................................... 89
3.3.3 Сервис отпечатков ................................................................................ 90
3.3.4 Cервис распознавания компонентов .................................................... 91
3.4 Слой представления................................................................................. 92
3.5 Вывод ....................................................................................................... 93
4 Тестирование и апробация решения по анализу компонентов программ . 95
4.1 Тестовое окружение ................................................................................. 97
4.1.1 Аппаратное и программное окружение ................................................ 97
4.1.2 Инструментарий для тестирования ...................................................... 98
4.1.3 Тестовая выборка .................................................................................. 99
4.2 Модульное тестирование ......................................................................... 99
4.2.1 Тестирование модуля извлечения отпечатков...................................... 100
4.2.2 Тестирование модуля построения K-грамм .......................................... 101
4.2.3 Тестирование реализации алгоритма Winnowing................................. 103
4.2.4 Тестирование модуля анализа компонентов......................................... 104
4.2.5 Тестирование модуля анализа проектов ............................................... 106
4.2.6 Тестирование сервиса проектов............................................................ 107
4.2.7 Тестирование сервиса компонентов ..................................................... 109
4.2.8 Тестирование репозитория проектов.................................................... 110
4.2.9 Тестирование репозитория компонент ................................................. 111
4.3 Интеграционное тестирование ................................................................ 113
4.4 Нагрузочное тестирование ...................................................................... 118
4.4.1 Инструмент нагрузки: wrk2 .................................................................. 119
4.4.2 Добавление компоненты ....................................................................... 120
4.4.3 Анализ проекта ..................................................................................... 122
4.5 Экспериментальная проверка.................................................................. 123
4.5.1 Поиск модифицированных версий библиотек ..................................... 125
4.5.2 Обфускация с применением языковых моделей .................................. 126
4.5.3 Сравнение параметров алгоритма ........................................................ 129
4.6 Сравнение разработанного алгоритма с алгоритмом на основе графа
зависимостей программы..................................................................... 132
4.6.1 Реализация алгоритма для экспериментального тестирования........... 133
4.6.2 Минимально-достаточный набор модулей ........................................... 133
4.6.3 Сервисы верхнего уровня ..................................................................... 133
4.6.4 Сравнение показателей......................................................................... 134
4.6.5 Дискуссия по результатам эксперимента............................................. 135
Заключение.................................................................................................... 137
Список использованных источников............................................................. 139
Приложение 1 Листинг программного кода.................................................. 143
Приложение 2 Исходные данные для подбора оптимальных параметров
алгоритма ....................................................................................................... 335
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1. Ambati S. Security and Authenticity of AI-generated code: дис.канд. / Ambati Sriharitha. — University of Saskatchewan, 2023.
2. An Investigation into the Use of Common Libraries in Android Apps / L. Li [и др.] // 2016 IEEE 23rd International Conference on Software Analysis, Evolution, and Reengineering (SANER). Т. 1. — 2016. — С. 403—414. — DO 10.1109/SANER.2016.52.
3. Backes M., Bugiel S., Derr E. Reliable Third-Party Library Detection in Android and its Security Applications // Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications Security.—Vienna,Austria: Association for Computing Machinery, 2016. — С. 356—367. — (Сер.: CCS 16). — DOI 10.1145/2976749.2978333. — URL:
4. Biazzini M., Baudry B. "May the fork be with you": novel metrics to analyze
collaboration on GitHub // Proceedings of the 5th International Workshop on Emerging
Trends in Software Metrics.—Hyderabad, India: Association for Computing Machinery,
2014. — С. 37—43. — (Сер.: WETSoM 2014). — DOI 10.1145/2593868.2593875. —URL:
5. Crussell J., Gibler C., Chen H. AnDarwin: Scalable Detection of Semantically Similar Android Applications // Computer Security – ESORICS 2013 / под ред. J. Crampton, S. Jajodia, K. Mayes.—Berlin, Heidelberg: Springer Berlin Heidelberg, 2013. — С. 182—199.
6. Dolos: Language-agnostic plagiarism detection in source code / R. Maertens
[и др.] // Journal of Computer Assisted Learning.—2022.—Т. 38, № 4.—С. 1046 1061. — DOI https:
7. Dolos: Language-agnostic plagiarism detection in source code / R. Maertens [и др.] // Journal of Computer Assisted Learning.— 2022.— Т. 38.—DOI 10.1111/ jcal.12662.
8. Download the Android source | Android Open Source Project — source.android.com. — (дата обращения: 19-01-2025). https :
всего 32 источника