コンテンツにスキップ

SPDX仕様のSBOMインポート#

FutureVuls における、SPDX 仕様の SBOM インポート機能について詳細を説明します。

SPDX#

Linux Foundation の SPDX(v2.x)は、以下の情報を取り入れます。

creationInfo#

  "creationInfo": {
    "creators": [
      "Organization: aquasecurity",
      "Tool: trivy-0.43.0"
    ],
    "created": "2023-08-08T08:01:33Z"
  }

creators により生成されたツールを検知します。

packages#

  "packages": [
    {
      "name": "ami-xxxxxxxxxxxxxxxxx",
      "SPDXID": "SPDXRef-Vm-888578fefc6f6735",
      "primaryPackagePurpose": "SOURCE"
    },
    {
      "name": "amazon",
      "SPDXID": "SPDXRef-OperatingSystem-541077021f563a3e",
      "versionInfo": "2023",
      "primaryPackagePurpose": "OPERATING-SYSTEM"
    },
    {
      "name": "bash",
      "SPDXID": "SPDXRef-Package-2a97fe8298d3deed",
      "versionInfo": "4.2.46-34.amzn2023",
      "externalRefs": [
        {
          "referenceCategory": "PACKAGE-MANAGER",
          "referenceType": "purl",
          "referenceLocator": "pkg:rpm/amazon/bash@4.2.46-34.amzn2023?arch=x86_64"
        }
      ],
      "primaryPackagePurpose": "LIBRARY"
    },
    {
      "name": "opt/vuls-saas/vuls",
      "SPDXID": "SPDXRef-Application-d72df2bc81701c51",
      "attributionTexts": [
        "Type: gobinary"
      ],
      "primaryPackagePurpose": "APPLICATION"
    },
    {
      "name": "github.com/vulsio/go-exploitdb",
      "SPDXID": "SPDXRef-Package-59634f967256ffb1",
      "versionInfo": "v0.4.2",
      "externalRefs": [
        {
          "referenceCategory": "PACKAGE-MANAGER",
          "referenceType": "purl",
          "referenceLocator": "pkg:golang/github.com/vulsio/go-exploitdb@v0.4.2"
        }
      ],
      "primaryPackagePurpose": "LIBRARY"
    },
    ...
  ]

SPDX のソフトウェア一覧を表す packages には種類を表す必須項目がないため、SPDXID により種類を判別します。 (e.g. "SPDXID": "SPDXRef-Package-xxxxxxxx")

  • OperatingSystem の場合、OS 情報として取り入れます。
  • Package の場合、OS パッケージ、もしくは言語ライブラリ情報として取り入れます。
  • Application の場合、アプリケーション情報として取り入れます。

relationships#

  "relationships": [
    {
      "spdxElementId": "SPDXRef-DOCUMENT",
      "relatedSpdxElement": "SPDXRef-Vm-888578fefc6f6735",
      "relationshipType": "DESCRIBES"
    },
    {
      "spdxElementId": "SPDXRef-Vm-888578fefc6f6735",
      "relatedSpdxElement": "SPDXRef-OperatingSystem-541077021f563a3e",
      "relationshipType": "CONTAINS"
    },
    {
      "spdxElementId": "SPDXRef-OperatingSystem-541077021f563a3e",
      "relatedSpdxElement": "SPDXRef-Package-2a97fe8298d3deed",
      "relationshipType": "CONTAINS"
    },
    {
      "spdxElementId": "SPDXRef-Vm-888578fefc6f6735",
      "relatedSpdxElement": "SPDXRef-Application-d72df2bc81701c51",
      "relationshipType": "CONTAINS"
    },
    {
      "spdxElementId": "SPDXRef-Application-d72df2bc81701c51",
      "relatedSpdxElement": "SPDXRef-Package-59634f967256ffb1",
      "relationshipType": "CONTAINS"
    },
    ...
  ]
  • relationshipType: DEPENDS_ONrelationshipType: CONTAINS の場合のみ、依存関係として取り入れます。
  • OS が Package を含んだり(CONTAINS)、依存する(DEPENDS_ON)場合は、OS パッケージとして取り入れます。
  • アプリケーションが Package を含んだり(CONTAINS)、依存する(DEPENDS_ON)場合は、依存ライブラリとして取り入れます。
  • ネストされた依存関係は、再帰的に取り入れます。
  • relationships に存在しない SPDXID は、PURL を参照し、OS パッケージと依存ライブラリに分けて取り入れます。