0Pricing
Cyber Security Academy · Урок

Перечень компонентов программного обеспечения (SBOM)

Инвентаризация содержимого программного обеспечения

«Перечень компонентов программного обеспечения (SBOM)» — бесплатный урок Cyber Security Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cyber Security Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cyber Security Academy содержит 4 уроков всего.

Что такое SBOM

Ведомость состава программного обеспечения (SBOM) — это формальный машиночитаемый перечень каждого компонента программного продукта: библиотек, их версий, лицензий и сведений о поставщиках.

Подобно этикетке продукта, на которой перечислены ингредиенты, SBOM позволяет за несколько секунд ответить на вопрос: содержит ли этот продукт уязвимую версию X? Без SBOM поиск ответа может занять несколько дней ручного исследования.

Почему SBOM важны сейчас

Когда обнаруживается критическая уязвимость, первый практический вопрос — степень подверженности: в каких наших продуктах поставляется затронутый компонент?

Во время инцидента Log4Shell организации, использовавшие SBOM, запрашивали свои перечни и проводили сортировку за считанные часы. Организации без SBOM неделями искали нужные сведения в каталогах сборки. Регулирующие органы и крупные покупатели всё чаще требуют SBOM как условие закупки.

  • Быстрый анализ влияния уязвимости
  • Соблюдение лицензионных требований и отслеживание обязательств
  • Прозрачность цепочки поставок для клиентов и аудиторов

Стандартные форматы SBOM

Преобладают два открытых стандарта. Инструменты обычно позволяют преобразовывать данные из одного формата в другой.

  • SPDX — стандарт Linux Foundation, ориентированный на лицензирование и широко принятый регулирующими органами
  • CycloneDX — стандарт OWASP, ориентированный на безопасность и поддерживающий данные об уязвимостях и связях между зависимостями

Не изобретайте собственный формат: потребители и средства сканирования ожидают именно эти форматы.

Что входит в запись

Каждая запись о компоненте должна содержать достаточно данных для идентификации, чтобы её можно было сопоставить с источниками данных об уязвимостях. Основные поля:

  • имя и версия — точные, а не диапазон
  • PURL (адрес пакета) — универсальный идентификатор, например pkg:npm/lodash@4.17.21
  • хеш — для проверки целостности
  • лицензия — идентификатор лицензии SPDX
  • поставщик — тот, кто это создал
# A PURL uniquely identifies a component across ecosystems
pkg:npm/lodash@4.17.21
pkg:pypi/requests@2.31.0
pkg:golang/github.com/gin-gonic/gin@v1.9.1

Создание SBOM

Создавайте SBOM автоматически из исходного кода или собранного артефакта. Syft — распространённый генератор для разных экосистем, который поддерживает оба стандарта.

# from a project directory (CycloneDX JSON)
syft dir:. -o cyclonedx-json=sbom.cdx.json

# from a container image (SPDX JSON)
syft my-app:1.4.0 -o spdx-json=sbom.spdx.json

# CycloneDX has native generators per ecosystem too
cyclonedx-npm --output-file sbom.json

SBOM исходного кода, сборки и среды выполнения

SBOM, созданная на разных этапах, отражает разные аспекты действительности.

  • SBOM исходного кода — то, что заявлено в манифесте; может не учитывать объединённый в пакет или включённый в проект код
  • SBOM сборки — то, что фактически включила сборка; наиболее точный вариант для выпуска
  • SBOM среды выполнения / развёрнутой системы — то, что фактически присутствует в работающем образе, включая пакеты OS

Для обеспечения безопасности цепочки поставок создавайте SBOM во время сборки из реального артефакта и также сканируйте итоговый контейнер на наличие пакетов уровня OS.

Сканирование SBOM на уязвимости

SBOM становится особенно полезной, если передать её сопоставителю, который связывает компоненты с известными CVEs. Это отделяет создание от анализа: сканируйте старую SBOM в день публикации новой CVE.

# match an SBOM against vulnerability databases
grype sbom:sbom.cdx.json

# OSV scanner consumes SBOMs directly
osv-scanner --sbom=sbom.spdx.json

