Главная

8 мин

SBOM в CI/CD: внедрение CycloneDX, SPDX и Dependency-Track

Практический план, как внедрить SBOM в CI/CD и закупки: выбор CycloneDX или SPDX, генерация, хранение, анализ в Dependency-Track и быстрые проверки.

SBOM в CI/CD: внедрение CycloneDX, SPDX и Dependency-Track

Проблема: зависимости есть, а прозрачности нет

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

Без явного перечня обычно теряются три вещи. Во-первых, точные версии: в репозитории есть package.json или pom.xml, но в прод ушло что-то другое. Во-вторых, транзитивные зависимости: вы их не выбирали, но они попали в сборку через другие пакеты. В-третьих, происхождение: откуда пришел артефакт, какой источник использовался при сборке, какие хэши и метаданные у бинарников.

SBOM закрывает этот пробел. Это единый документ, который фиксирует состав поставки: что именно внутри, в каких версиях и как связано. Если SBOM встроен в CI/CD, вы не гадаете по логам и не ищете вручную по репозиториям, а быстро сверяете факт поставки с конкретной уязвимостью и понимаете масштаб работ.

Больше всего выигрывают команды, которым нужно действовать согласованно:

  • Разработка быстрее находит, где обновлять и что может сломаться.
  • Безопасность быстрее оценивает риск и приоритизирует патчи.
  • ИТ-эксплуатация понимает, какие сервисы и окружения реально затронуты.
  • Закупки получают прозрачные требования к составу поставляемого ПО.

Простой сценарий: выходит критическая уязвимость в компоненте X. Без SBOM вы проверяете десятки проектов и контейнеров, а часть зависимостей скрыта. С SBOM вы фильтруете по компоненту и версии и сразу видите, какие сборки затронуты и какие нет. Это экономит часы и снижает риск пропустить проблемный сервис.

Что такое SBOM и что в нем должно быть

SBOM (Software Bill of Materials) - это понятный список того, из чего состоит ваше приложение: какие библиотеки, модули и пакеты в него входят, и какие у них версии. Проще всего представить SBOM как "состав" на упаковке: не про то, как вы готовили продукт, а из каких компонентов он реально собран.

Хороший SBOM отвечает на главный вопрос безопасности: "Где именно у нас используется этот компонент, и какой он версии?" Это особенно важно, когда всплывает новая уязвимость в популярной зависимости, и времени на ручной поиск по репозиториям нет.

Что должно быть внутри SBOM

Минимальный набор полей, который обычно помогает и в инцидентах, и при проверках:

  • название компонента (пакета/библиотеки) и его версия
  • идентификатор компонента (например, package URL), чтобы избежать путаницы с "однофамильцами"
  • лицензия, чтобы понимать риски использования и ограничения
  • контрольные суммы (хэши) или другие признаки целостности, чтобы отличать "тот же" файл от подмененного
  • источник (откуда получен компонент: реестр, репозиторий, внутренний артефакт)

Отдельно ценны связи зависимостей: не только список компонентов, но и кто от кого зависит. Тогда видно, почему у вас оказался уязвимый пакет: он прямой или подтянут транзитивно через другую библиотеку.

SBOM как артефакт поставки

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

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

CycloneDX и SPDX: как выбрать формат без лишней теории

CycloneDX и SPDX решают похожую задачу - описать состав ПО, - но обычно их выбирают под разные потребности. Если важно быстро находить уязвимости в библиотеках и не тормозить релизы, чаще всего проще начать с CycloneDX. Если на первом месте юридическая чистота, лицензии и обмен документами между организациями, удобнее SPDX.

CycloneDX хорошо ложится на AppSec и DevSecOps: его часто поддерживают инструменты, которые принимают SBOM в CI/CD, строят граф зависимостей и связывают компоненты с уязвимостями. Он удобен, когда цель - быстро ответить на вопрос "где у нас используется эта версия пакета?".

SPDX сильнее в части соответствия требованиям: лицензии, авторство, поставщики, доказуемость происхождения. Это полезно, когда вы закупаете ПО у подрядчиков или сами поставляете решения крупным заказчикам и нужно формально подтвердить состав и лицензирование.

При выборе формата смотрите не на "популярность", а на то, какие поля критичны именно вам:

  • точная идентификация компонента (name, version и желательно purl)
  • лицензия и тип поставки (особенно для закупок и аудита)
  • хэши/подписи для проверки целостности
  • связь "что от чего зависит" (граф зависимостей)
  • метаданные сборки (как и чем собрали, чтобы повторить)

