TrivyでAWSサービスの脆弱性チェックをしてみた

ご無沙汰しております、アシアル笹亀です。
働き方もここ数年で大きく変わったことにより、ご相談をされる内容についても変わってきた印象を受けてます。いままでは、「このようなシステムをつくりたい」とか「このようなアプリをつくりたい」のようなご相談のされ方がおおかったのです。最近は、現行システムや現場での運用のあり方など働き方も見直しがされたことにより、「現場での実施が必要なシステムや運用について、リモートでも行えるようにWebシステム化したい」など働き方の変化に伴った、ご相談をいただくようになり、そういった変化も最近は、よく感じております。

Trivyとは

TrivyでAWSに限定されるのですが、利用しているAWSサービスにて、設定されている情報からサービスをフルスキャンして脆弱性を診断してくれるようになりました。AWSの設定は初期に設定したあとにあまり大きく変更しなかったりと脆弱性をチェックするにもひとつひとつ見直す必要があり、たくさんの時間を要してしまいます。自動で脆弱性をチェックしてくれるツールというのはなく、様々の用途で手軽に実施ができるとおもい、今回、どのようなものかを試してみました。

まずはインストールなど環境の準備

脆弱性診断をするために必要な準備をします。

  • スキャンをしたいAWSアカウントに全てのAWSリソースへの参照権限を付与したユーザを作成(※1)
    • AWS CLIを利用するためのアクセスキーとシークレットキーが必要になります
  • 実行環境の準備
    • ローカルPC(MacBook)にbrewにてtrivyのインストール
    • brew install aquasecurity/trivy/trivy
      • インストールしたバージョンは本ブログ記載時の最新版でv0.32.0になります
      • 環境によってはbrewでインストールした際にエラーが出る場合があるので、必要に応じて「softwareupdate --all --install --force」や「sudo rm -rf /Library/Developer/CommandLineTools sudo xcode-select --install」を実施をする
  • .awsのcredentialsに作成したAWSアカウントの認証情報を設定する
    • [default]へ設定する必要あり(たぶん)

Trivyコマンドにてスキャンの実行をする

実際にスキャンをしたAWS環境は本ブログ用のテスト用に構築した環境に向けて実施をしております。

trivy aws
2022-09-27T14:42:45.039+0900	FATAL	failed to discover AWS caller identity: operation error STS: GetCallerIdentity, failed to resolve service endpoint, an AWS region is required, but was not found

リージョンの指定は必須とのことなので、指定をして再度、実行をする。

trivy aws --region ap-northeast-1
[1/32] Scanning accessanalyzer...
[2/32] Scanning api-gateway...
[3/32] Scanning athena...
[4/32] Scanning cloudfront...
[5/32] Scanning cloudtrail...
[6/32] Scanning cloudwatch...
[7/32] Scanning codebuild...
[8/32] Scanning documentdb...
[9/32] Scanning dynamodb...
[10/32] Scanning ec2...
[11/32] Scanning ecr...
[12/32] Scanning ecs...
[13/32] Scanning efs...
[14/32] Scanning eks...
[15/32] Scanning elasticache...
[16/32] Scanning elasticsearch...
[17/32] Scanning elb...
[18/32] Scanning emr...
[19/32] Scanning iam...
[20/32] Scanning kinesis...
[21/32] Scanning kms...
[22/32] Scanning lambda...
[23/32] Scanning mq...
[24/32] Scanning msk...
[25/32] Scanning neptune...
[26/32] Scanning rds...
[27/32] Scanning redshift...
[28/32] Scanning s3...
[29/32] Scanning sns...
[30/32] Scanning sqs...
[31/32] Scanning ssm...
[32/32] Scanning workspaces...

