SBOM: что это и для чего?
30 сентября 2025 г.·169 views

🫡 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

#toolchain#sbom
Открыть в Telegram