SAST, SCA и DAST: что видит каждый сканер

SAST, SCA и DAST закрывают разные слои риска: код, зависимости и поведение работающего приложения. Их нельзя заменять друг другом.

2026-05-24 GIGATAP Team #tools
#AppSec#SAST#SCA

Инструменты AppSec не взаимозаменяемы#

SAST, SCA и DAST часто складывают в одну корзину AppSec. Для бюджета так удобнее. Для инженерных решений — не очень.

Эти инструменты смотрят на разные части системы, запускаются на разных этапах жизненного цикла разработки и пропускают разные классы рисков.

В руководстве Sonatype различие сформулировано просто: Static Application Security Testing проверяет собственный код, Software Composition Analysis — open source и сторонние компоненты, а Dynamic Application Security Testing — работающее приложение. Вместе они дают более широкое покрытие, чем любой один инструмент.

Это важно, потому что современные приложения состоят не только из написанного командой кода. В них есть open source-пакеты, транзитивные зависимости, контейнеры, API, секреты, системы сборки и runtime-конфигурация. Сканер может хорошо видеть один слой и при этом ничего не знать о другом.

Практический вопрос — не «SAST против SCA против DAST», будто один инструмент должен заменить остальные. Лучше спросить иначе: какой риск видит каждый инструмент, где ему место и какие выводы из его результатов нельзя делать.

SAST: полезен рано, но видит только то, что видно статически#

Static Application Security Testing анализирует исходный код, bytecode или бинарные файлы без запуска приложения. Его часто называют статическим анализом кода или white-box testing.

Главная сильная сторона SAST — момент проверки. Он может найти часть ошибок до релиза: в IDE, pull request или CI/CD pipeline. Это полезно для проблем, которые дешевле исправлять, пока код еще рядом с разработчиком, который его написал.

Sonatype приводит такие примеры: SQL injection, cross-site scripting, небезопасная логика аутентификации, зашитые секреты и учетные данные, а также ошибки конфигурации безопасности внутри логики приложения.

Это реальная польза. Но SAST не показывает правду о runtime.

SAST-инструмент может отметить небезопасные шаблоны в собственном коде. Обычно он не может доказать, как вся развернутая система ведет себя под живым трафиком, за цепочками аутентификации, с конфигурацией, похожей на production, или на границах между сервисами. Он также сам по себе не решает проблему зависимостей. Если уязвимая библиотека попадает в сборку через пакетный менеджер, SAST — не основной инструмент для понимания такого supply chain-риска.

Знакомый компромисс тоже остается: статический анализ может давать false positives, особенно при плохой настройке или когда инструменту не хватает контекста о приложении. Это не делает SAST бесполезным. Это значит, что находки SAST нужно настраивать, разбирать и встраивать в developer workflow так, чтобы каждый alert не превращался в шум.

Используйте SAST, чтобы раньше ловить проблемы в собственном коде. Не используйте его как доказательство, что развернутое приложение безопасно.

SCA: зависимости стали отдельным слоем риска#

Software Composition Analysis фокусируется на open source-зависимостях и сторонних компонентах. Сюда входят прямые зависимости, транзитивные зависимости, пакетные экосистемы, а во многих реализациях — контейнеры и связанные supply chain-метаданные.

Именно этот слой команды часто недооценивают, пока он не ломает что-то важное.

Современные приложения все сильнее опираются на open source-пакеты. У небольшого приложения может быть большой граф зависимостей. Пакет, который ни один разработчик не импортировал напрямую, все равно может прийти через другой пакет. Уязвимый или вредоносный компонент может попасть в систему обычным путем сборки, а не через очевидную атаку на собственный код приложения.

По данным Sonatype, SCA-инструменты находят уязвимости, лицензионные риски, вредоносные пакеты и compliance-проблемы в open source-зависимостях и сторонних компонентах. Поэтому SCA меньше про стиль кода и больше про инвентаризацию, управление и реальную экспозицию.

Практическая польза — видимость. Командам нужно знать, что именно они поставляют. Какие компоненты уязвимы, какие лицензии создают обязательства, какие пакеты заброшены или подозрительны, какие цепочки зависимостей приносят риск в приложение.

SCA хорошо ложится на безопасность software supply chain. Он помогает отвечать на такие вопросы:

  • Какие open source-компоненты есть в этом приложении?
  • Есть ли среди них версии с известными уязвимостями?
  • Уязвимый компонент прямой или транзитивный?
  • Есть ли более безопасный путь обновления?
  • Есть ли лицензионные или compliance-проблемы?
  • Известно или подозревается, что зависимость вредоносная?

