【GuardDuty】S3の検出タイプの詳細と対応方法をまとめてみた

記事タイトルとURLをコピーする

こんにちは。AWS CLIが好きな福島です。

はじめに

今回は、以下のブログに続きGuardDutyのS3の検出タイプについて、調査したため、ブログに記載いたします。

blog.serverworks.co.jp

blog.serverworks.co.jp

参考

GuardDuty のS3 の検出結果タイプ - Amazon GuardDuty

GuardDutyとは

GuardDutyとは、脅威検出サービスと呼ばれており、以下のリソースに対する脅威を検出してくれます。

  1. EC2
  2. IAM
  3. S3
  4. Kubernetes

また、脅威を検出するために以下のログを用います。

  1. AWS CloudTrail イベントログ
  2. AWS CloudTrail 管理イベント
  3. S3 の AWS CloudTrail データイベント
  4. Kubernetes 監査ログ
  5. VPC フローログ
  6. DNS ログ

補足ですがS3の保護を有効化するためには、GuardDutyの有効化と合わせてS3保護の有効化を別で設定する必要があります。

S3の検出タイプについて

概要

まず、GuardDutyの検出タイプは以下の通りの記載となります。

種類:サービス名/検出識別子

※上記はドキュメントに記載がある訳ではなく、私が勝手につけた名前となります。

以下の例の場合、種類がDiscoveryでサービス名がS3、検出識別子がMaliciousIPCallerとなります。

Discovery:S3/MaliciousIPCaller

また、今回はS3の検出タイプに関する内容をまとめるため、サービス名は全てS3となりますが、 サービス名がS3の中でも、種類は以下の通り、複数存在いたします。

  1. Discovery
  2. Exfiltration
  3. Impact
  4. PenTest
  5. Policy
  6. Stealth
  7. UnauthorizedAccess

全体

1. Discovery

GetObjectAclやListObjects などのS3API既知の悪意のある IP アドレスからAPIコールされたことを検出します。

これらのAPIは、通常、攻撃者が AWS 環境に関する情報を収集している段階である可能性があります。

  1. Discovery:S3/MaliciousIPCaller
  2. Discovery:S3/MaliciousIPCaller.Custom
  3. Discovery:S3/TorIPCaller

3つ中2つが重要度が「高」となります。

2. Exfiltration

GetObjectやCopyObjectなどのS3API既知の悪意のある IP アドレスからAPIコールまたは通常のアクティビティと異なるAPIコールの場合、検出します。

これらのAPIは、通常、攻撃者がネットワークからデータを盗んでいるまたは盗もうとしている段階である可能性があります。

  1. Exfiltration:S3/MaliciousIPCaller
  2. Exfiltration:S3/ObjectRead.Unusual

2つ中1つが重要度が「高」となりますが、ObjectRead.Unusualは、 インスタンスで作成される一時的な AWS 認証情報を使用して API が呼び出された場合、検出結果の重要度は [High] (高) になります。

3. Impact

PutObjectやPutObjectAclなどのS3API が**既知の悪意のある IP アドレスからAPIコールされたことを検出します。

これらのAPIは、通常、攻撃者が AWS 環境内のデータを操作、中断、または破壊しようとする段階である可能性があります。

  1. Impact:S3/MaliciousIPCaller

重要度は「高」となります。

4. PenTest

EC2 インスタンスの脆弱性を特定してパッチを適用するために使う侵入テストツールが稼働するマシンからAPIコールがあったこと検出してくれます。

  1. PenTest:S3/KaliLinux
  2. PenTest:S3/ParrotLinux
  3. PenTest:S3/PentooLinux

全て重要度は「中」となります。

5. Policy

バケットポリシーまたはACLの変更に伴い、S3バケットがインターネット上でパブリックにアクセス全てのAWSユーザーにパブリックアクセスが可能になったことを検出します。

Zelkova によって提供された自動推論を使用して、バケットがパブリックアクセス可能かどうかを判断するようです。

  1. Policy:S3/BucketAnonymousAccessGranted
  2. Policy:S3/BucketPublicAccessGranted
  3. Policy:S3/AccountBlockPublicAccessDisabled
  4. Policy:S3/BucketBlockPublicAccessDisabled

4つ中2つが重要度「高」となります。

5. Stealth

S3のサーバーアクセスのログ記録が無効になっていることを検出します。

  1. Stealth:S3/ServerAccessLoggingDisabled

重要度は「低」となります。

6. UnauthorizedAccess

カスタムした脅威IPまたはTor 出口ノードからPutObject や PutObjectAcl などのS3APIコールがあったことを検出します。

  1. UnauthorizedAccess:S3/MaliciousIPCaller.Custom
  2. UnauthorizedAccess:S3/TorIPCaller

アラートの対応方法

基本的にアラートを検出した場合は、クレデンシャルが漏洩している可能性があるため、検出したAPI操作が正当な操作であることを確認します。 正当でないことを確認した場合は、クレデンシャルの無効化を実施することになるかと存じます。

また、アラートが発生しない(クレデンシャルが不正利用されない)ように以下も大切です。

  • クレデンシャルが漏洩した場合でも影響を抑えるためにMFAの設定を有効化しておく
  • IAMの定期的な棚卸をする
  • IAMの権限は最小権限にする

なお、EC2のIAMロールの一時キーが奪取されS3APIが実行されるケースもあり得るかと存じますため、 EC2のIMDSv2のみを有効化するであったり、EC2を直接外部に公開するのではなく、WAFやELBを導入することも大切かと存じます。

侵害されたS3の修復については、以下を参照ください。

docs.aws.amazon.com

終わりに

今回は、GuardDutyのS3の検出タイプについてまとめてみました。
どなたかのお役に立てれば幸いです。

福島 和弥 (記事一覧)

SRE3課

2019/10 入社

AWS CLIが好きです。