🫡 SBOM: что это и для чего?
Software Bill of Material - файл в формате JSON или XML, который включает в себя инвентаризационный список всех компонентов (пакетов, библиотек), используемых в разрабатываемом приложении или необходимых для его работы.
В components SBOM указывается автор пакета, purl (Package URL), лицензия, хэш библиотеки, CPE (Common Platform Enumeration) и другие компоненты. Используется CycloneDX, SPDX (Software Packet Data Exchange) и SWID (Software Identification). Алгоритм прикреплен к посту.
SBOM позволяет решить две связанные задачи:
- Инвентаризировать все использованные в продукте (исходном коде, артефакте, операционной системе) компоненты
- Автоматизировать анализ их безопасности с помощью инструментов SCA (Software Composition Analysis)
Политики безопасности могут включать в себя проверку этих компонентов на уязвимости и на лицензионную чистоту, а также на дату публикации, имя автора и другие элементы.
Состоит из:
- Метаданные самого файла SBOM: спецификация, уникальный номер, метка времени
- Перечень компонентов
- Описание источника SBOM (блок externalReferences)
- Описание связей между компонентами (блок dependencies) - содержит название пакета из исходного кода и его зависимости, то есть пакеты, которые необходимы ему для работы. С помощью данных dependencies и названий библиотек можно построить граф зависимостей, в том числе транзитивных.
Как это выглядит //SPDX //CycloneDX
{
"spdxVersion": "SPDX-2.3",
"dataLicense": "CC0-1.0",
"SPDXID": "SPDXRef-DOCUMENT",
"name": "example-project-1.0.0",
"documentNamespace": "http://spdx.org/spdxdocs/example-project-1.0.0-abc123",
"creationInfo": {
"created": "2025-06-24T10:00:00Z",
"creators": [
"Tool: spdx-sbom-generator-0.0.1",
"Organization: ExampleOrg"
],
"licenseListVersion": "3.23"
},
"packages": [
{
"name": "lodash",
"SPDXID": "SPDXRef-Package-Lodash",
"versionInfo": "4.17.21",
"downloadLocation": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"filesAnalyzed": false,
"licenseConcluded": "MIT",
"licenseDeclared": "MIT",
"supplier": "Organization: Lodash Team",
"originator": "Person: John-David Dalton",
"externalRefs": [
{
"referenceCategory": "PACKAGE-MANAGER",
"referenceType": "purl",
"referenceLocator": "pkg:npm/lodash@4.17.21"
},
{
"referenceCategory": "SECURITY",
"referenceType": "cpe23Type",
"referenceLocator": "cpe:2.3:a:lodash:lodash:4.17.21:*:*:*:*:*:*:*"
}
]
}
...
]
}
{
"bomFormat": "CycloneDX",
"specVersion": "1.6",
"version": 1,
"metadata": {
"timestamp": "2025-06-24T10:00:00Z",
"tools": [
{
"vendor": "CycloneDX",
"name": "cyclonedx-cli",
"version": "0.24.0"
}
],
"component": {
"type": "application",
"name": "example-project",
"version": "1.0.0",
"purl": "pkg:npm/example-project@1.0.0"
}
},
"components": [
{
"type": "library",
"name": "lodash",
"version": "4.17.21",
"purl": "pkg:npm/lodash@4.17.21",
"hashes": [
{
"alg": "SHA-256",
"content": "e3b0c44298fc1c149afbf4c8996fb924..."
}
],
"licenses": [
{
"license": {
"id": "MIT"
}
}
]
...
}
]
}
Итого: SBOM нужен для контроля компонент и может использоваться как проверка на подмену зависимостей или для golden-repo. Это то, что позволяет контролировать окружение и сами сборки, что дает нам возможность управления и построение Vulnerability Management.
Далее в постах рассмотрим также как работает например Cdxgen, Syft и тд.
#toolchain #sbom
