TrivyでAMIやEBSスナップショットをセキュリティスキャンできるようになりました #reinvent

2022.12.05

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

prismatixのとばち(@toda_kk)です。

先週までAWS re:Invent 2022が開催されていましたが、それに合わせたようにAqua Security社から下記のアナウンスがありました。

脆弱性・セキュリティスキャンのためのOSSツールであるTrivyが、AMIやEBSスナップショットのスキャンに対応したという内容です。

併せて、Trivy作者である @knqyf263さん も下記のツイートをされています。

TrivyとAWS

コンテナイメージの脆弱性スキャンツールとして出発したTrivyですが、現在ではその対応範囲を拡大しており、AWSに関してはアカウントレベルで脆弱な設定がされていないかセキュリティスキャンできるようになっています。

今回の対応により、クラウドにおけるセキュリティチェックだけでなく、AMI IDを渡すだけでVMイメージをセキュリティスキャンできるようになりました。また、EBSスナップショットのスキャンにも対応しています。

TrivyでAMIをスキャンしてみる

Aqua Security社から公開されていたブログ記事に具体的な手順が記載されていたので、こちらを参照しながら実際にAMIのスキャンを試してみます。

AWSアカウントにアクセス可能な環境(認証情報を設定したターミナル、AWS CloudShellなど)でTrivy 0.35.0以上をインストールした上で、trivy vmコマンドによってAMIのスキャンを実行します。

ポイントは、AMIからEC2インスタンスを起動する必要なく、AMI IDを指定するだけでスキャンが実行できるという点です。定期的なスキャンなど、気軽に脆弱性を確認できて便利です。

試しに、Amazon Linux 2をベースとして作成しているAMIをスキャンしてみました。コンテナイメージなどをスキャンした際と同様に、脆弱性が含まれるライブラリや具体的な脆弱性の情報、重要度などが出力されます。

AMIのスキャン

# ami-xxxxxxxxxxxxxxxxxにはAMI IDを指定する
$ trivy vm --security-checks vuln ami:ami-xxxxxxxxxxxxxxxxx
2022-12-05T03:25:14.901Z        INFO    Need to update DB
2022-12-05T03:25:14.901Z        INFO    DB Repository: ghcr.io/aquasecurity/trivy-db
2022-12-05T03:25:14.901Z        INFO    Downloading DB...
35.44 MiB / 35.44 MiB [----------------------------------------------------------------------] 100.00% 18.92 MiB p/s 2.1s
2022-12-05T03:25:17.862Z        INFO    Vulnerability scanning is enabled
2022-12-05T03:25:18.150Z        INFO    Snapshot snap-xxxxxxxxxxxxxxxxx found
2022-12-05T03:30:14.702Z        INFO    Detected OS: amazon
2022-12-05T03:30:14.702Z        INFO    Detecting Amazon Linux vulnerabilities...
2022-12-05T03:30:14.714Z        INFO    Number of language-specific files: 1
2022-12-05T03:30:14.714Z        INFO    Detecting jar vulnerabilities...

ami-xxxxxxxxxxxxxxxxx (amazon 2 (Karoo))

Total: 244 (UNKNOWN: 0, LOW: 2, MEDIUM: 11, HIGH: 20, CRITICAL: 0)

