Этот репозиторий предоставляет руководство и примеры для генерации Software Bill of Materials (SBOM) для различных языков программирования и менеджеров пакетов.
CycloneDX - это легковесный стандарт SBOM, предназначенный для использования в контексте безопасности приложений и анализа компонентов цепочки поставок. В этом руководстве показано, как использовать плагины CycloneDX для генерации SBOM в различных программных средах.
⚠️ Обратите внимание, что некоторые инструменты анализа SBOM файлов имеют привязку к конкретной версии спецификации CycloneDX (сейчас рекомендуем пробовать версию 1.4--spec-version 1.4
- Создайте виртуальное окружение в корневой директории вашего проекта:
python -m venv venv
-
Активируйте виртуальное окружение:
-
Установите
cyclonedx-bom
в виртуальное окружение:
pip install cyclonedx-py
Если не хотите заморачиваться, то ставите cyclonedx-py
в свою окружение, а уже потом запускать сканирование на venv
- Добавьте плагин CycloneDX Maven в ваш
pom.xml
:
<plugin>
<groupId>org.cyclonedx</groupId>
<artifactId>cyclonedx-maven-plugin</artifactId>
<version>2.7.11</version>
<executions>
<execution>
<goals>
<goal>makeAggregateBom</goal>
</goals>
</execution>
</executions>
</plugin>
Либо можете установить его отдельно используя:
mvn org.apache.maven.plugins:maven-dependency-plugin:2.6:get -Dartifact=org.cyclonedx:cyclonedx-maven-plugin:2.7.11
- Установите CycloneDX для .NET:
dotnet tool install --ignore-failed-sources --global CycloneDX -v n
- Установите
cyclonedx-gomod
с помощью командыgo install
:
go install github.com/CycloneDX/cyclonedx-gomod/cmd/cyclonedx-gomod@latest
- Убедитесь, что
GOPATH/bin
добавлен в переменную средыPATH
, чтобы вы могли запускатьcyclonedx-gomod
из любой директории:
export PATH=$PATH:$(go env GOPATH)/bin
- Установите CycloneDX для npm:
npm install --global @cyclonedx/cyclonedx-npm
cyclonedx-py
поддерживает несколько команд для генерации SBOM. Ниже представлены основные команды и примеры их использования для генерации SBOM в формате JSON для pip.
-
Убедитесь, что виртуальное окружение активировано:
-
Выполните команду для генерации SBOM:
cyclonedx-py environment --short-PURLs --of json "$VIRTUAL_ENV" -o sbom.json # Либо через ".../some/path/.venv"
cyclonedx-py requirements --short-PURLs --of json -o sbom.json .../path/to/requirements.txt
- Сгенерируйте SBOM:
mvn -f .../path/to/pom.xml org.cyclonedx:cyclonedx-maven-plugin:makeAggregateBom -DoutputFormat=json -DoutputName=result_maven -DoutputDirectory=.../path/to/output
CycloneDX CLI
поддерживает несколько команд для генерации SBOM. Ниже представлены основные команды и примеры их использования для генерации SBOM в формате JSON.
Эта команда используется для генерации SBOM для проекта .NET. Результат сохраняется в формате JSON.
- Перейдите в корневую директорию вашего проекта:
cd /path/to/your/dotnet/project
- Выполните команду для генерации SBOM:
dotnet CycloneDX /path/to/project -o /output/path -fn sbom.json -j -rs
-rs
- для использования с одним файлом проекта, он будет рекурсивно сканировать ссылки на проект в предоставленном файле проекта
cyclonedx-gomod
поддерживает несколько команд для генерации SBOM. Ниже представлены основные команды и примеры их использования для генерации SBOM в формате JSON.
Эта команда используется для генерации SBOM для приложений. Результат сохраняется в формате JSON.
- Перейдите в корневую директорию вашего проекта:
cd /path/to/your/go/project
- Выполните команду для генерации SBOM:
cyclonedx-gomod app -output sbom.json -json -licenses
Эта команда используется для генерации SBOM для бинарных файлов. Результат сохраняется в формате JSON.
- Перейдите в директорию с бинарными файлами вашего проекта:
cd /path/to/your/go/project/bin
- Выполните команду для генерации SBOM:
cyclonedx-gomod bin -output sbom.json -json -licenses
Эта команда используется для генерации SBOM для модулей Go, определенных в файле go.mod
. Результат сохраняется в формате JSON.
- Перейдите в корневую директорию вашего проекта, где находится файл
go.mod
:
cd /path/to/your/go/project
- Выполните команду для генерации SBOM:
cyclonedx-gomod mod -output sbom.json -json -licenses
@cyclonedx/cyclonedx-npm
поддерживает несколько команд для генерации SBOM. Ниже представлены основные команды и примеры их использования для генерации SBOM в формате JSON.
Эта команда используется для генерации SBOM для проекта npm. Результат сохраняется в формате JSON.
- Перейдите в корневую директорию вашего проекта:
cd /path/to/your/npm/project
Либо далее укажите прямой путь к манифесту (package-manifest) package.json
- Выполните команду для генерации SBOM:
cyclonedx-npm --output sbom.json --format json --short-PURLs package.json
Не забываем заранее всё установить в docker или туда, где ваш runner
Добавьте следующий блок в ваш .gitlab-ci.yml
:
stages:
- sbom
sbom_generation:
stage: sbom
script:
- go install github.com/CycloneDX/cyclonedx-gomod/cmd/cyclonedx-gomod@latest
- export PATH=$PATH:$(go env GOPATH)/bin
- cyclonedx-gomod mod -o sbom.json -f json
artifacts:
paths:
- sbom.json
Добавьте следующий блок в ваш .gitlab-ci.yml
:
stages:
- sbom
sbom_generation:
stage: sbom
script:
- npm install -g @cyclonedx/cyclonedx-npm
- npm config set registry <$REG> # Если у вас есть свой реджистри
- cyclonedx-npm --output-file sbom.json --ignore-npm-errors
artifacts:
paths:
- sbom.json
stages:
- sbom
sbom_generation:
stage: sbom
script:
- dotnet tool install --global CycloneDX
- export PATH=$PATH:~/.dotnet/tools
- dotnet CycloneDX /path/to/project -o /output/path -fn sbom.json -j -rs
artifacts:
paths:
- sbom.json
stages:
- sbom
sbom_generation:
stage: sbom
script:
- cyclonedx-py environment --short-PURLs --of json "$VIRTUAL_ENV" -o sbom.json
artifacts:
paths:
- sbom.json
stages:
- sbom
sbom_generation:
stage: sbom
script:
- mvn -f .../path/to/pom.xml org.cyclonedx:cyclonedx-maven-plugin:makeAggregateBom -DoutputFormat=json -DoutputName=result_maven -DoutputDirectory=.../path/to/output
artifacts:
paths:
- sbom.json
stages:
- sbom
cdx-sbom:
stage: sbom
allow_failure: true
variables:
GIT_STRATEGY: clone
# Задаём версию формата отчёта, большинство инструментов поддерживают 1.4
CDX_SPEC_VERSION: 1.4
REPORT_NAME: "${CI_PROJECT_NAME}_CDXV_${CDX_SPEC_VERSION}.json"
image:
name: ghcr.io/cyclonedx/cdxgen:latest
entrypoint: [""]
script:
- |
node /opt/cdxgen/bin/cdxgen.js \
-t java \
--spec-version "${CDX_SPEC_VERSION}" \
-r . \
-o "${REPORT_NAME}"
artifacts:
when: always
paths:
- "${REPORT_NAME}"
- Добавить С++
- Добавить PHP
- Добавить Kotlin (Gradle)
- Ruby, etc...
- Сделать нормальную разметку
- Сделать перевод
- Разбить по папкам