Пиков / КАПО
Как читать авторский курс и нормативные материалы

Это учебные материалы, а не заключение о соответствии конкретного продукта. Организационные модели курса отделяйте от терминов стандарта: ППК в опубликованном проекте — машиночитаемый перечень, а живой реестр его версий является практикой сопровождения. Термин OSA в разных материалах имеет разный охват. Статус и обязательность нормативного документа проверяются отдельно; проект КАПО опубликован как проект первой редакции.

Практическая работа: три генератора на одном проекте

Цель

Сгенерировать SBOM тремя инструментами (Syft, Trivy, cdxgen) на одном входе и доказательно показать, что каждый видит и чего не видит. Результат — заполненная таблица сравнения охвата и вывод о том, какой генератор под какую задачу.

Что вам понадобится Установленные Syft, Trivy, cdxgen. Тестовый репозиторий со смешанными экосистемами (например, npm + PyPI) и отдельный небольшой C/C++ проект (собирающийся). Работайте только на согласованном тестовом коде, не на проде.

Порядок выполнения

Шаг 1. Зафиксируйте вход

Запишите: репозиторий, commit/tag, дату анализа и версии инструментов.

syft version
trivy --version
cdxgen --version

Эти строки кладутся рядом с выходными файлами — без них SBOM невоспроизводим.

Шаг 2. Манифест-скан смешанного проекта (Syft и Trivy)

syft dir:. -o cyclonedx-json=syft-bom.json
trivy fs --format cyclonedx --output trivy-bom.json .

Посчитайте число компонентов в каждом файле:

jq '.components | length' syft-bom.json
jq '.components | length' trivy-bom.json

Шаг 3. Проверьте качество координат

Сколько компонентов имеют PURL, версию, лицензию:

jq '[.components[] | select(.purl)] | length' syft-bom.json
jq '[.components[] | select(.licenses)] | length' syft-bom.json

Запустите Trivy ещё раз в режиме сканера и зафиксируйте, что он, в отличие от Syft, сразу отдаёт уязвимости. См. П05. Trivy как генератор и сканер.

Шаг 4. C/C++ через cdxgen

На C/C++ проекте:

cdxgen -t cpp -o cdxgen-bom.json .

Найдите компоненты без версии или без PURL — это кандидаты на обогащение. Опишите словами, какие факты дотянул бы «генератор фактов»: динамические .so через анализ ELF и их маппинг на DEB-пакеты. См. П04. Генерация SBOM через cdxgen для C C++.

Шаг 5. Сравнительная таблица

Заполните на основе своих чисел:

Метрика Syft Trivy cdxgen
Всего компонентов
Доля с PURL
Доля с лицензией
Есть dependencies-граф
Выдаёт CVE нет да нет
Видит C/C++ граф нет частично да

Ожидаемый результат

Типовой итог Syft и Trivy на манифестах дают близкое число компонентов, но Trivy сразу показывает CVE. На C/C++ Syft/Trivy почти пусты, а cdxgen отдаёт каркас графа — и именно его версии и DEB-привязка остаются слепой зоной до обогащения.

Если не получилось

Критерий зачёта

Покажите преподавателю три SBOM с зафиксированными версиями инструментов, заполненную таблицу сравнения и устно объясните: какой генератор под какую экосистему, чем манифест-скан отличается от бинарь-скана, и зачем C/C++ SBOM отдают «генератору фактов».

Нормативная связка

NIST SP 800-218 SSDF (PS.3.2 — формировать и сохранять SBOM), BSI TR-03183-2 v2.1.0 (качество SBOM: полнота PURL, лицензии, dependencies), CycloneDX ECMA-424 (формат), ГОСТ Р 56939-2024 (управляемость работ).