Как читать авторский курс и нормативные материалы
Это учебные материалы, а не заключение о соответствии конкретного продукта. Организационные модели курса отделяйте от терминов стандарта: ППК в опубликованном проекте — машиночитаемый перечень, а живой реестр его версий является практикой сопровождения. Термин 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-bom.json,trivy-bom.json,cdxgen-bom.json+ зафиксированные версии инструментов. - Заполненная таблица сравнения с реальными числами (а не «много/мало»).
- Список из 3–5 компонентов, которые один инструмент видит, а другой — нет, с объяснением почему.
- Для C/C++ — перечень unresolved/без-версии компонентов под обогащение.
Типовой итог Syft и Trivy на манифестах дают близкое число компонентов, но Trivy сразу показывает CVE. На C/C++ Syft/Trivy почти пусты, а cdxgen отдаёт каркас графа — и именно его версии и DEB-привязка остаются слепой зоной до обогащения.
Если не получилось
jq: command not found— установитеjqили откройте JSON вручную и посчитайтеcomponents.- cdxgen вернул пустой/скудный граф для C/C++ — проект должен собираться; убедитесь, что есть
CMakeLists.txt/Makefileи cdxgen видит систему сборки. - Trivy не отдаёт CVE — обновите БД (
trivy --download-db-only) или запустите без офлайн-флагов на согласованном контуре. - Числа компонентов совпали у всех трёх — вы, вероятно, запустили манифест-скан там, где нет различий; добавьте контейнерный образ (
trivy image,syft <image>), чтобы проявить бинарь-скан.
Критерий зачёта
Покажите преподавателю три 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 (управляемость работ).