Статья:

СРАВНИТЕЛЬНЫЙ АНАЛИЗ МЕТОДОВ SAST И DAST ПРИ ВЫЯВЛЕНИИ УЯЗВИМОСТЕЙ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

Конференция: CCCLIV Студенческая международная научно-практическая конференция «Молодежный научный форум»

Секция: Технические науки

Выходные данные
Перов В.В. СРАВНИТЕЛЬНЫЙ АНАЛИЗ МЕТОДОВ SAST И DAST ПРИ ВЫЯВЛЕНИИ УЯЗВИМОСТЕЙ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ // Молодежный научный форум: электр. сб. ст. по мат. CCCLIV междунар. студ. науч.-практ. конф. № 28(354). URL: https://nauchforum.ru/archive/MNF_interdisciplinarity/28(354).pdf (дата обращения: 03.08.2026)
Голосование состоится 05.08.2026
Эта статья набрала 0 голосов
Мне нравится
Дипломы
лауреатов
Сертификаты
участников
Дипломы
лауреатов
Сертификаты
участников
на печатьскачать .pdfподелиться

СРАВНИТЕЛЬНЫЙ АНАЛИЗ МЕТОДОВ SAST И DAST ПРИ ВЫЯВЛЕНИИ УЯЗВИМОСТЕЙ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

Перов Владимир Викторович
магистр, Национальный исследовательский ядерный университет «МИФИ», РФ г. Москва

 

Введение

Сложность современного программного обеспечения диктует необходимость использования средств его тестирования на различные ошибки и уязвимости. ГОСТ Р 56939—2024 предусматривает статический и динамический анализ, композиционный анализ и фаззинг-тестирование [1], а ГОСТ Р 71207—2024 устанавливает требования к статическому анализу [2]. Применимость этих мер определяется требованиями конкретного проекта.

Цель исследования — сопоставить SAST и DAST на единой метрической основе и установить границы выводов об их совместном применении. В рамках исследования была уточнена терминология, пересчитаны показатели по официальным матрицам ошибок OWASP Benchmark for Java v1.2 и построена сценарная модель объединения.

1. Общее описание методов анализа ПО

SAST анализирует программный код без фактического выполнения. Исследуется структура программы, связи между функциями и переменными, а также пути распространения данных, выявляя инъекции, ошибки работы с памятью и другие дефекты на этапе разработки [3].

DAST проверяет работающее приложение, направляя запросы и анализируя ответы. Исходный код обычно не требуется, но охват зависит от доступных функций, пользовательских ролей и состояний приложения, а точное место ошибки в коде не всегда обнаружимо. Сравнение методов приведено в таблице 1.

Таблица 1.

Сопоставление SAST и DAST

Критерий

SAST

DAST

Объект

Исходный код, байт-код, промежуточное или иное поддерживаемое представление

Работающее ПО и его доступные интерфейсы

Начало применения

После появления представления программы, поддерживаемого анализатором

После получения работоспособной сборки и подготовки тестовой среды

Основные методы

Сопоставление с шаблонами; анализ потоков управления и данных; символьное выполнение; абстрактная интерпретация

Обход интерфейсов; специально сформированные запросы и входные данные; анализ ответов

Охват

Зависит от полноты анализируемого кода, поддержки языка и библиотек, моделей, правил и ограничений анализатора

Зависит от достигнутых конечных точек, функций, состояний приложения, пользовательских ролей

Локализация

Обычно до файла и строки кода; иногда предоставляется трасса распространения данных

Обычно до URL или конечной точки, параметра, запроса и ответа;

Зависимости

Зависит от языка, процесса сборки, используемых библиотек и качества их моделей

Меньше зависит от языка, но зависит от протокола, аутентификации, состояния сеанса и конфигурации тестовой среды

Преимущества

Раннее применение; анализ потенциальных путей программы без необходимости их фактического выполнения

Проверка наблюдаемого поведения работающего приложения с учётом конфигурации развёртывания

Ограничения

Ложноположительные результаты, пропуски и неполные модели анализируемой программы

Неполный охват состояний, ложноположительные результаты, пропуски и ограниченная локализация в коде

 

2. Исходные данные и методика расчёта

