Semgrep: custom как фича и почему начинаем с него?
2 октября 2025 г.·150 views

🛠 Semgrep: custom как фича и почему начинаем с него?

Салют, начнем,

Я бы хотел поговорить про

Static Application Security Testing - метод анализа, при котором проверяется статичный исходный код на наличие уязвимостей. Это подход «белого ящика».

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

- Tool позволяет работать с приложением в нетривиальном режиме: dataflow/ taint-трекинг, межфайловые цепочки

- Приоритизирует уязвимости зависимостей по достижимости/использованию (reachability)

- Масштабируется и в custom под написание своих собственных политик

- Определение и валидация активных секретов

- Анализирует код с помощью синтаксических шаблонов

- Поддерживает множество языков (Python, JavaScript, TypeScript, Java, Go, C/C++, Ruby и др.)

- baseline-commit

- Для фиксирования инкременты без задержек с вычислением diff не нужно костылить

- Может в pre-commit

- Тип лицензии: LGPL 2.1 (ранние версии — проприетарные, сейчас полностью opensource)

- Форматы отчетов: JSON, SARIF, GitLab SAST, JUnit XML, Text, Emacs, Vim

Вообще, задуман инструмент как opensource, который анализирует код с помощью синтаксических шаблонов, но у него есть платная версия, которая включает дополнительные правила, делает более глубокий анализ, гибок и многое другое. А мы и не знали, что хорошее платненько. Лицензируется по количеству контрибьюторов по 40 американских.

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

# Установка через pip (или brew, docker)

python -m pip install semgrep

# Сканирование репозитория

semgrep scan --config auto # автоопределение языка и базовых правил

semgrep scan --config p/python # только Python-правила (варианты - p/gosec/ golang/ javascript/ dockerfile/ react/ secrets/ owasp-top-ten)

# CI/CD

semgrep ci # для использования semgrep в составе пайплайна

semgrep scan --config "p/ci" --exclude "tests/" # исключение директории

semgrep ci --allow--untristed-validators # разрешение работы с ненадежными источниками правил, отличными от semgrep.dev

semgrep ci --code # запуск статического анализатора от semgrep

semgrep ci --autofix # внедрение в правило автоправок от инструмента (экспериментальная функция)

semgrep ci --dryrun # отмена внесения автоисправлений в правила

# Вывод в SARIF (для GitHub Security)

semgrep scan --config auto --sarif -o results.sarif

# Docker

docker pull returntocorp/semgrep

docker run -v $(pwd):/src returntocorp/semgrep semgrep scan --config auto // запуск сканирования

Ну и зацепим как происходит интеграции в pipeline

CI/CD

semgrep_scan:

stage: security

image: returntocorp/semgrep

script:

- semgrep scan --config auto --sarif -o semgrep.sarif

artifacts:

reports:

sarif: semgrep.sarif

pipeline {

agent any

environment {

REPORT_DIR = 'semgrep-reports'

}

stages {

stage('Semgrep Scan') {

steps {

sh '''

docker run -v $(pwd):/src returntocorp/semgrep \

semgrep scan --config auto --json -o ${REPORT_DIR}/semgrep.json

'''

}

}

}

post {

always {

archiveArtifacts artifacts: '${REPORT_DIR}/**'

}

}

}

#toolchain #sast

#toolchain#sast
Открыть в Telegram