SPDX

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パッケージと依存ライブラリに分けて取り入れます。