OWASP Benchmark for Java v1.2 содержит 2740 исполняемых сервлетов Java из 11 категорий CWE: 1415 положительных и 1325 отрицательных случаев. Версия 1.2 выпущена в 2016 г. и существенно не менялась [4]. Использованы отчёты PMD, FindBugs, SonarQube Java Plugin, FindBugs с модулем FindSecBugs и OWASP ZAP [5–9].

Пусть анализатор проверяет размеченный набор тестовых случаев, каждый из которых содержит либо не содержит уязвимость определённого типа. Если для каждого случая установлено, обнаружена ли эта уязвимость, результаты можно представить, как бинарную классификацию и описать матрицей ошибок (таблица 2), включающей истинно положительные (TP), ложноположительные (FP), ложноотрицательные (FN) и истинно отрицательные (TN) результаты.

Таблица 2.

Матрица ошибок задачи обнаружения уязвимостей

Решение анализатора

Уязвимость присутствует

Уязвимость отсутствует

Уязвимость обнаружена

TP

FP

Уязвимость не обнаружена

FN

TN

 

На основе матрицы ошибок вычисляются точность Precision, полнота Recall (она же доля верных обнаружений TPR) и доля ложных срабатываний FPR:

                                                                                                  (1)

                                                                                           (2)

                                                                                                   (3)

Далее, вычисляется F-мера, учитывающая одновременно долю найденных уязвимостей и правильность выданных предупреждений:

                                                                                           (4)

В методике OWASP Benchmark интегральной оценкой выступает индекс Юдена — нормированное расстояние от точки инструмента до линии случайного угадывания в пространстве (FPR, TPR):

                                                                              (5)

где Se и Sp — чувствительность и специфичность. Метрика Accuracy не используется как основной показатель, поскольку она зависит от соотношения положительных и отрицательных случаев и может вводить в заблуждение при несбалансированных данных.

3. Результаты тестирования

Таблица 3.

Матрицы ошибок и микроусреднённые показатели, рассчитанные по данным OWASP Benchmark for Java v1.2

Инструмент

TP

FP

FN

TN

P, %

R, %

FPR, %

F₁

J, п.п.

PMD v5.2.3

0

0

1415

1325

0,00

0,00

0,000

0,00

FindBugs v3.0.1

150

131

1265

1194

53,38

10,60

9,89

0,177

0,71

SonarQube Java Plugin v3.14

607

141

808

1184

81,15

42,90

10,64

0,561

32,26

FindBugs + FindSecBugs v1.4.6

1370

703

45

622

66,09

96,82

53,06

0,786

43,76

OWASP ZAP сборка vD-2016-09-05

306

3

1109

1322

99,03

21,63

0,23

0,355

21,40

 

P — доля подтверждённых случаев, R­­­ — полнота, FPR — доля ошибочно помеченных отрицательных примеров. Расчёт по суммарным TP, FP, FN и TN является микроусреднением. Официальные итоговые показатели OWASP усреднены по 11 категориям.

Для PMD P не определена, поскольку положительных результатов нет; R и J равны нулю. У FindBugs J составил 0,71 %.

FindSecBugs показал полноту 96,82 % при FPR 53,06 %, SonarQube — 42,90 % при 10,64 %. У единственного DAST-инструмента ZAP P равна 99,03 %, FPR — 0,23 %, R — 21,63 %. Это различный баланс ошибок конкретных запусков, а не доказательство превосходства класса методов.

4. Совместное применение методов

Таблица 3 не содержит пересечения найденных уязвимостей, поэтому полноту SAST и DAST нельзя просто просуммировать. Для методов A и B полнота объединения ограничена соотношением:

max(R(A), R(B)) ≤ R(A B) ≤ min(1, R(A) + R(B))                                                                      (6)

Для SonarQube и ZAP интервал равен 42,90–64,52 %. При сценарном допущении независимости R(A ∪ B) = 1 − (1 − R(A))(1 − R(B)) = 55,25 %, а по неравенству объединения FPR не превышает 10,87 %.

SAST целесообразно запускать после изменений кода в непрерывной интеграции, DAST — после развёртывания сборки в изолированной тестовой среде, связывая результаты по версии, типу и месту проявления. Доступность исходного кода, открытого ПО упрощает независимый SAST, но не подтверждает защищённость; DAST проверяет конкретную сборку и конфигурацию.

Также, стоит отметить и ограничения данного исследования. OWASP Benchmark v1.2 — исторический синтетический набор более простых, чем реальный код тестов на языке Java из 11 категорий CWE. Менее 3000 тестов оставлено для облегчения динамического сканирования [4].

