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

Ни одна из проверок не понимает вашу бизнес-логику, поэтому пустой отчёт не означает безопасное приложение. Услуга по настройке таких проверок описана на странице «SAST, DAST и SCA», здесь только объяснение, как они устроены и что из них выбрать.

Коротко. SAST ищет ошибки в вашем коде, SCA находит известные дыры в чужих библиотеках, DAST проверяет работающую систему. Начните с секретов и зависимостей, добавьте SAST на новые изменения, потом DAST на стенде. Любой инструмент сначала проверьте на двух-трёх модулях вашего кода: по презентации шум не оценить.

Три проверки: какой вопрос задаёт каждая

Проще всего различать их по вопросу, который они задают, и по тому, что получают на входе.

ПроверкаВопросЧто на входеКогда запускаютГлавная слабость
SASTЕсть ли в моём коде опасные конструкции?Исходный код и описание каркасаНа каждом изменении, как проверка запроса на слияниеНе знает настроек стенда и ошибок логики, склонен к ложным срабатываниям
SCAНет ли в моих зависимостях известных уязвимостей?Файлы блокировки версий, образы, перечень составаНа каждом изменении и по расписаниюЗнает только то, что уже внесено в базу; не видит ошибок в вашем коде
DASTЧто получит посторонний, обращаясь к работающему приложению?Адрес тестового стенда и учётные записи для сценариевПосле выкладки на стенд, по расписаниюВидит только то, до чего дошёл; медленнее остальных

Название «анализ состава» у SCA прямо говорит, чем он занят: он не ищет ошибки в логике, а перечисляет, из чего собрано приложение, и сверяет с известными проблемами. Это самая дешёвая из трёх проверок, потому что чужой код проверяется по готовой базе, а не угадывается.

Один и тот же дефект, три проверки

Лучше всего различие видно на конкретных дефектах. Таблица условная: от каркаса, настроек и правил результат меняется, но принцип сохраняется.

ДефектSASTSCADASTЧто поможет в итоге
Отладочный маршрут оставлен в кодеМожет найти по правилу на известные именаНе видитНаходит, если адрес оказался среди проверяемыхРевью изменений и список маршрутов в проверке выпуска
Ключ доступа лежит в кодеНаходит часть случаевНе видитНе видитОтдельный поиск секретов по всей истории
Устаревшая версия фреймворка с известной уязвимостьюНе видитНаходит и указывает исправленную версиюВидит последствия, если они проявляются в ответахОбновление и тесты после него
Нет защитных заголовков в ответахВидит, только если заголовки задаются в кодеНе видитНаходит сразуНастройка веб-сервера и проверка на стенде
Сервис отдаёт чужие данные по прямой ссылкеОбычно не видитНе видитНе видит: не знает, чьи данные чьиРевью прав и прогон из-под каждой роли

Последняя строка важнее остальных. Самые дорогие дефекты, когда клиент видит чужое или обходит порядок шагов, автоматика находит хуже всего. Об этом классе ошибок написано в статье «OWASP Top 10 простыми словами», первая категория списка — как раз контроль доступа.

SAST: что внутри и на что смотреть при выборе

Статический анализатор разбирает код в структуру, применяет правила и прослеживает путь данных от места, где они приходят в программу, до места, где они используются. Если ввод пользователя доходит до запроса к базе без обработки, он сообщает о находке и показывает строку. Это ранняя проверка: код ещё не запускали, исправить дёшево.

Сильные стороны

  • Указывает точное место в коде, а не «где-то в форме поиска».
  • Запускается на изменённых файлах за короткое время, поэтому встраивается в проверку запроса на слияние.
  • Не требует работающего стенда и данных.

Слабые стороны

  • Склонен к лишним срабатываниям: не всегда видит проверку, которая стоит выше по коду или в каркасе.
  • Поддержка языков и каркасов неравномерна: для распространённых языков правил много, для редких и для встроенных языков учётных систем меньше.
  • Не знает ваших соглашений: собственную обёртку над запросами к базе сканер считает чужим кодом, пока ему не написать правило.

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

