В современном ПО количество предупреждений статических анализаторов растёт вместе со сложностью проектов, и разработчикам всё чаще приходится вручную исправлять множество однотипных уязвимостей. Давление со стороны требований к безопасности приводит к тому, что каждое предупреждение должно быть проверено и исправлено, что замедляет релизный цикл. При этом многие исправления носят шаблонный характер, что делает задачу ручного патчинга избыточной. Возникает необходимость в инструменте, автоматически генерирующем исправления на основе отчёта статического анализатора. Это позволило бы существенно повысить скорость исправления потенциальных уязвимостей и снизить рутинную нагрузку на разработчиков.
В ходе выполнения работы была разработана и реализована система автоматического формирования патчей. Она по входным данным из отчётов статических анализаторов и заранее заданным шаблонам строит фрагмент AST исходного кода с уязвимостью, исправляет его, генерирует код и упаковывает его в патч. Такой подход позволяет обеспечить консистентность и семантическую точность правок, отказаться от ненадёжного текстового поиска и заметно сократить рутину. Архитектура, основанная на трёх модулях (анализ кода, разбор отчётов и генерация патча), обладает достаточной гибкостью для расширения поддерживаемых шаблонов и форматов отчётов, что делает её пригодной для интеграции в современные CI/CD-конвейеры.
Несмотря на очевидные преимущества, инструмент требует регулярного поддержания и актуализации шаблонов, а также тщательной настройки механизмов сопоставления во избежание ложных срабатываний и пропусков. В дальнейшем планируется расширить покрытие новых типов предупреждений, автоматизировать процесс валидации шаблонов и исследовать возможности применения машинного обучения для адаптивного синтеза исправлений. Итоговая система демонстрирует, что автоматизированная генерация патчей — реальный и перспективный путь повышения надёжности программного обеспечения и ускорения процесса исправления уязвимостей.
1 The Clang Team [Электронный ресурс]: Clang-Tidy — URL: https://clang.llvm.org/extra/clang-tidy/(дата обращения: 22.01.2025).
2 Wikipedia [Электронный ресурс]: Abstract syntax tree — URL: https://en.wikipedia.org/wiki/Abstract_syntax_tree(дата обращения: 15.01.2025).
3 Wikipedia [Электронный ресурс]: Integrated development
environment — URL:
https://en.wikipedia.org/wiki/Integrated_development_environment (дата
обращения: 26.04.2025).
4 Wikipedia [Электронный ресурс]: CI/CD — URL:
https://en.wikipedia.org/wiki/CI/CD(дата обращения: 26.04.2025).
5 Wikipedia [Электронный ресурс]: Категория:Языки
программирования семейства Си — URL:
https://ru.wikipedia.org/wiki/Категория:Языки_программирования_семейства_ Си (дата обращения: 19.04.2025).
6 Страуструп, Б. Язык программирования C++ [Текст]: учебник / Б. Страуструп. - М.: Радио и связь, 2011. - 350 c.
7 The CodeChecker team [Электронный ресурс]: CodeChecker — URL: https://codechecker.readthedocs.io/en/latest/(дата обращения: 27.01.2025).
8 Program Verification Systems [Электронный ресурс]: Документация по статическому анализатору кода PVS-Studio — URL: https://pvs-studio.ru/ru/docs/(дата обращения: 12.03.2025).
9 Wikipedia [Электронный ресурс]: Visual Studio — URL: https://en.wikipedia.org/wiki/Visual_Studio(дата обращения: 26.04.2025).
10 Wikipedia [Электронный ресурс]: C Sharp (programming language) — URL: https://en.wikipedia.org/wiki/C_Sharp_(programming_language) (дата обращения: 26.04.2025).
11 Wikipedia [Электронный ресурс]: Java (programming language) —
URL: https: //en. wikipedia. org/wiki/Java_(programming_language) (дата
обращения: 26.04.2025).
12 Wikipedia [Электронный ресурс]: Static single assignment form —
URL: https://en.wikipedia.org/wiki/Static_single_assignment_form (дата
обращения: 09.03.2025).
13 Standard C++ Foundation [Электронный ресурс]: The Standard — URL: https://isocpp.org/std/the-standard(дата обращения: 26.04.2025).
14 JetBrains [Электронный ресурс]: CLion: The Cross-Platform IDE for C and C++ — URL: https://www.jetbrains.com/clion(дата обращения: 26.04.2025).
15 JetBrains [Электронный ресурс]: ReSharper: Visual Studio
Extension for .NET Developers — URL: https://www.jetbrains.com/resharper(дата обращения: 26.04.2025).
16 Jenkins project [Электронный ресурс]: Jenkins: The Leading Open Source Automation Server — URL: https://www.jenkins.io(дата обращения: 26.04.2025).
17 JetBrains [Электронный ресурс]: TeamCity: Continuous Integration & Deployment Server — URL: https://www.jetbrains.com/teamcity(дата обращения: 26.04.2025).
18 Microsoft [Электронный ресурс]: Azure Pipelines — URL:
https://azure.microsoft.com/services/devops/pipelines (дата обращения:
26.04.2025).
19 Program Verification Systems [Электронный ресурс]: V5004.
OWASP. Consider inspecting the expression. Bit shifting of the 32-bit value with a subsequent expansion to the 64-bit type — URL: https://pvs-
studio.ru/ru/docs/warnings/v5004/(дата обращения: 18.02.2025).
20 Program Verification Systems [Электронный ресурс]: V5005. OWASP. A value is being subtracted from the unsigned variable. This can result in an overflow. In such a case, the comparison operation can potentially behave unexpectedly — URL: https://pvs-studio.ru/ru/docs/warnings/v5005/(дата обращения: 18.02.2025).
21 Program Verification Systems [Электронный ресурс]: V5009. OWASP. Unchecked tainted data is used in expression — URL: https://pvs- studio.ru/ru/docs/warnings/v5009/(дата обращения: 18.02.2025).
22 Program Verification Systems [Электронный ресурс]: V3202. Unreachable code detected. The 'case' value is out of the range of the match expression — URL: https://pvs-studio.ru/ru/docs/warnings/v3202/(дата обращения: 18.02.2025).
23 Program Verification Systems [Электронный ресурс]: V5001. OWASP. It is highly probable that the semicolon ';'is missing after 'return' keyword — URL: https://pvs-studio.ru/ru/docs/warnings/v5001/(дата обращения: 18.02.2025).
24 Refactoring.Guru [Электронный ресурс]: Фабричный метод — URL: https://refactoring.guru/ru/design-patterns/factory-method(дата обращения: 05.03.2025).
25 The Clang Team [Электронный ресурс]: LibTooling — URL: https://clang.llvm.org/docs/LibTooling.html(дата обращения: 12.03.2025).
26 The Clang Team [Электронный ресурс]: Introduction to the Clang AST — URL: https://clang.llvm.org/docs/IntroductionToTheClangAST.html(дата обращения: 12.03.2025).
27 The Clang Team [Электронный ресурс]: How to write
RecursiveASTVisitor based ASTFrontendActions. — URL:
https://clang.llvm.org/docs/RAVFrontendAction.html (дата обращения:
12.03.2025).
28 Refactoring.Guru [Электронный ресурс]: Стратегия — URL: https://refactoring.guru/ru/design-patterns/strategy(дата обращения: 05.03.2025).
29 Program Verification Systems [Электронный ресурс]: Просмотр и конвертация результатов анализа (форматы SARIF, HTML и др.) — URL: https://pvs-studio.ru/ru/docs/manual/0038/(дата обращения: 20.03.2025).
30 Арсений Капулкин [Электронный ресурс]: pugixml — URL: https://pugixml.org/(дата обращения: 03.04.2025).
31 GNU [Электронный ресурс]: 2.2.2.2 Detailed Description of Unified
Format — URL:
https://www.gnu.org/software/diffutils/manual/html_node/Detailed-Unified.html(дата обращения: 04.04.2025).
32 LLVM-admin team [Электронный ресурс]: The LLVM Compiler Infrastructure — URL: https://llvm.org/(дата обращения: 07.04.2025).
33 Boost Community [Электронный ресурс]: Boost — URL:
https://www.boost.org/(дата обращения: 08.04.2025).
34 Amazon Web Services, Inc. [Электронный ресурс]: Что такое DevSecOps? — URL: https://aws.amazon.com/what-is/devsecops/(дата обращения: 27.04.2025).