CycloneDX

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

CycloneDX

OWASPのCycloneDX(v1.x)は、以下の情報を取り入れます。

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: operating-systemの場合、OS情報として取り入れます。
  • type: libraryの場合、OSパッケージ、もしくは言語ライブラリ情報として取り入れます。
  • type: applicationの場合、アプリケーション情報として取り入れます。(例外あり)

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