Чтобы не усложнять старт, выберите один формат под основную цель. Типичный путь: CycloneDX для ежедневного сканирования зависимостей, а SPDX - как пакет документов для контрактов и приемки.

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

Подготовка: инвентаризация, охват и правила

SBOM хорошо работает только тогда, когда вы заранее решили, что именно описываете. Начните с границ: какие продукты и артефакты считаются "единицей учета" и где SBOM обязателен.

Определите охват. Обычно в него попадают приложения (бэкенд, фронтенд, desktop), контейнерные образы, библиотеки, которые вы публикуете внутри компании, а также базовые инфраструктурные пакеты (например, агенты, утилиты, компоненты ОС в образах). Важно записать это как правило. Иначе одна команда будет делать SBOM только для кода, а другая - для всего контейнера.

Составьте карту технологий: какие языки и менеджеры пакетов реально используются (npm/yarn/pnpm, Maven/Gradle, NuGet, pip/Poetry, Go modules и т.д.). Это влияет на инструменты генерации и на качество результата. Если часть сборок не попадает в SBOM из-за "экзотики", появляются слепые зоны.

Договоритесь о глубине. Для поиска уязвимостей почти всегда нужны не только прямые, но и транзитивные зависимости. Иначе при новой CVE вы будете видеть "чистый" список, а проблема окажется глубже.

Заранее введите правила идентификации, чтобы не плодить дубли: единый способ писать имя компонента, версию, поставщика и тип. Даже мелочь вроде разных регистров или "react 18.2.0" против "[email protected]" потом ломает поиск и отчеты.

Назначьте владельцев. У каждого продукта должен быть ответственный за SBOM (часто тимлид или релиз-инженер), а у безопасности - роль контроля политики. Пример: команда выпускает релиз, CI собирает SBOM, а владелец подтверждает, что он сформирован для нужного артефакта и по согласованным правилам.

Как генерировать SBOM для разных типов сборок

Самый надежный путь - генерировать SBOM прямо из тех файлов, которые управляют зависимостями в сборке: манифестов и lock-файлов. Lock-файл особенно важен: он фиксирует точные версии, без него SBOM часто получается "примерным", а не пригодным для расследований.

Для библиотек и приложений (Java, .NET, Node.js, Python и т.д.) обычно достаточно опираться на манифест, lock-файл и данные сборщика. Так вы получаете и прямые, и транзитивные зависимости, а также их точные версии.

С контейнерами сложнее: важно учитывать не только ваше приложение, но и базовый образ и пакеты ОС внутри него. Частая ошибка - выпустить SBOM только для кода, забыв про OpenSSL, glibc или системные утилиты, которые тоже попадают под уязвимости. Практичный подход - делать два слоя: SBOM приложения и SBOM контейнера, а затем хранить их рядом как один набор артефактов релиза.

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

Качество SBOM стоит проверять автоматически. Минимальные проверки:

  • нет пустых версий и "LATEST"
  • имена пакетов совпадают с экосистемой (group/artifact, npm name и т.д.)
  • присутствуют транзитивные зависимости
  • для контейнеров учтены пакеты ОС и базовый образ

Пересобирать SBOM нужно при каждом билде, который уходит дальше разработки, и обязательно при релизе и hotfix. Иначе вы будете разбирать инцидент с SBOM, который относится к "почти такой же" сборке, а не к той, что реально в проде.

Пошагово: внедряем SBOM в CI/CD

SBOM в CI/CD лучше внедрять как часть обычной сборки, а не как отдельный ручной документ. Тогда SBOM соответствует тому, что реально попало в артефакт, и его можно быстро поднять при разборе инцидента.

Минимальная схема пайплайна

Начните с простого, но повторяемого сценария:

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

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

Заранее решите, что ломает сборку, а что только предупреждает. Обычно провалом считают ситуации, которые делают SBOM недостоверным: не удалось собрать список зависимостей, есть компоненты с неизвестной версией, SBOM не совпадает с артефактом. Предупреждениями чаще делают то, что требует уточнения, но не блокирует релиз сразу: неполные поля, новые лицензии для ручной проверки.

Пример: команда собирает сервис, и одна библиотека подтягивается как "latest". Генератор SBOM фиксирует это как неопределенную версию, правило качества срабатывает, и сборка падает до релиза. В итоге вы не выпускаете версию, которую потом невозможно быстро сопоставить с уязвимостью в конкретной зависимости.

Хранение и целостность SBOM: чтобы ему доверяли

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

Самый практичный вариант - держать SBOM рядом с артефактом релиза в репозитории артефактов. Дополнительно можно сохранять копию в репозитории кода (например, в каталоге с релизными метаданными) или в отдельном внутреннем каталоге SBOM, если так проще управлять доступом.

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

  • commit SHA и/или tag
  • версия (SemVer) и build-id из CI
  • имя компонента и среда (prod, stage)
  • дата сборки и идентификатор пайплайна

