Теория
Что такое SBOM
SBOM (Software Bill of Materials) — машинно-читаемый инвентарь компонентов ПО: пакеты, версии, hashes, поставщики и dependency-связи. NTIA «Minimum Elements for an SBOM» (July 2021) задаёт минимум: supplier, component name, version, unique identifier, dependency relationship, SBOM author, timestamp.
Применение:
- vulnerability scanning (привязка CVE к component+version);
- license compliance;
- расследование supply-chain инцидентов.
CycloneDX и SPDX
CycloneDX(OWASP/Ecma): актуальная версия 1.7, опубликована какECMA-4242nd edition. Поддерживает software, services, vulnerabilities/VEX, cryptography, ML-BOM, SaaSBOM; основные сериализации — JSON и XML.SPDX(Linux Foundation): актуальная спецификация —3.0.1;SPDX 2.2.1стандартизован какISO/IEC 5962:2021, а ISO-версия SPDX 3.0 находится в процессе стандартизации. Сильная сторона — модель лицензий (SPDX License List) и профили SPDX 3.x.
Оба формата поддерживаются основными генераторами (syft, trivy, cdxgen) и сканерами (grype, trivy, dependency-track).
Что нужно уметь объяснить
Почему SBOM не заменяет сканирование?
SBOM — инвентарь. Сканер сопоставляет компоненты со списком уязвимостей (NVD, OSV, GHSA). Без сканера SBOM ничего не блокирует.
Что даёт максимальный эффект?
Привязка SBOM к digest артефакта (sha256:…), подпись SBOM как in-toto attestation и policy-проверка перед deploy.
Когда SBOM устаревает?
При любом изменении артефакта. Генерация — на каждый build.
Практика
1. Генерация SBOM
# CycloneDX из контейнера
syft registry.example.com/app:1.0.0 -o cyclonedx-json > sbom.cdx.json
# SPDX
syft registry.example.com/app:1.0.0 -o spdx-json > sbom.spdx.json
2. SBOM как attestation (cosign)
cosign attest --yes \
--predicate sbom.cdx.json \
--type cyclonedx \
registry.example.com/app:1.0.0
3. Сканирование по SBOM
grype sbom:./sbom.cdx.json --fail-on critical
4. Policy gate
- блок при
criticalCVE без approved exception (VEX); - блок при отсутствии SBOM/подписи на артефакте;
- traceability:
bom-ref↔ imagedigest.