こんにちは。AWS CLIが好きな福島です。
はじめに
今回は、以下のブログに続きGuardDutyのS3の検出タイプについて、調査したため、ブログに記載いたします。
参考
GuardDuty のS3 の検出結果タイプ - Amazon GuardDuty
GuardDutyとは
GuardDutyとは、脅威検出サービスと呼ばれており、以下のリソースに対する脅威を検出してくれます。
- EC2
- IAM
- S3
- Kubernetes
また、脅威を検出するために以下のログを用います。
- AWS CloudTrail イベントログ
- AWS CloudTrail 管理イベント
- S3 の AWS CloudTrail データイベント
- Kubernetes 監査ログ
- VPC フローログ
- DNS ログ
補足ですがS3の保護を有効化するためには、GuardDutyの有効化と合わせてS3保護の有効化を別で設定する必要があります。
S3の検出タイプについて
概要
まず、GuardDutyの検出タイプは以下の通りの記載となります。
種類:サービス名/検出識別子
※上記はドキュメントに記載がある訳ではなく、私が勝手につけた名前となります。
以下の例の場合、種類がDiscoveryでサービス名がS3、検出識別子がMaliciousIPCallerとなります。
Discovery:S3/MaliciousIPCaller
また、今回はS3の検出タイプに関する内容をまとめるため、サービス名は全てS3となりますが、 サービス名がS3の中でも、種類は以下の通り、複数存在いたします。
- Discovery
- Exfiltration
- Impact
- PenTest
- Policy
- Stealth
- UnauthorizedAccess
全体
1. Discovery
GetObjectAclやListObjects などのS3API が既知の悪意のある IP アドレスからAPIコールされたことを検出します。
これらのAPIは、通常、攻撃者が AWS 環境に関する情報を収集している段階である可能性があります。
- Discovery:S3/MaliciousIPCaller
- Discovery:S3/MaliciousIPCaller.Custom
- Discovery:S3/TorIPCaller
3つ中2つが重要度が「高」となります。
2. Exfiltration
GetObjectやCopyObjectなどのS3API が既知の悪意のある IP アドレスからAPIコールまたは通常のアクティビティと異なるAPIコールの場合、検出します。
これらのAPIは、通常、攻撃者がネットワークからデータを盗んでいるまたは盗もうとしている段階である可能性があります。
- Exfiltration:S3/MaliciousIPCaller
- Exfiltration:S3/ObjectRead.Unusual
2つ中1つが重要度が「高」となりますが、ObjectRead.Unusualは、 インスタンスで作成される一時的な AWS 認証情報を使用して API が呼び出された場合、検出結果の重要度は [High] (高) になります。
3. Impact
PutObjectやPutObjectAclなどのS3API が**既知の悪意のある IP アドレスからAPIコールされたことを検出します。
これらのAPIは、通常、攻撃者が AWS 環境内のデータを操作、中断、または破壊しようとする段階である可能性があります。
- Impact:S3/MaliciousIPCaller
重要度は「高」となります。
4. PenTest
EC2 インスタンスの脆弱性を特定してパッチを適用するために使う侵入テストツールが稼働するマシンからAPIコールがあったこと検出してくれます。
- PenTest:S3/KaliLinux
- PenTest:S3/ParrotLinux
- PenTest:S3/PentooLinux
全て重要度は「中」となります。
5. Policy
バケットポリシーまたはACLの変更に伴い、S3バケットがインターネット上でパブリックにアクセスや全てのAWSユーザーにパブリックアクセスが可能になったことを検出します。
Zelkova によって提供された自動推論を使用して、バケットがパブリックアクセス可能かどうかを判断するようです。
- Policy:S3/BucketAnonymousAccessGranted
- Policy:S3/BucketPublicAccessGranted
- Policy:S3/AccountBlockPublicAccessDisabled
- Policy:S3/BucketBlockPublicAccessDisabled
4つ中2つが重要度「高」となります。
5. Stealth
S3のサーバーアクセスのログ記録が無効になっていることを検出します。
- Stealth:S3/ServerAccessLoggingDisabled
重要度は「低」となります。
6. UnauthorizedAccess
カスタムした脅威IPまたはTor 出口ノードからPutObject や PutObjectAcl などのS3APIコールがあったことを検出します。
- UnauthorizedAccess:S3/MaliciousIPCaller.Custom
- UnauthorizedAccess:S3/TorIPCaller
アラートの対応方法
基本的にアラートを検出した場合は、クレデンシャルが漏洩している可能性があるため、検出したAPI操作が正当な操作であることを確認します。 正当でないことを確認した場合は、クレデンシャルの無効化を実施することになるかと存じます。
また、アラートが発生しない(クレデンシャルが不正利用されない)ように以下も大切です。
- クレデンシャルが漏洩した場合でも影響を抑えるためにMFAの設定を有効化しておく
- IAMの定期的な棚卸をする
- IAMの権限は最小権限にする
なお、EC2のIAMロールの一時キーが奪取されS3APIが実行されるケースもあり得るかと存じますため、 EC2のIMDSv2のみを有効化するであったり、EC2を直接外部に公開するのではなく、WAFやELBを導入することも大切かと存じます。
侵害されたS3の修復については、以下を参照ください。
終わりに
今回は、GuardDutyのS3の検出タイプについてまとめてみました。
どなたかのお役に立てれば幸いです。