# fail CI above a severity threshold
grype sbom:sbom.cdx.json --fail-on high

VEX: указание возможности эксплуатации

SBOM может показать уязвимый компонент, который фактически нельзя эксплуатировать в Вашем продукте (уязвимая функция никогда не вызывается). Документ VEX (обмен сведениями об эксплуатируемости уязвимостей — eXchange) фиксирует такую оценку.

VEX снижает уровень шума: вместо того чтобы каждый клиент паниковал из-за указанной CVE, Вы публикуете заявление `not_affected` с обоснованием или `affected` с описанием устранения проблемы. Это превращает необработанный перечень в практичный процесс приоритизации.

Распространение и подписание SBOM

SBOM заслуживает доверия, только если она подлинна и связана с точным артефактом, который описывает. Подписывайте её и прикрепляйте как подтверждение, а не как отдельный файл.

# attach a signed SBOM attestation to an image with cosign
cosign attest --predicate sbom.cdx.json \
  --type cyclonedx \
  my-registry/my-app:1.4.0

# verify the attached SBOM attestation
cosign verify-attestation --type cyclonedx my-registry/my-app:1.4.0

Автоматизация SBOM в непрерывной интеграции

Созданные вручную SBOM сразу устаревают. Встройте создание SBOM в конвейер, чтобы каждый выпуск создавал и сохранял её как артефакт сборки, желательно подписывая и сканируя её в том же задании.

  • Создавайте SBOM из собранного артефакта, а не только из репозитория
  • Храните SBOM в реестре с возможностью запросов, используя версию как ключ
  • Повторно сканируйте сохранённые SBOM по расписанию с использованием свежих источников данных о CVE
  • Блокируйте выпуски по результату сканирования на уязвимости

Типичные ошибки при работе с SBOM

SBOM незаметно перестают приносить пользу, если относиться к ним как к формальной галочке.

  • Устаревшая — создана один раз и больше не обновлялась
  • Неполная — не учитывает пакеты OS, код со статической связью или включённый в проект код
  • Неподтверждённая — отсутствует хеш, связывающий её с развёрнутым артефактом
  • Неиспользуемая — создана, но никогда не сканируется и не запрашивается

Цель — точная, регулярно создаваемая, подписанная и непрерывно сканируемая SBOM, а не разовый файл формата JSON.

Быстрая проверка: назначение SBOM

Примените изученное к сценарию инцидента.

Итоги: SBOM

Теперь Вы умеете составлять перечень содержимого программного обеспечения и действовать на его основе.

  • SBOM — это машиночитаемый список каждого компонента в формате SPDX или CycloneDX
  • Идентифицируйте компоненты по PURL, версии, хешу и лицензии
  • Создавайте SBOM во время сборки, затем передавайте её сопоставителю (grype, osv-scanner) для поиска CVEs
  • Используйте VEX, чтобы указать фактическую возможность эксплуатации и сократить число ложных тревог
  • Подписывайте и автоматизируйте работу в среде непрерывной интеграции; повторно сканируйте сохранённые SBOM по новым источникам данных

Далее Вы узнаете, как с помощью подписей подтвердить происхождение артефактов.

Часто задаваемые вопросы

Урок «Перечень компонентов программного обеспечения (SBOM)» бесплатный?

Да — полный текст урока «Перечень компонентов программного обеспечения (SBOM)» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cyber Security Academy, подпишись на CoddyKit PRO. Курс Cyber Security Academy содержит 4 уроков всего.

Чему я научусь в уроке «Перечень компонентов программного обеспечения (SBOM)»?

Инвентаризация содержимого программного обеспечения Ты практикуешь Cyber Security Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Cyber Security Academy?

Предыдущий опыт не требуется. Cyber Security Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Перечень компонентов программного обеспечения (SBOM)»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Cyber Security Academy?

Да. Каждый урок Cyber Security Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Угрозы цепочке поставок
  2. Перечень компонентов программного обеспечения (SBOM)
  3. Подпись зависимостей и артефактов
  4. Защита конвейеров CI/CD
← Назад к Cyber Security Academy