より便利になっていたGuardDuty Findings Testerを使ってFindingsを発生させてみた

2024.06.26

はじめに

皆さんはGuardDuty Findings Testerというツールをご存知でしょうか?

AWS から提供されている GuardDuty のテスターなのですが、いくつかの Findings を検知できるスクリプトが含まれています。

実は昔、以下の記事で GuardDuty Findings Tester を紹介したのですが、最近確認してみるとものすごく便利になっていたので改めて紹介します。

どのくらい便利になったのか

具体的には、以下の点が大きく変わっています。

  • デプロイ方法が CloudFormation ではなく CDK に変更
  • 検知できる Findings の数が、65 個(2024/06/26 時点)まで増加
    • 以前は EC2 の 6 つの Findings のみ
  • Findings ごと、Findings Type ごとなど個別に検知させることが可能

デプロイも CDK を使用しているため簡単になり、検知したい Findings も自由に選べるようになったのがとってもいい感じです。検知できる種類も大幅に増えていたので、詳細は以下を確認してください。

Findings Tester Can Generate

GuardDuty には以下のようにサンプルイベントを発生させる API があります。これでも大まかな動作確認はできるのですが、実際の Findings に含まれるデータとは差があるケースは多いです。

そのため通知を実装するときなど、実際のイベントを発生させたくなることがあります。そんな時はぜひ今回紹介する GuardDuty Findings Tester を使ってみましょう。

やってみる

GuardDuty Findings Tester を使って Findings を発生させてみます。

事前準備

事前準備として、以下を利用できる状態にしておく必要があります。

  • Git
  • awscli
  • セッション Manager Plugin
  • npm
  • Docker
  • Subscription to Kali Linux Image

細かい話になるため Git や CLI の導入方法は省きます。Session Manager PluginSubscription to Kali Linux Imageについては以下の手順を参照してください。

セッション Manager Plugin は以下ドキュメントを参照してインストールしてください。

AWS CLI 用の Session Manager プラグインをインストールする - AWS Systems Manager

Kali Linux Image の Subscription は以下マーケットプレイスから行えます。AWS にログインした状態で開いてください。

AWS Marketplace: Kali Linux

起動できる状態になれば OK です。

展開方法

ここからはリポジトリを clone して CDK を実行していきます。展開先の AWS アカウントに切り替えて実行して下さい。

コマンドを実行場所は任意のフォルダで大丈夫です。

$ git clone https://github.com/awslabs/amazon-guardduty-tester && cd amazon-guardduty-tester
$ npm install
$ cdk bootstrap (デプロイ先のリージョンでまだ実行したことがない場合のみ)
$ cdk deploy

デプロイするリソースの一覧が表示され、デプロイして問題ないか聞かれるのでyを入力するとデプロイが始まります。

完了まで 15 分程度かかるので、気長に待ちましょう。

デプロイされる構成は以下です。

amazon-guardduty-tester より引用

NatGateway やインスタンスを立ち上げるため、利用しない場合は適宜削除するようにしましょう。

テストの実行

デプロイが完了したら、環境変数にデプロイ先のリージョンを変数として保存します。私は東京リージョンにデプロイしたので、ap-northeast-1を設定しました。

$ REGION=ap-northeast-1

次にテスターである EC2 に対して SSM を使ったセッションを開始します。

aws ssm start-session \
  --region $REGION \
  --document-name AWS-StartInteractiveCommand \
  --parameters command="cd /home/ssm-user/py_tester && bash -l" \
  --target $(aws ec2 describe-instances \
    --region $REGION \
    --filters "Name=tag:Name,Values=Driver-GuardDutyTester" \
    --query "Reservations[].Instances[?State.Name=='running'].InstanceId" \
    --output text)

セッションが正しく開始されると、以下のように SessionId が出力されます。

Starting session with SessionId: soc-marmot-unyeynq5fdh4gzrmybwgjoyjhe
[ssm-user@ip-172-16-0-42 py_tester]$

Findingsを生成する

テスターにログインしたら、guardduty_tester.pyを使って Findings を生成できます。

GuardDuty Findings Tester の README には以下のようなサンプルが載っています。

EXAMPLES:
  python3 guardduty_tester.py
  python3 guardduty_tester.py --all
  python3 guardduty_tester.py --s3
  python3 guardduty_tester.py --tactics discovery
  python3 guardduty_tester.py --ec2 --eks --tactics backdoor policy execution
  python3 guardduty_tester.py --eks --runtime only
  python3 guardduty_tester.py --ec2 --runtime only --tactics impact
  python3 guardduty_tester.py --log-source dns vpc-flowlogs
  python3 guardduty_tester.py --finding 'CryptoCurrency:EC2/BitcoinTool.B!DNS'

引数に Findings Type などを渡すことで、それに応じた Findings を生成できるようです。

今回は IAM 系の Findings Type で実行してみます。

$ python3 guardduty_tester.py --iam
***********************************************************************
*                                 NOTE                                *
*      All changes made to your account within the tester script      *
*            will be restored before the script exits.                *
*        No changes will be made without direct user permission       *
***********************************************************************

***********************************************************************
* Note on GuardDuty settings                                          *
* Depending on reqeusted tests various settings may need to modified  *
* All of which will be restored to current state post testing         *
* One exception being a custom malicious threat list, the deletion of *
* which (if exists) will be handled by a Lambda function when the     *
* tester Cloudformation stack is deleted.                             *

Allow tester to make changes to GuardDuty Settings? [y/n]:

Allow tester to make changes to Account Password Policy? [y/n]:

NOTE にはスクリプトによって行われた変更はスクリプト終了前に復元されることが書いてあります。Findings によっては設定を変更することに問題ないか聞かれるのでyを入力してスクリプトが実行しましょう。

数分後 GuardDuty を確認すると、IAM 系の Findings が検知されていました。

CDK でデプロイするだけであっという間に GuardDuty Findings を検知できる環境を作成できました。

環境のクリーンアップ

EC2 などが起動されているため、使わない場合は課金を防ぐためにクリーンアップをしましょう。

CDK を使っているため、destroyのコマンドを実行するだけで綺麗に削除できます。

$ cdk destroy

まとめ

進化した GuardDuty Findings Tester を使って IAM 系の Findings を引き起こしてみました。

デプロイ方法が CDK になったのことで、デプロイが非常にシンプルになり検出できる Findings も大幅に増えています。

サンプルの Findigns より詳細な情報を確認したいケースでぜひ利用してみてください。

参考