はじめに
皆さんはGuardDuty Findings Tester
というツールをご存知でしょうか?
AWS から提供されている GuardDuty のテスターなのですが、いくつかの Findings を検知できるスクリプトが含まれています。
実は昔、以下の記事で GuardDuty Findings Tester を紹介したのですが、最近確認してみるとものすごく便利になっていたので改めて紹介します。
どのくらい便利になったのか
具体的には、以下の点が大きく変わっています。
- デプロイ方法が CloudFormation ではなく CDK に変更
- 検知できる Findings の数が、65 個(2024/06/26 時点)まで増加
- 以前は EC2 の 6 つの Findings のみ
- Findings ごと、Findings Type ごとなど個別に検知させることが可能
デプロイも CDK を使用しているため簡単になり、検知したい Findings も自由に選べるようになったのがとってもいい感じです。検知できる種類も大幅に増えていたので、詳細は以下を確認してください。
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 Plugin
とSubscription to Kali Linux Image
については以下の手順を参照してください。
セッション Manager Plugin は以下ドキュメントを参照してインストールしてください。
AWS CLI 用の Session Manager プラグインをインストールする - AWS Systems Manager
Kali Linux Image の Subscription は以下マーケットプレイスから行えます。AWS にログインした状態で開いてください。
起動できる状態になれば 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 分程度かかるので、気長に待ちましょう。
デプロイされる構成は以下です。
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 より詳細な情報を確認したいケースでぜひ利用してみてください。