GuardDuty Findingsのフィードバック機能の動作をマネジメントコンソールとboto3で確認してみた

GuardDuty Findingsのフィードバック機能の動作を確認してマネジメントコンソールとboto3で処理をしてみました。ガンガン使ってフィードバックしましょう!
2024.04.16

こんにちは、臼田です。

みなさん、GuardDutyにフィードバックしてますか?(挨拶

今回はタイトル通り、GuardDutyのFindingsに対して「役にたつ」「役に立たない」などのフィードバックをする機能について動作を確認してまとめてみました。

概要

GuardDutyは脅威検出のサービスで、AWS環境上で発生した様々な脅威を検出してくれます。例えば以下はセキュリティテストのためにツールを使ったことを検出した結果を確認している画面です。

詳細画面でこの検出結果が役に立ったかどうかをフィードバックできます。GuardDutyは様々な検出ができますが、それが良かったかどうかを簡単にフィードバックできます。この機能、マネジメントコンソールだけでなくAPIでも実行できるので、この動作を確認してみました。

やってみた

まず上記画面から「役に立つ」を押すと以下の理由を選択する画面に遷移します。

ここでは役に立った理由を選択でき、以下の一覧から選択します。

  • 悪意がある
  • ペンテスト (GuardDuty がレッドチームアクティビティを正常に検出)
  • セキュリティポリシー違反
  • 良性だが役に立つ
  • その他 (以下に入力してください)

その他を選択した場合には、コメント欄が表示され任意のテキストを入力できます。

これを送信すると、以下のようにマークしたことが確認できます。なお、間違った場合などのためにフィードバックをやり直すボタンもあります。

裏側ではどんな動作をしているか確認してみます。ブラウザのDevToolsを使って送信したリクエストを確認すると、以下のようにUpdateFindingsFeedback APIを実行していることがわかります。

このAPIではfeedbackの値としてUSEFUL | NOT_USEFULのどちらかとcommentsに任意のコメントが入力できます。画面上ではいくつかの選択肢から選びましたが、実態としては用意されているコメントを自動で補完している感じですね。

上記のコメントは英語版のマネジメントコンソールにすると同じ表記であったため、画面上のテキストと同じものが英語で送られると想定されます。「役に立たない」を選択した場合の選択肢は以下のようになっています。

日本語と英語をまとめて整理すると以下の候補になります。

  • 役に立つ
    • 悪意がある: Malicious
    • ペンテスト (GuardDuty がレッドチームアクティビティを正常に検出): Pentest (GuardDuty successfully detected a red team activity)
    • セキュリティポリシー違反: Security policy violation
    • 良性だが役に立つ: Benign but useful
    • その他 (以下に入力してください): Other (enter below)
  • 役に立たない
    • 期待されるリソース動作: Expected resource behavior
    • 誤検出: False positive
    • 実用的なコンテキストが欠けている検出結果: Finding lacking actionable context
    • その他 (以下に入力してください): Other (enter below)

マネジメントコンソール上の動作もわかったので、Pythonのboto3を使って同じ操作をしてみます。APIリファレンスはこちら。以下のようなコードで実現できます。

import boto3
gd = boto3.client('guardduty')
detector_id = gd.list_detectors()['DetectorIds'][0]
finding_ids = ['xxxxxxxxxxxxxxxxxxxx']
gd.update_findings_feedback(
    DetectorId=detector_id,
    FindingIds=finding_ids,
    Feedback='USEFUL',
    Comments='Pentest (GuardDuty successfully detected a red team activity)'
)

feedbackをする場合には、だいたいFindingsの役目も終わっているため、そのままFindingsをアーカイブすることも多いと思いますので、ついでにアーカイブもすると以下のようになります。

gd.archive_findings(
    DetectorId=detector_id,
    FindingIds=finding_ids
)

これで画面上と同じ処理ができましたね。

まとめ

GuardDuty Findingsのフィードバック機能を確認し、マネジメントコンソールとboto3で処理をしてみました。

テストで検出させている場合など期待通りに動いている場合には「役に立つ」、必要な情報が不足している場合などは「役に立たない」をフィードバックしていけば、GuardDutyもどんどん良くなっていくと思います。

GuardDutyをガンガン使ってガンガンフィードバックしましょう!