Как читать авторский курс и нормативные материалы
Это учебные материалы, а не заключение о соответствии конкретного продукта. Организационные модели курса отделяйте от терминов стандарта: ППК в опубликованном проекте — машиночитаемый перечень, а живой реестр его версий является практикой сопровождения. Термин OSA в разных материалах имеет разный охват. Статус и обязательность нормативного документа проверяются отдельно; проект КАПО опубликован как проект первой редакции.
План занятия: Инструменты генерации SBOM
Цели
- Объяснить, почему один и тот же проект даёт разные SBOM у Syft, Trivy и cdxgen.
- Развести манифест-скан и бинарь-скан: что каждый видит и какие у каждого слепые зоны.
- Показать роль cdxgen и последующего обогащения «генератором фактов» для C/C++.
- Привить привычку фиксировать версию инструмента и входной артефакт.
- Связать тему с NIST SP 800-218 SSDF (PS.3.2), BSI TR-03183-2 v2.1.0, CycloneDX ECMA-424.
Тайминг и ход занятия
| Мин | Блок | Что делаем |
|---|---|---|
| 0–10 | Вводный кейс | Показываю три bom.json одного репозитория от Syft/Trivy/cdxgen с разным числом компонентов. Вопрос группе: какой «правильный» и почему вопрос поставлен неверно. |
| 10–30 | Лекция: что видит инструмент | Манифест-скан vs бинарь-скан. Таблица инструмент→что видит. Где теряются версии и лицензии. Зачем нужны PURL/CPE для матчинга CVE. |
| 30–45 | Демо 1: Syft и Trivy | syft dir:. и trivy image на тестовом проекте; сравниваем компоненты; показываю, что Syft не считает CVE, а Trivy считает. Фиксируем syft version/trivy --version. |
| 45–60 | Демо 2: cdxgen + C/C++ | cdxgen -t cpp на C/C++ проекте; показываю каркас без версий .so; объясняю, как обогащение читает ELF, маппит на DEB через apt и пишет обогащённый bom.json. |
| 60–80 | Практика в парах | Слушатели генерируют SBOM тремя инструментами, заполняют сравнительную таблицу охвата (компоненты, доля PURL, лицензии, dependencies). См. практическую работу. |
| 80–90 | Разбор и рефлексия | Где какой инструмент сильнее; что фиксировать в регламенте Организации; какие данные нельзя гнать во внешние сервисы без отдельного решения. |
Демонстрационные команды
syft dir:. -o cyclonedx-json=syft-bom.json
trivy fs --format cyclonedx --output trivy-bom.json .
cdxgen -t cpp -o cdxgen-bom.json .
Материалы
- Тестовый репозиторий со смешанными экосистемами (npm + PyPI) и отдельный C/C++ проект.
- Установленные Syft, Trivy, cdxgen (зафиксированные версии).
- Конспект 01 Конспект и таблица инструмент→что видит.
- Доступ к схеме обогащения «генератором фактов» (описание роли, без внутренних путей).
Контрольная точка
Слушатель может объяснить: какой инструмент выбрать под конкретную экосистему; чем манифест-скан отличается от бинарь-скана; почему C/C++ SBOM от cdxgen требует обогащения; что именно фиксируется рядом с bom.json для воспроизводимости.
Частая ошибка занятия Группа склонна искать «лучший» генератор. Возвращайте к мысли: инструмент выбирается под экосистему и режим, а не абсолютно — Trivy хорош для образов с CVE одним шагом, cdxgen незаменим для C/C++, Syft даёт чистую инвентаризацию.