SCA не заменяет SAST. Он смотрит на другую поверхность. Зависимость может быть полностью исправлена, а собственная логика аутентификации приложения — сломана. Верно и обратное: собственный код может быть чистым, а в релизе будет лежать уязвимый пакет.

Граф зависимостей — часть приложения. Относитесь к нему именно так.

DAST: runtime-проверка ловит то, что сканы кода пропускают#

Dynamic Application Security Testing проверяет работающее приложение. Он имитирует атаки на живую среду и ищет эксплуатируемое поведение в runtime.

Разница принципиальная. Некоторые ошибки становятся видны только после развертывания, когда приложение взаимодействует с реальным роутингом, аутентификацией, API, заголовками, сессиями и конфигурацией. Sonatype указывает на слабости аутентификации, ошибки конфигурации, API-уязвимости, injection flaws и другие runtime-проблемы.

DAST по природе black-box или outside-in. Ему не нужен полный доступ к исходному коду так, как SAST. Поэтому он полезен для проверки развернутых приложений, staging-сред и поведения внешней поверхности атаки.

Но у DAST тоже есть ограничения.

Он может не показать точную строку кода, из-за которой появилась находка. Он может пропустить пути, до которых не смог добраться. Если аутентификация, бизнес-логика или API-flow сложные, инструменту нужна правильная настройка и покрытие. DAST-скан, который коснулся только входной двери приложения, нельзя считать глубокой гарантией.

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

Стек AppSec становится шире#

Статья Sonatype также ставит SAST, SCA и DAST рядом с другими категориями AppSec.

Interactive Application Security Testing сочетает части статического и динамического тестирования: приложение анализируется во время runtime с инструментированием внутри самого приложения. API security testing фокусируется на открытых endpoint, слабостях аутентификации, небезопасной обработке данных и рисках, специфичных для API. Secrets detection ищет открытые учетные данные, API keys, токены, сертификаты и похожие материалы в коде, репозиториях, CI/CD pipelines и средах разработки.

Application Security Posture Management пытается агрегировать и сопоставлять находки из разных инструментов. В теории это дает security-командам более централизованный взгляд на риск и помогает с приоритизацией. На практике все сильно зависит от качества данных, дедупликации, привязки владельцев и способности платформы снижать шум, а не просто собирать его в одном месте.

Направление понятно: AppSec больше не сводится к одному сканеру на одном этапе pipeline. Это многоуровневая система контроля для кода, зависимостей, секретов, API, runtime-поведения и управления.

Что командам стоит вынести из этого сравнения#

Полезный вывод не в том, что каждая команда должна сразу купить все категории инструментов. Вывод проще: не нужно требовать от одного инструмента работы другого.

Практический минимум выглядит так:

  • Используйте SAST там, где пишут и ревьюят собственный код.
  • Используйте SCA там, где зависимости появляются, меняются и уходят в релиз.
  • Используйте DAST против работающих приложений и реалистичных сред.
  • Добавьте secrets detection везде, где код и pipelines могут утечь учетными данными.
  • Рассматривайте API testing отдельно, если API — важный интерфейс системы.
  • Сопоставляйте находки только если у команды есть понятный процесс исправления.

Порядок зависит от организации. Небольшая команда, которая выпускает сервисы с большим числом зависимостей, может быстрее получить пользу от SCA и secrets detection, чем от широкого внедрения SAST. Команде с большой собственной кодовой базой SAST может понадобиться раньше. Приложению, открытому в интернет, со сложной аутентификацией и API нужна runtime-проверка, которая отражает реальное поведение.

Слабый сценарий — просто складывать инструменты без владельцев. Больше сканеров может означать больше alert, а не меньше риска. У каждого инструмента должно быть место в SDLC, путь triage, политика блокировки или предупреждений и способ проверить, что исправления действительно происходят.

Что нельзя обещать по результатам скана#

SAST не доказывает безопасность production. SCA не доказывает, что собственный код безопасен. DAST не доказывает полное покрытие кода или зависимостей.

Каждый инструмент видит только срез системы. Ценность появляется, когда эти срезы складываются в рабочий процесс безопасности.

В этом суть сравнения SAST, SCA и DAST. Это не конкурирующие ярлыки из vendor-каталога. Это разные линзы для оценки риска приложения. Зрелая AppSec-программа понимает, какой линзой пользуется, что через нее видно и что остается за кадром.