Scan Overview for AWS Account xxxxxxxxxxxxx
┌────────────────┬──────────────────────────────────────────────────┬──────┐
│                │                Misconfigurations                 │              │
│                ├──────────┬──────┬────────┬─────┬─────────┤              │
│ Service        │ Critical │ High │ Medium │ Low │ Unknown │ Last Scanned │
├────────────────┼──────────┼──────┼────────┼─────┼─────────┼──────────────┤
│ accessanalyzer │        0 │    0 │      0 │   0 │       0 │ just now     │
│ api-gateway    │        0 │    0 │      0 │   0 │       0 │ just now     │
│ athena         │        0 │    2 │      0 │   0 │       0 │ just now     │
│ cloudfront     │        0 │    1 │      1 │   0 │       0 │ just now     │
│ cloudtrail     │        0 │    1 │      0 │   2 │       0 │ just now     │
│ cloudwatch     │        0 │    0 │      0 │  53 │       0 │ just now     │
│ codebuild      │        0 │    0 │      0 │   0 │       0 │ just now     │
│ documentdb     │        0 │    1 │      0 │   2 │       0 │ just now     │
│ dynamodb       │        0 │    0 │      0 │   0 │       0 │ just now     │
│ ec2            │       53 │    5 │      0 │  98 │       0 │ just now     │
│ ecr            │        0 │   22 │      0 │  11 │       0 │ just now     │
│ ecs            │       24 │    0 │      0 │   2 │       0 │ just now     │
│ efs            │        0 │    0 │      0 │   0 │       0 │ just now     │
│ eks            │        0 │    0 │      0 │   0 │       0 │ just now     │
│ elastic-search │        1 │    3 │      1 │   0 │       0 │ just now     │
│ elasticache    │        0 │    0 │      1 │   0 │       0 │ just now     │
│ elasticsearch  │        0 │    0 │      0 │   0 │       0 │ just now     │
│ elb            │        3 │    5 │      0 │   0 │       0 │ just now     │
│ emr            │        0 │    0 │      0 │   0 │       0 │ just now     │
│ iam            │        0 │    0 │     12 │  29 │       0 │ just now     │
│ kinesis        │        0 │    0 │      0 │   0 │       0 │ just now     │
│ kms            │        0 │    0 │      9 │   0 │       0 │ just now     │
│ lambda         │        0 │    0 │      0 │   7 │       0 │ just now     │
│ mq             │        0 │    0 │      0 │   0 │       0 │ just now     │
│ msk            │        0 │    0 │      0 │   0 │       0 │ just now     │
│ neptune        │        0 │    2 │      0 │   0 │       0 │ just now     │
│ rds            │        1 │    2 │      2 │   1 │       0 │ just now     │
│ redshift       │        0 │    0 │      0 │   0 │       0 │ just now     │
│ s3             │        0 │   85 │     36 │  13 │       0 │ just now     │
│ sns            │        0 │    1 │      0 │   0 │       0 │ just now     │
│ sqs            │        0 │    0 │      0 │   0 │       0 │ just now     │
│ ssm            │        0 │    0 │      0 │   0 │       0 │ just now     │
│ workspaces     │        0 │    0 │      0 │   0 │       0 │ just now     │
└────────────────┴──────────┴──────┴────────┴─────┴─────────┴──────────────┘

上記は全体に対してのスキャンとなりますが、特定のサービスに絞り込んでスキャンすることでより脆弱性の詳細な情報を確認することができます。

trivy aws --region ap-northeast-1 --service ec2
特定のサービスの情報を確認

さらにリソースひとつひとつに絞り込んでどういった脆弱性があるのかを詳細に表示をすることが可能で、脆弱性に対しての内容に加えて対応方法についても記載があり、そちらの情報をもとに脆弱性に対して対策をしていくということでセキュアな状態にすることが可能となります。

trivy aws --region ap-northeast-1 --service ec2 --arn arn:aws:ec2:ap-northeast-1:xxxxxxxxxxxx:security-group/sg-6b98de14
リソースに絞り込んで詳細を表示

まとめ

実際に構築して利用した感じですが、脆弱性をスキャンする環境も1時間程度で手軽に構築することができ、実行するのもCLIでAWSコマンドを実行する感覚と同じなので、とても手軽さを感じました。CI/CDに組み込んでインフラ環境をデプロイする前に脆弱性が無いことを確認する方法として利用するのが良さそうだと思いました。インフラ環境も一度、環境を構築して運用が始まったら、脆弱性についてチェックを専門の企業などに依頼したりと費用がかかりがちです。Trivyで手軽に環境の脆弱性をチェックができるというのはとても運用面でもセキュアな環境を運用する上ではメリットが高いことだと思います。まだTrivyは発展途上の段階らしく、これからさらに進化をしていくようです。こういった便利なツールはもっと注目されていって欲しいです。

参考情報

お知らせ

アシアルでは、一緒に働くメンバーを募集しておりますので、気になる方はぜひ、採用ページを確認いただけますと幸いです。まずは、カジュアル面談からざっくばらんにお互いのことをお話できたらと思ってます。ご興味があるかたはこちらより、お問い合わせくださいませ。