Этот репозиторий предоставляет руководство и примеры для генерации 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-npmcyclonedx-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/outputCycloneDX 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.jsonstages:
- 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.jsonstages:
- sbom
sbom_generation:
stage: sbom
script:
- cyclonedx-py environment --short-PURLs --of json "$VIRTUAL_ENV" -o sbom.json
artifacts:
paths:
- sbom.jsonstages:
- 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.jsonstages:
- 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...
- Сделать нормальную разметку
- Сделать перевод
- Разбить по папкам