コンテンツにスキップ

CycloneDX形式のインポート仕様#

OWASP の CycloneDX(v1.x)形式の SBOM について、FutureVuls がどのフィールドをどう解釈してインポートするかを説明します。

コンポーネントの種別判定や OS・依存ライブラリの取り込みといった形式に依存しない共通仕様は「SBOMのインポート仕様」を参照してください。本ページでは CycloneDX 固有のフィールド対応 を説明します。

FutureVuls は、CycloneDX の以下の情報を読み取ります。

metadata#

  "metadata": {
    "timestamp": "2023-08-08T08:22:10+00:00",
    "tools": [
      {
        "vendor": "aquasecurity",
        "name": "trivy",
        "version": "0.43.0"
      }
    ],
    "component": {
      "bom-ref": "__ROOT_COMPONENT_REF__",
      "type": "container",
      "name": "ami-xxxxxxxxxxxxxxxxx"
    }
  }
  • tools により生成されたツールを検知します。
  • componenttype: operating-system の場合、OS 情報として取り入れるケースがあります。

components#

  "components": [
    {
      "bom-ref": "__OPERATING_SYSTEM_COMPONENT_REF__",
      "type": "operating-system",
      "name": "amazon",
      "version": "2023"
    },
    {
      "bom-ref": "pkg:rpm/amazon/bash@4.2.46-34.amzn2023?arch=x86_64",
      "type": "library",
      "name": "bash",
      "version": "4.2.46-34.amzn2023",
      "purl": "pkg:rpm/amazon/bash@4.2.46-34.amzn2023?arch=x86_64"
    },
    {
      "bom-ref": "__APPLICATION_COMPONENT_REF__",
      "type": "application",
      "name": "opt/vuls-saas/vuls",
      "properties": [
        {
          "name": "aquasecurity:trivy:Type",
          "value": "gobinary"
        }
      ]
    },
    {
      "bom-ref": "pkg:golang/github.com/vulsio/go-exploitdb@v0.4.2",
      "type": "library",
      "name": "github.com/vulsio/go-exploitdb",
      "version": "v0.4.2",
      "purl": "pkg:golang/github.com/vulsio/go-exploitdb@v0.4.2"
    },
    ...
  ]

CycloneDX のソフトウェア一覧を表す components は、type をヒントに以下のように取り込みます。

  • type: operating-system の場合、OS 情報として取り入れます。
  • type: library の場合、OS パッケージ、もしくは言語ライブラリ情報として取り入れます。
  • type: application の場合、アプリケーション情報として取り入れます。(例外あり)
  • type: firmwaretype: device なども取り込み対象です。

各コンポーネントの実際のソフトウェア種別(os / library / private)は、purlcpe の情報をもとに判定されます。判定ルールは「コンポーネントの種別判定」を参照してください。 また、licenses に記載されたライセンス情報も取り込みます。

dependencies#

  "dependencies": [
    {
      "ref": "__ROOT_COMPONENT_REF__",
      "dependsOn": [
        "__OPERATING_SYSTEM_COMPONENT_REF__",
        "__APPLICATION_COMPONENT_REF__"
      ]
    },
    {
      "ref": "__OPERATING_SYSTEM_COMPONENT_REF__",
      "dependsOn": [
        ...
        "pkg:rpm/amazon/bash@4.2.46-34.amzn2023?arch=x86_64",
        ...
      ]
    },
    {
      "ref": "__APPLICATION_COMPONENT_REF__",
      "dependsOn": [
        ...
        "pkg:golang/github.com/vulsio/go-exploitdb@v0.4.2",
        ...
      ]
    },
    ...
  ]
  • ref が OS の場合、OS が依存する dependsOncomponent は OS パッケージとして取り入れます。
  • ref がアプリケーションの場合、アプリケーションが依存する dependsOncomponent は依存ライブラリとして取り入れます。
  • dependsOn が別の dependency を参照する場合、それを再帰的に取り入れます。
  • dependencies に存在しない components は、PURL を参照し、OS パッケージと依存ライブラリに分けて取り入れます。