SAST, или Static Application Security Testing, — статический анализ безопасности исходного кода, байткода или другого представления программы без выполнения её бизнес-сценариев.
Как работает
В зависимости от языка и инструмента анализ может включать:
- поиск известных небезопасных конструкций;
- анализ AST и байткода;
- построение control flow и data flow;
- taint analysis — отслеживание данных от недоверенного источника до опасной операции;
- межпроцедурный анализ вызовов.
Например, инструмент может проследить путь:
HTTP parameter → controller → repository → SQL query
и сообщить, что недоверенное значение достигает SQL-запроса без необходимой обработки.
Что способен обнаружить
SAST применяют для поиска потенциальных injection-уязвимостей, небезопасной работы с вводом, неправильного использования криптографических API, утечек секретов, ошибок проверки доступа и других дефектов, выраженных в анализируемом коде.
Конкретное покрытие зависит от языка, фреймворка, набора правил и глубины анализа.
Ограничения
- инструмент может сообщать о теоретически возможных, но фактически недостижимых путях;
- без runtime-контекста он не всегда знает реальную конфигурацию и состояние системы;
- динамическая генерация кода, reflection и сложные межсервисные потоки затрудняют анализ;
- найденная небезопасная конструкция ещё не всегда означает практически эксплуатируемую уязвимость.
Где применять
SAST полезен в IDE, при проверке pull request и в CI. Его сильная сторона — ранний сигнал с привязкой к коду, когда исправление обычно дешевле.
Примеры инструментов
- Semgrep Code — SAST с поддержкой правил и dataflow-анализа;
- CodeQL — движок анализа, который представляет код как данные и выполняет запросы для поиска уязвимостей и ошибок.
Ключевая мысль: SAST наблюдает программу как структуру, не запуская её бизнес-сценарии.