yuj1osm's tech blog

クラウドやセキュリティなど

Amazon InspectorでSBOMエクスポートができるようになりました

Amazon InspectorでSBOMエクスポートができるようになったので、検証してみました。

aws.amazon.com

SBOM(Software Bill of Materials、ソフトウェア部品表)とは、ソフトウェアを構成するコンポーネントや互いの依存関係、ライセンスデータなどをリスト化した一覧表であり、ソフトウェアサプライチェーンリスク管理等に利用されます。

アップデート概要

  • Amazon Inspectorで監視されているすべてのリソースのSBOMを、CycloneDxやSPDXなどの業界標準形式でエクスポート可能
  • ソフトウェアパッケージに関する詳細と、関連する脆弱性情報が含まれている

検証

事前準備

Inspectorのメニューに「Export SBOMs」があります。

SBOMに脆弱性情報を含ませるため、マーケットプレイスから古いAMIを取得し、EC2インスタンスを起動します。

202個の脆弱性が検知されました。

出力先のS3バケットとKMSキーを用意します。
S3バケットとKMSキーのポリシーが適切に設定されていないとエラーになるので、以下のドキュメントを参考に設定します。

docs.aws.amazon.com

バケットポリシー

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "allow-inspector",
            "Effect": "Allow",
            "Principal": {
                "Service": "inspector2.amazonaws.com"
            },
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:AbortMultipartUpload"
            ],
            "Resource": "arn:aws:s3:::<S3バケット名>/*",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "<AWSアカウントID>"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:inspector2:<リージョン>:<AWSアカウントID>:report/*"
                }
            }
        }
    ]
}
                

KMSキーポリシー

{
    "Sid": "Allow Amazon Inspector to use the key",
    "Effect": "Allow",
    "Principal": {
        "Service": "inspector2.amazonaws.com"
    },
    "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey*"
    ],
    "Resource": "*",
    "Condition": {
        "StringEquals": {
            "aws:SourceAccount": "<AWSアカウントID>"
        },
        "ArnLike": {
            "aws:SourceArn": "arn:aws:inspector2:<リージョン>:<AWSアカウントID>:report/*"
        }
    }
}        

SBOMをエクスポートする

「Export SBOMs」に戻り、エクスポートの設定を行います。
「Add filter」でエクスポート対象を選択することができます。

利用できるフィルターは以下ドキュメントで確認できます。

docs.aws.amazon.com

今回はタグを使って、先ほどのEC2インスタンスを選択します。

事前準備で作成したS3バケットとKMSキーを選択し、「Export」を押下します。

エクスポートが始まります。

数分後にエクスポートが完了します。

S3バケットにSBOMが出力されました。

ファイルを確認します。
EC2インスタンスの情報から、ソフトウェア情報と検知された脆弱性情報が分かります。

{
    "bomFormat": "CycloneDX",
    "specVersion": "1.4",
    "version": 1,
    "metadata": {
        "timestamp": "2023-06-25T02:34:37Z",
        "component": {
            "type": "operating-system",
            "name": "AMAZON_LINUX_2"
        },
        "properties": [
            {
                "name": "amazon:inspector:ami",
                "value": "ami-xxxxxxxxxxxx"
            },
            {
                "name": "amazon:inspector:arch",
                "value": "x86_64"
            },
            {
                "name": "amazon:inspector:account_id",
                "value": "xxxxxxxxxxxx"
            },
            {
                "name": "amazon:inspector:resource_type",
                "value": "AWS_EC2_INSTANCE"
            },
            {
                "name": "amazon:inspector:instance_id",
                "value": "i-xxxxxxxxxxxx"
            },
            {
                "name": "amazon:inspector:resource_arn",
                "value": "arn:aws:ec2:ap-northeast-1:xxxxxxxxxxxx:instance/i-xxxxxxxxxxxx"
            }
        ]
    },
    "components": [
        {
            "type": "application",
            "name": "elfutils-libelf",
            "purl": "pkg:rpm/elfutils-libelf@0.176-2.amzn2?arch=X86_64&epoch=0&upstream=elfutils-libelf-0.176-2.amzn2.src.rpm",
            "version": "0.176",
            "bom-ref": "ddf56a513c0e76ab2ae3246d9a91c463"
        },
        {
            "type": "application",
            "name": "libffi",
            "purl": "pkg:rpm/libffi@3.0.13-18.amzn2.0.2?arch=X86_64&epoch=0&upstream=libffi-3.0.13-18.amzn2.0.2.src.rpm",
            "version": "3.0.13",
            "bom-ref": "7815cd0f8a2522a9c1bfa22c7c75e0d5"
        },

(省略)

    "vulnerabilities": [
        {
            "id": "CVE-2022-40304",
            "affects": [
                {
                    "ref": "d767c0d05ad199c30aa487f4c139fc94"
                },
                {
                    "ref": "1ec2a0f3c6035ce88b5256faa942a09d"
                }
            ]
        },
        {
            "id": "CVE-2022-32221",
            "affects": [
                {
                    "ref": "49a798c08887e728538e676d0702a3d8"
                },
                {
                    "ref": "4b5db358ca74293f49fb57d2a0bef249"
                }
            ]
        },

    ]
}

エクスポートされたファイルに含まれる脆弱性の数が、Inspectorで確認したものと一致するか確認しておきます。
下記のコマンドで202個という結果なので、一致しています。

$ aws s3 cp s3://test-sbom-export-bucket/CYCLONEDX_1_4_outputs_xxxxxxxxxxxx/account=xxxxxxxxxxxx/resource=AWS_EC2_INSTANCE/i-xxxxxxxxxxxx_CYCLONEDX_1_4.json - | jq '.vulnerabilities[].id' | wc -l
202

まとめ

Amazon InspectorのSBOMエクスポート機能を確認しました。
脆弱性情報だけでなく、ソフトウェアパッケージの構成情報まで出力できるようになり、Inspectorの幅が一気に広がりました。
昨今のソフトウェア構成の複雑化により、SBOMの重要性がさらに増しているので、脆弱性管理の一貫としてぜひ活用してみてください。