В исследовании шести анализаторов C на 27 открытых проектах объёмом 1,15 млн строк и 192 известных уязвимостях пропущено 47–80 % уязвимостей [10]. Выборка не сопоставима с OWASP по языку и метрикам, но показывает, что полнота на синтетических тестах не гарантирует результат в реальных проектах.

Заключение

  1. SAST исследует программу без её выполнения ПО, DAST — поведение работающей сборки, однако оба метода допускают ошибки.
  2. В OWASP Benchmark v1.2 полнота FindSecBugs равна 96,82 % при FPR 53,06 %, а P для ZAP — 99,03 % при полноте 21,63 %.
  3. Результаты PMD и FindBugs относятся к историческим версиям и не оценивают современные анализаторы или весь класс SAST.
  4. Без пересечения результатов эффект объединения задаётся лишь интервалом или сценарием; на практике SAST включают в жизненный цикл разработки ПО, а DAST проводят на развёрнутой тестовой сборке.

 

Список литературы:
1. ГОСТ Р 56939—2024. Защита информации. Разработка безопасного программного обеспечения. Общие требования. — URL: https://protect.gost.ru/gost/details/f3818925-a96f-4f55-96e9-46b44720ee64 (дата обращения: 22.07.2026). 
2. ГОСТ Р 71207—2024. Защита информации. Разработка безопасного программного обеспечения. Статический анализ программного обеспечения. Общие требования. — URL: https://protect.gost.ru/gost/details/9dd6f064-6014-4416-a3ca-ef72ce0a6c3a (дата обращения: 22.07.2026). 
3. Бородин А. Е., Горемыкин А. В., Вартанов С. П., Белеванцев А. А. Поиск уязвимостей небезопасного использования помеченных данных в статическом анализаторе Svace // Труды Института системного программирования РАН. 2021. Т. 33, № 1. С. 7–32. DOI: 10.15514/ISPRAS-2021-33(1)-1.
4. OWASP Benchmark Project // OWASP Foundation : официальный сайт. — URL: https://owasp.org/www-project-benchmark/ (дата обращения: 22.07.2026).
5. OWASP Benchmark for Java v1.2: Scorecard for PMD v5.2.3 // GitHub : отчёт. — URL: https://github.com/OWASP-Benchmark/BenchmarkJava/blob/master/scorecard/Benchmark_v1.2_Scorecard_for_PMD_v5.2.3.html (дата обращения: 22.07.2026).
6. OWASP Benchmark for Java v1.2: Scorecard for FindBugs v3.0.1 // GitHub : отчёт. — URL: https://github.com/OWASP-Benchmark/BenchmarkJava/blob/master/scorecard/Benchmark_v1.2_Scorecard_for_FindBugs_v3.0.1.html (дата обращения: 22.07.2026).
7. OWASP Benchmark for Java v1.2: Scorecard for SonarQube Java Plugin v3.14 // GitHub: отчёт. — URL: https://github.com/OWASP-Benchmark/BenchmarkJava/blob/master/scorecard/Benchmark_v1.2_Scorecard_for_SonarQube_Java_Plugin_v3.14.html (дата обращения: 22.07.2026).
8. OWASP Benchmark for Java v1.2: Scorecard for FindBugs with FindSecBugs v1.4.6 // GitHub: отчёт. — URL: https://github.com/OWASP-Benchmark/BenchmarkJava/blob/master/scorecard/Benchmark_v1.2_Scorecard_for_FBwFindSecBugs_v1.4.6.html (дата обращения: 22.07.2026).
9. OWASP Benchmark for Java v1.2: Scorecard for OWASP ZAP vD-2016-09-05 // GitHub: отчёт. — URL: https://github.com/OWASP-Benchmark/BenchmarkJava/blob/master/scorecard/Benchmark_v1.2_Scorecard_for_OWASP_ZAP_vD-2016-09-05.html (дата обращения: 22.07.2026).
10. Lipp S., Banescu S., Pretschner A. An Empirical Study on the Effectiveness of Static C Code Analyzers for Vulnerability Detection // Proceedings of the 31st ACM SIGSOFT International Symposium on Software Testing and Analysis (ISSTA 2022). — New York : ACM, 2022. — P. 544–555. — DOI: 10.1145/3533767.3534380.