SBOM — перечень программных компонентов, который можно приложить к выпуску или передать команде безопасности. Он помогает увидеть состав сторонних пакетов и сопоставить зависимости с отчётом об уязвимостях. CodeGraph формирует перечень в CycloneDX или SPDX и выпускает отчёт аудита в JSON, SARIF, Markdown или формате ГОСТ.
Начните с инвентаризации: получите файл, проверьте имена и версии компонентов и сохраните его вместе с ревизией исходников. Затем выполните аудит и разберите находки перед обновлением зависимостей. Команда читает файлы зависимостей проекта и сопоставляет версии пакетов со сведениями выбранных источников. Специалист по безопасности разбирает находки для выпускаемой конфигурации продукта.
Подготовка и полный пример
Установите Python 3.11 или новее и зависимости CodeGraph по разделу подготовки
руководства CLI. Следующий пример
предназначен для локальной разработки из исходников и оболочки PowerShell.
Перейдите в корень установленного репозитория CodeGraph. Каталог sbom-demo
должен быть новым: команды создают в нём файлы примера.
$env:PYTHONPATH = (Get-Location).Path
New-Item -ItemType Directory -Path sbom-demo
@'
{
"name": "sbom-demo",
"version": "1.0.0",
"lockfileVersion": 3,
"packages": {
"": {"name": "sbom-demo", "version": "1.0.0"},
"node_modules/lodash": {"version": "4.17.20"}
}
}
'@ | Set-Content sbom-demo/package-lock.json -Encoding utf8
Set-Content sbom-demo/config.yaml "security:`n local_cli_enabled: true" -Encoding utf8
Push-Location sbom-demo
try {
python -m src.cli sbom generate --format cyclonedx --output sbom.json
$sbom = Get-Content sbom.json -Raw | ConvertFrom-Json
$sbom.components | Select-Object name, version
Get-FileHash sbom.json -Algorithm SHA256
} finally {
Pop-Location
}
Ожидаемый результат: SBOM written to sbom.json (cyclonedx, 1 components).
Файл sbom-demo/sbom.json содержит bomFormat: CycloneDX, specVersion: 1.5
и компонент lodash с версией 4.17.20 и bom-ref: pkg:lodash@4.17.20.
Это учебный lockfile с фиксированной версией; для своего проекта используйте
lockfile из проверяемой ревизии. Пакет устанавливать не нужно: команда читает файл зависимостей.
Настройка security.local_cli_enabled включает CLI только для локальной разработки.
Без неё CLI выводит сообщение об отключении и завершает работу до генерации.
После команды проверьте созданный файл и его содержимое.
Сформируйте перечень для проекта
python -m src.cli sbom generate --project "<project>" --format cyclonedx --output "<sbom.json>"
Замените <project> зарегистрированным именем проекта, а <sbom.json> — путём
выходного файла. Сохраните кавычки для значений с пробелами. Без --project команда проверяет текущий каталог. Если имя проекта
не удалось разрешить, реализация также использует текущий каталог: заранее
проверьте, какие исходники находятся в нём, чтобы не проверить другой проект.
Форматы: --format {cyclonedx,spdx}, по умолчанию cyclonedx.
Сохраните ревизию исходников, команду, выходной файл и его SHA-256.
При сообщении No dependencies found. команда возвращает 0 и не создаёт SBOM.
Проверьте выбранный каталог и формат файлов зависимостей: команда включает
в SBOM компоненты из распознанных файлов.
Проверьте уязвимости
sbom audit заново сканирует манифесты выбранного проекта и проверяет полученный граф зависимостей через указанные источники. Выполняйте генерацию SBOM и аудит для одной ревизии, чтобы сопоставлять компоненты и находки.
python -m src.cli sbom audit `
--project "<project>" `
--format sarif `
--fail-on high `
--output "<sca.sarif>"
Для каталога из полного примера выполните аудит и просмотрите находки:
Push-Location sbom-demo
try {
python -m src.cli sbom audit --sources osv --format sarif --fail-on high --output sca.sarif
$report = Get-Content sca.sarif -Raw | ConvertFrom-Json
$report.runs[0].results | Select-Object ruleId, level
$report.runs[0].tool.driver.rules | Select-Object id, properties
} finally {
Pop-Location
}
Форматы отчёта: --format {sarif,json,markdown,gost}, по умолчанию json.
Источники задаются через --sources osv,nvd,bdu_fstec; по умолчанию используется osv.
Параметр --fail-on {critical,high,medium,low} возвращает код 1 при обнаружении
уязвимости указанной серьёзности или выше. Без параметра этот порог не применяется.
Находки с серьёзностью unknown остаются в отчёте, но не входят в сравнение с порогом --fail-on. Для SARIF проверьте tool.driver.rules[].properties.severity и сопоставьте правило с results[].ruleId. Разберите такие находки по сведениям источника, чтобы назначить серьёзность и выбрать исправление. Код 2 обозначает обработанную командой ошибку. Проверьте наличие отчёта, его
содержимое и сообщения об ошибках источников, прежде чем использовать результат в CI.
Команда python -m src.cli sbom sync --sources osv,nvd,bdu_fstec записывает отметку синхронизации для перечисленных источников и выводит статистику локального кэша. При проверке уязвимостей данные запрашивает sbom audit. Сохраните отчёт, сообщения источников и время проверки вместе с ревизией проекта; при ошибке источника восстановите доступ и повторите аудит.
Результаты через REST API
Операции SCA для проекта находятся под /api/v1/security/sca. Точные операции
и схемы запросов проверьте в справочнике REST развёрнутого экземпляра CodeGraph.
Порядок работы с зарегистрированным проектом и основные маршруты описаны в сценарии анализа зависимостей.
Разберите находки
- Подтвердите имя пакета, точную версию, экосистему и путь зависимости.
- Проверьте источник сведений об уязвимости и свежесть кэша.
- Оцените, выполняется ли уязвимый код в конфигурации развёрнутого продукта.
- Обновите или удалите зависимость. Если исправление откладывается, укажите компенсирующие меры и срок пересмотра решения.
- После изменения заново сформируйте SBOM и отчёт об уязвимостях.