┌────────────────────────┬────────────────┬──────────┬────────────────────────┬────────────────────────┬──────────────────────────────────────────────────────────────┐
│        Library         │ Vulnerability  │ Severity │   Installed Version    │     Fixed Version      │                            Title                             │
├────────────────────────┼────────────────┼──────────┼────────────────────────┼────────────────────────┼──────────────────────────────────────────────────────────────┤
│ curl                   │ CVE-2022-32205 │ MEDIUM   │ 7.79.1-4.amzn2.0.1     │ 7.79.1-6.amzn2.0.1     │ curl: Set-Cookie denial of service                           │
│                        │                │          │                        │                        │ https://avd.aquasec.com/nvd/cve-2022-32205                   │
│                        ├────────────────┤          │                        │                        ├──────────────────────────────────────────────────────────────┤
│                        │ CVE-2022-32206 │          │                        │                        │ curl: HTTP compression denial of service                     │
│                        │                │          │                        │                        │ https://avd.aquasec.com/nvd/cve-2022-32206                   │
│                        ├────────────────┤          │                        │                        ├──────────────────────────────────────────────────────────────┤
│                        │ CVE-2022-32208 │          │                        │                        │ curl: FTP-KRB bad message verification                       │
│                        │                │          │                        │                        │ https://avd.aquasec.com/nvd/cve-2022-32208                   │
│                        ├────────────────┼──────────┤                        │                        ├──────────────────────────────────────────────────────────────┤
│                        │ CVE-2022-35252 │ LOW      │                        │                        │ curl: control code in cookie denial of service               │
│                        │                │          │                        │                        │ https://avd.aquasec.com/nvd/cve-2022-35252                   │
├────────────────────────┼────────────────┼──────────┼────────────────────────┼────────────────────────┼──────────────────────────────────────────────────────────────┤
(以下略)

また、AMIではなくEBSスナップショットに対してスキャンを実行することも可能です。この場合も、EC2インスタンスにマウントして起動するなどの必要はなく、EBSスナップショットのIDを指定するだけで実行可能です。

EBSスナップショットのスキャン

# snap-xxxxxxxxxxxxxxxxxにはEBSスナップショットIDを指定する
$ trivy vm --security-checks vuln ebs:snap-xxxxxxxxxxxxxxxxx

マーケットプレイスなどパブリックなAMIはスキャンできない

ちなみに、AWS公式から提供されているパブリックなAMIをスキャンしようとすると、権限が足りずに失敗します。

以下は、試しに最新のAmazon Linux 2(x86_64, gp2)のAMI IDを取得した上でtrivy vmを実行してみた結果です。

パブリックなAMIはスキャンできない

$ aws ssm get-parameters --names /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2 --query Parameters[].Value --output text
ami-0b73aa7c1d1b2e901

$ trivy vm ami:ami-0b73aa7c1d1b2e901
2022-12-05T12:28:19.246+0900    INFO    Vulnerability scanning is enabled
2022-12-05T12:28:19.246+0900    INFO    Secret scanning is enabled
2022-12-05T12:28:19.246+0900    INFO    If your scanning is slow, please try '--security-checks vuln' to disable secret scanning
2022-12-05T12:28:19.246+0900    INFO    Please see also https://aquasecurity.github.io/trivy/v0.35/docs/secret/scanning/#recommendation for faster secret detection
2022-12-05T12:28:19.480+0900    FATAL   vm scan error: scan error: unable to initialize a scanner: unable to initialize a vm scanner: ec2.DescribeImages: operation error EC2: DescribeImages, https response error StatusCode: 403, RequestID: ab099414-1999-42a7-99dc-8f0ea48877e8, api error UnauthorizedOperation: You are not authorized to perform this operation.

Trivy公式ドキュメントにも、下記のように記載がありました。マーケットプレイス経由などで取得できるAMIはサポートされていないようですので、ご注意ください。

AMIs in the marketplace are not supported because the EBS direct APIs don't support that. See the AWS documentation for the detail.

また、同じく公式ドキュメントによると、スキャンを実行する際は対象のAMIやEBSスナップショットに対する下記のIAM権限が必要になるようです。

  • ec2:DescribeImages(AMIをスキャンする場合のみ必要)
  • ebs:ListSnapshotBlocks
  • ebs:GetSnapshotBlock

Trivyのさらなる対応範囲の拡大に期待

コンテナだけでなくVMのセキュリティスキャンにまで対応したTrivyですが、CIプロセスなどにすでにコンテナイメージのスキャン用途で導入済みであれば、そのままVMにも適用できて大変使い勝手が良いと感じました。

今後もさらなるアップデートに期待しています!

以上、prismatixのとばち(@toda_kk)でした。