Руководство
Сравнение SAST-инструментов: что они находят и что упускают
Что делают SAST-инструменты, чем восемь популярных решений отличаются по подходу, языкам и лицензиям и что статический анализ упускает в коде, сгенерированном ИИ.
· 9 мин чтения · Команда vetkit


Что такое SAST-инструмент
SAST-инструмент (static application security testing, статическое тестирование безопасности приложений) читает исходный код, не запуская его, и сообщает о коде, который выглядит уязвимым: данные запроса, попадающие в SQL-запрос, shell-команда, собранная из пользовательского ввода, отключённая проверка сертификата, слабый хеш для паролей. Поскольку ему нужен только исходный код, он может работать на каждом коммите задолго до того, как приложение будет развёрнуто.
SAST — лишь один из видов тестирования безопасности. SCA (software composition analysis, анализ состава ПО) проверяет зависимости на известные уязвимости, secret scanning ищет закоммиченные учётные данные, а DAST (динамическое тестирование) прощупывает работающее приложение. SAST-инструмент не делает ничего из этого, поэтому большинство команд сочетают его как минимум со сканированием зависимостей и секретов.
Чем различаются SAST-инструменты
Четыре различия объясняют большую часть того, что вы заметите, запустив два инструмента на одном и том же коде.
- Насколько глубок анализ. Сопоставление с шаблонами находит код, похожий на известную плохую конструкцию. Taint-анализ, или анализ потоков данных, отслеживает значение от точки входа (запроса) до места использования (запроса к базе). Отслеживание значений между функциями и файлами находит больше реальных проблем, и обычно именно этим коммерческие редакции отличаются от бесплатных.
- Один язык или много. Инструменты для одного языка хорошо знают свою экосистему. Многоязычные инструменты дают единый отчёт для смешанной кодовой базы.
- Где он работает. Одни — это команда, которую вы запускаете локально или в CI. Другие — хостинговые платформы, которые подключаются к системе контроля версий и добавляют дашборды, комментарии в pull request и политики.
- Можно ли писать свои правила. Читаемые форматы правил позволяют на практике закрепить собственные соглашения команды.
Восемь SAST-инструментов бок о бок
Это широко используемые инструменты, перечисленные в алфавитном порядке внутри каждой группы. Таблица отражает то, что говорит собственная документация каждого проекта; это не рейтинг, и мы не сравнивали их в бенчмарках друг с другом.
| Инструмент | Подход согласно документации | Языки | Лицензирование | Вывод в SARIF |
|---|---|---|---|---|
| CodeQL (GitHub code scanning) | Строит базу данных по коду и выполняет к ней семантические запросы | C/C++, C#, Go, Java/Kotlin, JavaScript/TypeScript, Python, Ruby, Rust, Swift и workflow GitHub Actions | CLI бесплатен для публичных репозиториев; для приватных репозиториев нужна лицензия GitHub Code Security | Да |
| Checkmarx One SAST | Строит граф элементов кода и потоков данных и выполняет запросы; поддерживаются собственные запросы | Многоязычный, включая Java, C#, C/C++, PHP, JavaScript/TypeScript, Python и Go | Коммерческий | Да |
| Opengrep | Правила-шаблоны с taint-анализом; совместим с правилами Semgrep | 30+ языков | Open source, LGPL 2.1 | Да |
| Semgrep | Правила-шаблоны, которые выглядят как код, который они находят. Community Edition анализирует в пределах одной функции или файла; коммерческий Semgrep Code добавляет анализ между файлами и функциями | 30+ языков | Движок open source, LGPL 2.1; AppSec Platform — проприетарная | Да |
| Snyk Code | Движок семантического анализа с анализом потоков данных и taint-анализом | Многоязычный, включая Java/Kotlin, JavaScript/TypeScript, Python, Go, C#, PHP, Ruby и Swift | Коммерческий хостинговый сервис с бесплатным тарифом | Да |
| SonarQube | Правила качества кода и безопасности; taint-анализ для правил об инъекциях доступен в SonarQube Server и Cloud | 40+ языков и фреймворков в разных редакциях | Community Build — open source, LGPL 3.0; Server и Cloud — коммерческие | Импортирует SARIF из других инструментов |
| Bandit | Строит синтаксическое дерево для каждого файла и прогоняет по нему плагины | Только Python | Open source, Apache 2.0 | Да, с дополнительным пакетом |
| gosec | Правила по синтаксическому дереву, анализаторы на основе SSA и taint-анализ | Только Go | Open source, Apache 2.0 | Да |
Brakeman — ещё один известный инструмент для одного фреймворка, Ruby on Rails. В его репозитории сказано, что он бесплатен для некоммерческого использования по собственной публичной лицензии, поэтому проверьте условия, прежде чем встраивать его в коммерческий сервис.
Некоторые из них теперь предлагают исправления или триаж с помощью ИИ под собственными названиями, например Copilot Autofix для алертов CodeQL, Semgrep Multimodal, Snyk Agent Fix и SonarQube AI CodeFix. Названия, редакции и цены в этой области часто меняются, поэтому перед решением читайте актуальную страницу каждого вендора.
Как выбрать
- Один язык, небольшая команда. Начните с инструмента для вашего стека (Bandit для Python, gosec для Go). Они бесплатны, быстро работают и легко добавляются в CI.
- Смешанная кодовая база, хочется open source. Многоязычный движок на правилах, такой как Opengrep или Semgrep Community Edition, покрывает множество языков правилами, которые можно читать и расширять.
- Всё лежит на GitHub. CodeQL через GitHub code scanning показывает алерты в pull request без дополнительного сервиса. См. GitHub Advanced Security vs vetkit.
- Нужен более глубокий межфайловый анализ, дашборды и политики. Именно это продают коммерческие платформы. Сравнивайте их на своём коде, а не по спискам функций. См. Semgrep vs vetkit и Snyk vs vetkit.
Что бы вы ни выбрали, предпочитайте инструмент, который пишет SARIF. Это общий формат, позволяющий отправлять находки в GitHub code scanning или другой дашборд и позже переходить между инструментами. Как это сделать, объясняет руководство по SARIF.
Что упускает SAST
SAST находит небезопасные паттерны в коде. Но многое из того, что идёт не так в софте, особенно в софте, быстро написанном с ИИ-ассистентом, не является паттерном в одном файле.
| Проблема | Почему один SAST её не ловит | Что ловит |
|---|---|---|
| Пакет, которого не существует или который зарегистрировали на прошлой неделе | Оператор импорта — валидный код | Проверка зависимостей по публичным реестрам |
| Закоммиченные учётные данные | Большинство правил SAST смотрят на поведение кода, а не на форматы секретов | Secret scanning |
| Известные уязвимости в зависимостях | Уязвимого кода нет в вашем репозитории | Анализ состава ПО (SCA) |
| Отсутствие авторизации между пользователями | Синтаксически код в порядке; недостающее правило живёт в дизайне вашего продукта | Ревью и тест с двумя аккаунтами |
| Недописанные реализации или заглушки | Это не паттерн безопасности | Проверки качества кода и ИИ-рисков, а также ревью |
| Нет таймаутов, запросы внутри циклов, нет отчётов об ошибках | Проблемы надёжности, вне большинства наборов правил безопасности | Проверки готовности к продакшену |
| Неверно настроенные права хостинга или базы данных | Настройка находится в консоли, а не в исходном коде | Проверка развёрнутого окружения |
Вот почему чистый отчёт SAST — не то же самое, что код, готовый к релизу. Руководство о том, что идёт не так при vibe coding и руководство о выдуманных пакетах разбирают случаи, которые важнее всего для кода, написанного с помощью ИИ.
Где здесь vetkit
vetkit — не собственный SAST-движок. Это аудит репозитория, в котором статический анализ — лишь одна часть более широкого отчёта. Для безопасности кода он использует Opengrep с 663 собственными правилами, перечисленными в публичном каталоге проверок, и добавляет Bandit для Python и gosec для Go, если выбраны эти проверки. Вокруг этого он запускает secret scanning, проверки уязвимостей зависимостей и существования пакетов, проверки качества кода, рисков ИИ-кода и готовности к продакшену и превращает находки в отслеживаемые задачи. Находки можно экспортировать в SARIF.
Если вы уже используете один из перечисленных выше инструментов и довольны им, оставьте его. vetkit полезен для строк из второй таблицы; сейчас он в раннем доступе, с бесплатным Security Quick Scan, который охватывает секреты, известные уязвимости зависимостей и базовую конфигурацию безопасности.
Источники
Утверждения о других инструментах мы взяли из их собственной документации или репозиториев . Продукты быстро меняются, поэтому окончательным источником считайте страницы самих проектов:
- О code scanning с CodeQL и О CodeQL CLI
- SAST-сканер Checkmarx One
- Репозиторий Opengrep
- Semgrep Community Edition и AppSec Platform
- Документация Snyk Code
- Что такое SonarQube и репозиторий SonarQube Community Build
- Документация Bandit
- Репозиторий gosec
- Репозиторий Brakeman
Названия продуктов являются товарными знаками соответствующих владельцев. vetkit не связан с ними, не одобрен и не спонсируется ими; названия используются только для обозначения инструментов. Заметили устаревшие сведения? Напишите на contact@vetkit.dev, и мы всё исправим.