Целостность обеспечивают хэши и подписи. Минимум - хранить SHA-256 для SBOM и проверять его в пайплайне при публикации и при скачивании. Лучше - подписывать SBOM (или подписью закрывать комплект артефактов релиза) и ограничить право публикации: только CI-сервисный аккаунт, без ручных загрузок.

Доступ разделяйте: читать SBOM могут команды разработки, ИБ и эксплуатации, а менять или публиковать - только автоматизация. Любое изменение после релиза должно оставлять след: кто, когда и почему.

Сроки хранения выбирайте с запасом. Уязвимости всплывают через месяцы, поэтому SBOM для старых версий нужен так же, как и сами артефакты. Например, если в организации вроде GSE поддерживают поставки и сопровождение оборудования и ПО годами, разумно хранить SBOM не меньше срока поддержки релиза, плюс время на аудит и разбор инцидентов.

Dependency-Track: анализ SBOM и разбор уязвимостей

Dependency-Track - это система, которая берет ваш SBOM и превращает его в понятную картину рисков: какие компоненты используются, где именно, и какие уязвимости к ним привязаны. Он дополняет обычные сканеры (SAST, контейнерные и IaC-сканеры): сканер находит проблемы в коде и образах, а Dependency-Track держит фокус на зависимостях и их версиях во времени. Это особенно удобно, когда SBOM в CI/CD генерируется на каждый релиз.

Импорт CycloneDX и SPDX: проекты и версии

Практика, которая работает лучше всего: заводить отдельный проект на приложение или сервис, а SBOM загружать как версию (релиз, билд, тег). Тогда вы видите, когда именно уязвимость появилась (или исчезла) и какой релиз затронут.

Если у вас несколько сборок одного продукта (например, on-prem и cloud, разные платформы), разделите их на разные проекты или ветки версий. Иначе triage превратится в спор, что именно пострадало.

Триаж, оповещения и фиксация решений

Когда прилетает новая CVE, triage удобнее вести по простому порядку:

  • Затронуты ли мы: есть ли компонент и уязвимая версия в SBOM.
  • Где используется: какой сервис и какой релиз.
  • Есть ли путь эксплуатации: используется ли уязвимый модуль или функция.
  • Приоритет: критичность, внешняя доступность, наличие публичного эксплойта.
  • План: кто делает и к какому сроку.

Оповещения настраивайте так, чтобы не тонуть в шуме: критичные события сразу в рабочий канал, средние - в ежедневный дайджест, а повторы по одному и тому же компоненту объединяйте.

Решение фиксируйте по ходу работы: обновить зависимость, заменить компонент (если обновления нет) или принять риск с понятной причиной и сроком пересмотра. Если уязвимость есть в библиотеке, но модуль не используется, это повод поставить низкий приоритет, но оставить запись для аудита.

SBOM в закупках: требования к поставщикам и приемка

Если SBOM появляется только после инцидента, он не помогает. В закупках его стоит требовать так же явно, как инструкции и условия поддержки. Тогда у команды ИБ и эксплуатации есть опора: что именно поставлено, из чего состоит и как это будет обновляться.

В тендерной документации и договорных приложениях удобно закрепить несколько пунктов:

  • SBOM обязателен для поставляемого ПО и для каждого обновления (патч, минорная и мажорная версия).
  • Формат на выбор: CycloneDX или SPDX, плюс указание версии схемы.
  • Минимальные поля: название компонента, версия, поставщик/источник, тип (библиотека, образ, пакет), лицензия, хеши, зависимости.
  • Правила для коммерческих модулей: что можно скрыть и как это помечается (например, компонент без публичного имени, но с уникальным идентификатором).
  • Сроки: SBOM передается вместе с поставкой и хранится весь срок поддержки.

На приемке важно не просто получить файл, а проверить, что он соответствует поставке. Обычно достаточно трех проверок: SBOM есть, он относится к нужной версии, и ему можно доверять.

Короткий набор контрольных шагов:

  • Сверить версию продукта и сборки с метаданными SBOM.
  • Проверить целостность (подпись или хеш) и неизменность после передачи.
  • Убедиться, что перечислены ключевые зависимости, а не только верхний уровень.
  • Отметить закрытые компоненты как отдельные позиции, чтобы их можно было учитывать в рисках.
  • Зафиксировать SBOM как артефакт приемки (как акт и комплект поставки).

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

Пример: как SBOM ускоряет реакцию на новую уязвимость