SCA: проверка того, что вы не писали

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

Что важно знать заказчику

  • Свежесть базы. Сканер, чья база не обновлялась, показывает чистый отчёт и вводит в заблуждение. В закрытом контуре нужен регламент обновления базы и предупреждение, если оно давно не проходило.
  • Достижимость. Библиотека может быть в проекте, а уязвимая функция вашим кодом не вызывается. Такая находка остаётся в списке, но срочность у неё ниже. Не все инструменты это определяют, и в договоре на настройку это стоит проговорить.
  • Исправление ломает совместимость. Обновить библиотеку иногда значит изменить код, который её вызывает. Без тестов обновление превращается в лотерею, поэтому SCA без тестов даёт список задач, которые страшно делать.
  • Перечень состава. Список зависимостей каждого выпуска (SBOM) в стандартных форматах пригодится, когда выйдет новая уязвимость и нужно за минуты узнать, затронуты ли вы.
  • Лицензии. Попутно SCA показывает лицензии библиотек. Решение, подходит ли лицензия вашей модели распространения, принимает юрист заказчика.

DAST: проверка снаружи и почему только на стенде

Динамический сканер ведёт себя как посторонний: обходит страницы, подставляет в поля и параметры тестовые значения и смотрит на ответы. Он не знает, что написано в коде, зато видит настройки сервера, заголовки, отражение ввода и служебные адреса, которые остались доступны.

Запускать такой сканер на рабочей системе нельзя. Он может создавать записи, отправлять формы, нагружать сервис и вызывать побочные действия вроде писем. Мы запускаем его только на тестовом стенде и с вашего согласия, а боевые системы не атакуем. Для стенда готовятся:

  • учётные записи для каждой роли, иначе сканер увидит только страницу входа;
  • исключения: адреса удаления, оплаты и рассылки, которые не нужно вызывать;
  • тестовые данные, которые не жалко испортить;
  • заглушки внешних сервисов, чтобы запросы сканера не уходили платёжному провайдеру или в почту.

Главная проблема DAST в том, что он видит ровно то, до чего дошёл. Если сценарий требует цепочки из пяти шагов, а сканер эту цепочку не прошёл, глубокая часть приложения остаётся непроверенной, хотя отчёт выглядит чистым. Поэтому для приложений с входом сценарии настраивают отдельно, и это основная часть работы.

Что выбрать вам: по ситуации

Порядок зависит от того, что у вас уже есть и что вас торопит.

СитуацияС чего начатьЧто отложитьПочему
Небольшая команда, один сервис, автоматической сборки нетСборка с тестами, затем поиск секретов и SCASAST и DASTПроверкам некуда встроиться, а секреты и известные дыры в библиотеках самые частые и самые дешёвые
Продукт продаётся, клиенты присылают опросникиSCA и SAST на запросах на слияние, перечень состава для выпусковDAST со сложными сценариямиВ опросниках спрашивают про процесс и след в журнале сборки
Старый проект с большим числом библиотекSCA с базовой линией, обновление по приоритетуПолный SAST по всему кодуПервый запуск SAST на старом коде даёт слишком длинный список
Приложение в закрытом контуре без интернетаИнструменты у вас, зеркало баз, SAST и SCADAST, пока нет стендаГлавное условие: код и отчёты остаются внутри
Готовая система без исходников от поставщикаSCA по перечню состава поставщика и DAST на стендеSASTЧитать нечего, остаётся проверять снаружи и спрашивать состав
Приложение с публичным APIDAST для API на стенде, SAST на проверку прав и вводаШирокое сканирование страницГлавные угрозы на границе обмена, см. страницу про защиту API

Как проверить сканер на своём коде

