
Как работать с пользовательскими анализаторами безопасности в CI
Сегодня безопасность кода в разработке становится приоритетом для каждой команды. Рассказываем как настроить SourceCraft, чтобы платформа не только помогала писать код, но и проверяла его на уязвимости и мисконфигурации. Даём инструкции, как подключить анализаторы кода и линтеры, а также интегрировать результаты сканирования напрямую в Pull Request (PR).
Подключение анализаторов и отображение результатов
Ранее мы обновили функции безопасности так, чтобы проверки стали частью рабочего процесса. Каждый PR автоматически анализируется на наличие секретов и уязвимостей в зависимостях. Теперь у пользователя есть возможность включать свои анализаторы в цикл безопасной разработки и обрабатывать результаты в нашей платформе.
Важная задача безопасности кода — предотвратить попадание секретов в публичные или совместно используемые репозитории. SourceCraft автоматически ищет секреты в каждом коммите и PR. Для улучшения поиска используются сразу несколько движков, которые одновременно сканируют код.
Пользователям, которым недостаточно стандартных анализаторов, доступных по-умолчанию в платформе, SourceCraft позволяет проводить интеграции пользовательских сканеров кода и линтеров. Это особенно актуально для команд, придерживающихся специфических требований безопасности кода или использующих проприетарные инструменты анализа.
Пример интеграции:
- Подключение SAST (Static Application Security Testing) анализаторов, таких как Semgrep
- Использование линтеров для языков программирования, например, GoLint для Go
- Добавление пользовательских правил и сигнатур вместе с пользовательскими анализаторами
Главное требование: результаты работы анализаторов должны быть представлены в формате для представления результатов статического анализа (SARIF, Static Analysis Results Interchange Format). Корректное заполнение SARIF-отчёта позволяет интегрировать результаты анализа непосредственно в интерфейс.
Ключевые поля SARIF отчёта:
- Описание инструмента, который провёл анализ
- Информация о конкретном правиле или проверке, по которому обнаружена проблема
- Указание точного местоположения дефекта: путь к файлу (абсолютный и относительный), номер строки начала и конца
- Рекомендуется включать Поле Snippet с фрагментом проблемного кода
Создание CI Workflow для запуска анализаторов кода
Для автоматизации запуска анализаторов кода необходимо создать CI Workflow в формате YAML, расположенный в папке SourceCraft в корне репозитория. В CI-файле описываются несколько пайплайнов, каждый из которых отвечает за запуск определённого инструмента. Посмотреть, как это работает можно на платформе прямо в нашем примере.
Пример структуры CI Workflow:
- Security Pipeline 1: запуск линтера GoLint с указанием Docker-образа
- Security Pipeline 2: запуск Semgrep для статического анализа безопасности
- Использование стандартного кубика для загрузки результатов анализа в формате SARIF
on:
pull_request:
- workflows: [ security-pipeline1, security-pipeline2 ]
filter:
source_branches: [ "**" ]
target_branches: [ "main", "develop" ]
push:
- workflows: [ security-pipeline ]
filter:
branches: [ "main", "develop" ]
workflows:
security-pipeline1:
tasks:
- name: golangci-lint-security-scan
cubes:
# Step 1: Run your security scanner
- name: run-security-scanner
image:
name: golangci/golangci-lint:v2.5.0-alpine
script:
- cd $SOURCECRAFT_WORKSPACE
- golangci-lint run --output.sarif.path $SOURCECRAFT_WORKSPACE/result.sarif || true
# Step 2: Optional - Debug/validate results
- name: validate-scan-results
script:
- cat $SOURCECRAFT_WORKSPACE/result.sarif
# Step 3: Upload results to SourceCraft
- name: upload-sarif-to-sourcecraft
image:
name: sourcecraft/scan-result-uploader:0.6.0
script:
- export APPSEC_CUSTOM_ENGINE_NAME="golangci-lint"
- /app/bin/scan-result-uploader
security-pipeline2:
tasks:
- name: semgrep-security-scan
cubes:
# Step 1: Run your security scanner
- name: semgrep-scan
image:
name: semgrep/semgrep:latest
script:
- semgrep --config=auto --sarif --output $SOURCECRAFT_WORKSPACE/result.sarif $SOURCECRAFT_WORKSPACE || true
# Step 2: Optional - Debug/validate results
- name: validate-scan-results
script:
- cat $SOURCECRAFT_WORKSPACE/result.sarif
# Step 3: Upload results to SourceCraft
- name: scan-result-uploader
image:
name: sourcecraft/scan-result-uploader:0.6.0
script:
- export APPSEC_CUSTOM_ENGINE_NAME="Semgrep OSS"
- /app/bin/scan-result-uploader
В результате данные анализаторы автоматически запускаются при событиях PR, а результаты интегрируются с платформой для последующего анализа.

Использование компонента Scan Result Uploader для загрузки результатов сканирования
После запуска анализаторов и генерации SARIF-отчёта, необходимо загрузить результаты в SourceCraft. Для этого используется специальный инструмент — Scan Result Uploader (кубик), который выполняет следующие действие:
- Принимает и валидирует SARIF-отчёт
- Опционально указывает название анализатора
- Классифицирует результаты по категориям решений: SAST, SC, Static Analysis, Secrets
Этот инструмент (кубик) размещен в опенсорсе у нас на платформе. Пример работы с ним также можно найти на SourceCraft.

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

Это позволяет ревьюерам и разработчикам оперативно реагировать на угрозы, обсуждать их и вносить необходимые исправления до слияния в основную ветку.
Как использовать в своем проекте
- Включите сканирование во вкладке «Безопасность» в настройках репозитория
- Добавьте в Workflow запуск анализаторов и загрузку SARIF-отчётов через Scan Result Uploader
- Проверьте, как находки отображаются в PR