Представьте: утром выходит сообщение о критической уязвимости в популярной библиотеке, например в JSON-парсере. В новости часто пишут одно: "обновитесь до версии X.Y.Z". Но главный вопрос для вашей команды другой: затронуты ли ваши продукты и где именно.

Если у вас настроен SBOM в CI/CD, вы не начинаете с ручного поиска по репозиториям. Вы открываете последний SBOM для каждой сборки и за минуту находите компонент по названию и версии. В инструментах вроде Dependency-Track это обычно еще быстрее: он показывает, в каких приложениях и сборках библиотека встречается, и подсвечивает уязвимые версии.

Дальше важно не паниковать и правильно расставить приоритеты. Одна и та же библиотека может:

  • реально выполняться в проде (прямой импорт, код вызывается)
  • быть транзитивной зависимостью, но не использоваться по факту
  • лежать в dev/test инструментах и не попадать в прод-артефакт
  • присутствовать в образе или дистрибутиве, но не загружаться

В первые сутки помогает простой план:

  • подтвердить, какие сборки уязвимы (по SBOM и версиям)
  • понять экспозицию: интернет-доступ, затронутые сервисы, критичность данных
  • выпустить патч или обновить зависимость и пересобрать артефакты
  • если патча нет, включить временные меры (конфиг, WAF-правило, отключение функции)
  • сообщить владельцам систем и зафиксировать статус для руководства

После инцидента SBOM тоже помогает. Сохраните, какие SBOM использовались для проверки, и обновите правила генерации: чтобы SBOM был привязан к конкретной сборке, хранился с подписью или хешем и всегда включал транзитивные зависимости. Тогда следующий срочный CVE будет не недельной охотой, а часами понятной работы.

Частые ошибки и ловушки при внедрении SBOM

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

Что обычно ломает внедрение

  • SBOM не привязан к версии и сборке. Если у вас нет идентификатора релиза (тег, номер сборки, хэш), то при инциденте вы тратите время на угадывание: какой именно SBOM правильный.
  • Неполный состав зависимостей. Часто в отчет попадают только прямые библиотеки, а транзитивные остаются за кадром. При появлении новой уязвимости кажется, что вас это не касается, пока сканер не находит компонент в глубине дерева.
  • Разнобой в именах и координатах компонентов. Одна команда пишет "log4j", другая "org.apache.logging.log4j:log4j-core". Поиск, дедупликация и сопоставление CVE начинают давать хаос.
  • Слепое доверие SBOM от поставщика. Даже если документ пришел вместе с продуктом, без приемочных проверок легко получить устаревший файл или SBOM, собранный с другими флагами и репозиториями.
  • Слишком жесткие правила с первого дня. Если сразу блокировать сборки по любому предупреждению, команды начнут обходить процесс или отключать генерацию.

Хорошая стартовая тактика для SBOM в CI/CD: сначала сделать покрытие и сопоставимость, а потом включать ограничения постепенно. Например, в первый месяц фиксируйте SBOM для каждого релиза и проверяйте полноту, а блокировки вводите только для критических уязвимостей и только для новых изменений. Это снижает сопротивление и дает быстрый эффект при разборе инцидентов.

Быстрый чеклист перед запуском в прод

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

Проверьте ключевые пункты:

  • На каждый релиз есть SBOM, и он доступен тем, кто будет разбирать инциденты: безопасность, DevOps, владельцы продукта, поддержка.
  • В составе SBOM есть точные версии и уникальные идентификаторы компонентов (например, Package URL или CPE там, где уместно), чтобы не гадать, какая именно библиотека попала в сборку.
  • Учтены транзитивные зависимости, а если вы деплоите контейнеры, то добавлены компоненты образа (пакеты ОС, базовый образ). Иначе часть рисков останется за кадром.
  • SBOM привязан к конкретной сборке: build-id, commit или тегу, и хранится неизменно. После релиза документ не перезаписывают, а выпускают новый для следующей версии.
  • Есть понятный процесс реакции: кто смотрит алерты, кто принимает решение (обновить, компенсировать, принять риск), какие сроки для критичных уязвимостей и как фиксируется итог.

Отдельно про закупки и подрядчиков: требования к SBOM должны быть записаны заранее, а приемка включать проверку формата, полноты и соответствия поставляемому артефакту. Тогда в момент новой уязвимости вы не будете собирать состав ПО по крупицам, а быстро определите затронутые релизы и план действий.

Следующие шаги: пилот, стандарты и поддержка внедрения

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