Презентации показывают идеальные примеры. Судить об инструменте можно только по своему коду, и для этого хватает небольшого эксперимента на неделю-две:

  1. Выберите два-три модуля. Один свежий и аккуратный, один старый и запутанный, один с работой с пользовательским вводом.
  2. Засейте известные ошибки. Попросите разработчика добавить в копию несколько заведомых дефектов: склейку запроса, ключ в коде, небезопасное чтение файла. Не говорите, где они.
  3. Запустите два инструмента на одной выборке. Посчитайте, сколько заведомых дефектов нашёл каждый и сколько лишнего показал.
  4. Дайте разработчикам разобрать результат. Если они закрывают вкладку через пять минут, шум слишком велик, как бы точен ни был сканер.
  5. Проверьте подавление. Как скрыть ложную находку, записывается ли причина, не возвращается ли она после следующего запуска.
  6. Замерьте время. Проверка запроса на слияние, которая идёт долго, начнёт мешать работе, и её отключат.

Размер выборки и допустимый уровень шума фиксируются до эксперимента, иначе результат подгоняется под любимый инструмент.

Чего эти проверки не заменяют

Три проверки закрывают типовое и повторяющееся. Остальное делают люди:

Автоматика полезна как страховка от повторения известных ошибок. Она хорошо удерживает уровень, но не поднимает его, если права и логика спроектированы небрежно.

Что делаем мы и с чего начать

Начинаем с обследования: 200 000 ₽ и 2–3 недели за один проект и одну платформу сборки, 350 000 ₽ и 3–4 недели, если репозиториев много и сборка устроена по-разному. На выходе схема проверок, выбор инструментов с причинами по результатам пробного прогона на выборке вашего кода, пороги блокировки и вилка бюджета. Стоимость вычитается из первого этапа, если продолжаете с нами, а документом можно пользоваться и без нас.

Дальше пилот на одном-трёх репозиториях за 150 000–400 000 ₽ и 2–8 недель, при необходимости тяжёлый пилот и сопровождение с пакетами от 20 000 ₽ в месяц. Сканеры ставятся в вашем контуре, исходный код не покидает периметр, а динамические проверки идут только на вашем тестовом стенде. Пентест боевых систем и аттестацию мы не проводим, лицензии ФСТЭК у нас нет. Цены и сроки собраны на странице «Тарифы», описание услуги — на странице «SAST, DAST и SCA».

Частые вопросы

Чем SAST отличается от DAST?

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

Что такое SCA простыми словами?

Это проверка сторонних библиотек: сканер составляет полный список того, из чего собрано приложение, и сверяет версии с базой известных уязвимостей. Свои ошибки он не ищет. Главное условие полезности — актуальность базы.

С какой проверки начать небольшой команде?

С поиска секретов в истории репозитория и SCA: они дешевле, находят самое частое и дают мало шума. Затем подключают SAST на новых изменениях, а DAST добавляют последним, на тестовом стенде, когда есть учётные записи для сценариев.

Можно ли запускать DAST на рабочем сайте?

Мы так не делаем. Сканер может создавать записи, отправлять формы и нагружать сервис, поэтому его запускают на тестовом стенде с вашего согласия. Боевые системы мы не атакуем.

Почему сканер выдал так много находок?

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

Работает ли это без интернета?

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

Заменит ли сканер аудит безопасности?

Нет. Сканеры находят типовое, но не понимают бизнес-логику: чужие данные по прямой ссылке или обход порядка шагов они не заметят. Для этого нужны ревью кода и аудит. Подробнее в разделе выше.

Сколько стоит настроить SAST, DAST и SCA?

Обследование стоит 200 000 ₽ за 2–3 недели (350 000 ₽ при нескольких платформах сборки), пилот на одном-трёх репозиториях — 150 000–400 000 ₽ за 2–8 недель, большой проект — 400 000–1 200 000 ₽ за 2–3 месяца. Сопровождение — от 20 000 ₽ в месяц.