導入
- AWSのInspectorでSBOM Exportしてみた 前編の続きです。
- Amazon Athenaを用いて、AWS InspectorでExportしたSBOMファイルを分析したいと思います。
Athenaでの分析手順
SBOMフォーマットの確認
- 前回の記事では
CyclonedX 1.4 SBOM フォーマット
でSBOMファイルをExportしています。 -
CyclonedX 1.4 SBOM フォーマット
はメタデータ、コンポーネント、脆弱性情報を含んでいます。
{
"bomFormat": "CycloneDX",
"specVersion": "1.4",
"version": 1,
"metadata": {
"timestamp": "2023-06-02T01:17:46Z",
"component": null,
"properties": [
{
"name": "imageId",
"value": "sha256:c8ee97f7052776ef223080741f61fcdf6a3a9107810ea9649f904aa4269fdac6"
},
{
"name": "architecture",
"value": "arm64"
},
{
"name": "accountId",
"value": "111122223333"
},
{
"name": "resourceType",
"value": "AWS_ECR_CONTAINER_IMAGE"
}
]
},
"components": [
{
"type": "library",
"name": "pip",
"purl": "pkg:pypi/pip@22.0.4?path=usr/local/lib/python3.8/site-packages/pip-22.0.4.dist-info/METADATA",
"bom-ref": "98dc550d1e9a0b24161daaa0d535c699"
},
{
"type": "application",
"name": "libss2",
"purl": "pkg:dpkg/libss2@1.44.5-1+deb10u3?arch=ARM64&epoch=0&upstream=libss2-1.44.5-1+deb10u3.src.dpkg",
"bom-ref": "2f4d199d4ef9e2ae639b4f8d04a813a2"
},
{
"type": "application",
"name": "liblz4-1",
"purl": "pkg:dpkg/liblz4-1@1.8.3-1+deb10u1?arch=ARM64&epoch=0&upstream=liblz4-1-1.8.3-1+deb10u1.src.dpkg",
"bom-ref": "9a6be8907ead891b070e60f5a7b7aa9a"
},
{
"type": "application",
"name": "mawk",
"purl": "pkg:dpkg/mawk@1.3.3-17+b3?arch=ARM64&epoch=0&upstream=mawk-1.3.3-17+b3.src.dpkg",
"bom-ref": "c2015852a729f97fde924e62a16f78a5"
},
{
"type": "application",
"name": "libgmp10",
"purl": "pkg:dpkg/libgmp10@6.1.2+dfsg-4+deb10u1?arch=ARM64&epoch=2&upstream=libgmp10-6.1.2+dfsg-4+deb10u1.src.dpkg",
"bom-ref": "52907290f5beef00dff8da77901b1085"
},
{
"type": "application",
"name": "ncurses-bin",
"purl": "pkg:dpkg/ncurses-bin@6.1+20181013-2+deb10u3?arch=ARM64&epoch=0&upstream=ncurses-bin-6.1+20181013-2+deb10u3.src.dpkg",
"bom-ref": "cd20cfb9ebeeadba3809764376f43bce"
}
],
"vulnerabilities": [
{
"id": "CVE-2022-40897",
"affects": [
{
"ref": "a74a4862cc654a2520ec56da0c81cdb3"
},
{
"ref": "0119eb286405d780dc437e7dbf2f9d9d"
}
]
}
]
}
(Amazon Inspector の CyclonedX 1.4 SBOM フォーマットの例からフォーマット例を抜粋)
Athenaテーブルの作成
- AWSコンソールにログインし、Athenaサービス画面を開きます。
-
CyclonedX 1.4 SBOM フォーマット
に沿う形式でAthenaテーブルを作成します。1
CREATE EXTERNAL TABLE IF NOT EXISTS `sbom_cyclone` (
bomFormat string,
specVersion string,
version int,
`metadata` struct<
timestamp:string,
component:struct<
type:string,
name:string,
version:string
>,
properties: array<
struct<
name:string,
value:string
>
>
>,
components array<
struct<
type:string,
name:string,
purl:string,
version:string
>
>,
vulnerabilities array<
struct<
id:string,
affects: array<
struct<
ref:string
>
>
>
>
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION 's3://[bucket]/[prefix]/';
検索クエリの実行
- コンポーネントの一覧化
SELECT
component.type AS type,
component.name AS name,
component.purl AS purl,
component.version AS version
FROM sbom_cyclone, UNNEST(components) AS t (component);
- CVEの一覧化2
SELECT
vulnerability.id AS CVE
FROM sbom_cyclone, UNNEST(vulnerabilities) AS t (vulnerability);
注意事項
- 本記事は万全を期して作成していますが、お気づきの点がありましたら、ご連絡よろしくお願いします。
- なお、本記事の内容を利用した結果及び影響について、筆者は一切の責任を負いませんので、予めご了承ください。
-
Athenaのサービス仕様上、カラムにハイフンを指定することができなかったため、本記事では
bom-ref
はテーブルから除外しています。bom-ref
の値も取得したい場合、S3配置をトリガにJSON内のbom-ref
をbom_ref
に加工するLambda関数を実行した上で、テーブル作成時のカラムにbom_ref
を指定する等の工夫が必要になりそうです。 ↩ ↩2 -
脆弱性の影響を受けるコンポーネントを特定できるよう、
vulnerabilities
のaffects
配列内にbom-ref
の値が記載されます。脆弱性情報の確認はInspectorコンソールで充足できるとは思いつつ、Athena上からも分析したい場合は注釈1を参考にした実装が必要かと思います。 ↩