Хороший пилот для SBOM в CI/CD выглядит так:

  • определить владельца процесса (разработка + ИБ) и SLA на разбор алертов
  • зафиксировать точки генерации SBOM (сборка, релиз, контейнер)
  • настроить правило: релиз без SBOM не проходит
  • протестировать кейс: новая CVE в популярной библиотеке и время реакции
  • подготовить отчет: что сломалось, что мешало, что автоматизировать

Дальше важнее всего согласовать единые правила, иначе SBOM превратится в набор файлов, которым никто не доверяет. Закрепите стандарт на уровне компании и сделайте его частью приемки.

В стандарте обычно достаточно договориться о следующем:

  • формат и профиль (CycloneDX или SPDX), обязательные поля и идентификаторы
  • где хранится SBOM, кто имеет доступ, сколько хранить
  • как подтверждать целостность (подпись, контрольные суммы, неизменяемые артефакты)
  • что считать приемлемым риском и когда блокировать релиз

Параллельно подготовьте шаблон требований для закупок и договоров на ПО: срок предоставления SBOM, обновления при изменениях, правила для транзитивных зависимостей и порядок реакции на новые уязвимости.

Не пропускайте обучение: разработчикам важно понимать, как чинить зависимости, закупкам - как принимать поставку, эксплуатации - как использовать SBOM при инцидентах.

Если внутри не хватает рук для настройки пайплайнов, хранилищ артефактов, политики безопасности и инфраструктуры, имеет смысл подключить системного интегратора. Например, GSE.kz (gse.kz) как производитель и системный интегратор в Казахстане ведет комплексные ИТ-проекты и может помочь выстроить процессы, инфраструктуру и поддержку, включая круглосуточный сервис.

Частые вопросы

Что такое SBOM простыми словами и зачем он нужен?

SBOM — это документ со списком компонентов, которые реально попали в поставку: библиотеки, модули, пакеты и их версии. Он нужен, чтобы быстро ответить на вопрос «затронуты ли мы уязвимостью в компоненте X» без ручного поиска по репозиториям и логам.

Что выбрать: CycloneDX или SPDX?

Начните с одного формата и одной цели. Для ежедневной работы с уязвимостями и графом зависимостей обычно проще стартовать с CycloneDX, а для договоров, лицензий и обмена документами между организациями чаще выбирают SPDX.

Какие поля в SBOM должны быть обязательно?

Минимально полезный SBOM содержит название компонента, точную версию, уникальный идентификатор (например, purl), лицензию, контрольные суммы и источник получения. Если добавить связи зависимостей, становится понятнее, почему компонент оказался в сборке и является ли он транзитивным.

Почему SBOM нельзя строить только по package.json или pom.xml?

Потому что манифест показывает «что вы хотите установить», а не «что реально установилось и ушло в прод». Lock-файлы фиксируют точные версии, включая транзитивные зависимости, и делают SBOM пригодным для расследований и сопоставления с уязвимостями.

Как правильно встроить SBOM в CI/CD, чтобы он соответствовал реальному релизу?

Генерируйте SBOM как часть сборки, затем сохраняйте его как артефакт конкретного билда и прикладывайте к релизу рядом с бинарником или образом. Важно, чтобы SBOM пересоздавался на каждый релиз и был однозначно привязан к версии, build-id и commit/tag.

Почему сканер находит уязвимость, а в SBOM ее «не видно»?

Обычно причина в том, что в SBOM не попали транзитивные зависимости, зависимости из lock-файлов или пакеты ОС внутри контейнера. Еще частая проблема — разные правила именования компонентов, из-за чего совпадения по CVE «теряются» и выглядят как разные пакеты.

Нужно ли делать SBOM для контейнеров, и что туда включать?

Для контейнеров нужно учитывать два слоя: ваше приложение и содержимое образа (базовый образ и пакеты ОС). Практично хранить рядом два SBOM — на приложение и на контейнер — чтобы понимать, где именно сидит риск: в коде, в зависимостях или в системных пакетах.

Как хранить SBOM, чтобы ему можно было доверять?

Храните SBOM там же, где живут релизные артефакты, и запрещайте ручную подмену: публиковать должен CI. Минимальная защита — SHA-256 и проверка при публикации и скачивании; лучше дополнительно подписывать SBOM или весь комплект релиза и фиксировать, к какой сборке он относится.

Как использовать Dependency-Track с SBOM на практике?

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

Как правильно требовать SBOM от поставщиков и проверять его на приемке?

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

Запрос

Пришлите спецификацию. Остальное сделаем мы

Одна позиция или объект под ключ, любое направление. Вашу поставку от первого звонка до акта ввода ведёт один менеджер.

Расчёт бесплатноДокументы для госзакупок и тендеровОдин договор и одна гарантия