新機能 GuardDuty Extended Threat Detection とは何か

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

マネージドサービス部 佐竹です。
開催中の AWS re:Invent 2024 より、Amazon GuardDuty の新機能をご紹介します*1

はじめに

Extended Threat Detection

Amazon GuardDuty の新機能 として GuardDuty Extended Threat Detection が発表されました。本機能は20224年12月2日現在、既に利用が可能となっています。

実際に検出された場合の表示例

参考までに、早速実際に GuardDuty Extended Threat Detection に検出させてみました。

以下がその画面キャプチャです。

AttackSequence:IAM/CompromisedCredentials

検証してみたところ、Potential credential compromise of AssumedRole/sabasoc-report-ec2-instance-role-dangerous-admin-role indicated by a sequence of actions. というタイトルで検出されました。

AttackSequence:IAM/CompromisedCredentials

補足ですが該当の IAM Role は「administrator の権限を持つ IAM Role」で今回の検証のために作成したものです。

最初に結論

最初に GuardDuty Extended Threat Detection とは何か?についての結論を簡単に記載しておきます。

従来の Amazon GuardDuty で検出されていた機能との違いは、以下の通りです。

  • 多段階攻撃の検出強化
    • GuardDuty Extended Threat Detection は、個別のイベントをバラバラで見るのではなく「関連」させることで検出結果を一連の悪意ある活動として検出します。これにより、従来は見逃しやすかった多段階攻撃*2をより効果的に捕捉可能となります
  • 新設された「Critical」の優先順位
    • 従来の GuardDuty では、検出結果 (Findings) には「Critical」の深刻度 (Severity) が予約されていたものの、実際には設定されておらず長らく利用されていませんでした。今回、Extended Threat Detection ではすべての攻撃シーケンスを「Critical」と見なし、最優先での対応を促すようになります
  • 自動有効化と、S3 Protection の利点
    • 特定の AWS リージョンのアカウントで Amazon GuardDuty を有効にすると、Extended Threat Detection もデフォルトで有効化されます。追加コストは発生しません。また S3 Protection などの GuardDuty 保護プランを合わせて有効としている場合、イベントソースの範囲が広がり、追加の攻撃シーケンス検出が可能となります

攻撃シーケンス(アタックシーケンス)とは何か?

「Attack Sequence」という言葉になじみがあるでしょうか?

今回記載されている「攻撃シーケンス」という言葉は、サイバー攻撃者が行う「一連のステップ」を指しています。

あくまで一例ですが、以下の様なステップが考えられます。

  • 情報収集: 標的となる組織やシステムに関する情報を収集する段階です。具体的には、AWS CLI のクレデンシャルなどを探している状況です
  • 侵入: 脆弱性を突いたり、フィッシング攻撃を行ったりし、侵入を試みます。先の例の続きですが、実際に得たクレデンシャルを利用してアカウントにアクセスします
  • 権限昇格: 侵入したシステム内で、より高い権限を利用するよう試みます。例えばクレデンシャルを利用し、administrator 権限を持つ IAM User や IAM Role を作成します
  • 横展開: 他のシステムやネットワークに攻撃を拡大します。ランサムウェアによるラテラルムーブメントなどもそうです。
  • データ窃取: 機密データを盗み出します。EC2 インスタンス内部の情報や、S3 バケットの情報などを窃盗します。
  • 証拠隠滅: 攻撃の痕跡を消し去ります。攻撃の開始時に CloudTrail がオフにされる場合もあります。証拠隠滅により発覚までの時間を稼ぐ事が目的です

そして、このシーケンスに関連してのフレームワークも合わせて紹介していきます。

MITRE ATT&CK®フレームワークと Indicators

MITRE tactics の該当箇所の画面キャプチャ

GuardDuty Extended Threat Detection の特徴的な機能の1つとして「MITRE ATT&CK® フレームワーク」へのマッピングを行ってくれます。

このフレームワークに則り、以下の攻撃シーケンスの各段階のどこまでが行われたのかが、視覚的にわかりやすい UI を備えています。

実際にマネジメントコンソールで確認できたのは以下の「MITRE tactics」です。

  1. Discovery
  2. Initial Access
  3. Execution
  4. Persistence
  5. Privilege Escalation
  6. Defense Evasion
  7. Lateral Movement
  8. Credential Access
  9. Collection
  10. Exfiltration
  11. Impact

「Indicators」を開くと、攻撃シーケンスとして特定された API とその理由が閲覧可能です。

Indicators

1つピックアップすると cloudtrail:StopLogging がここに掲載されています。これは私が「CloudTrail をオフにすることで証拠を残さないよう試みた」結果として表示されています。

なお「Attack technique」に記載のある「T1496 - Resource Hijacking」等の項目は「MITRE ATT&CK®フレームワーク」に則ったものとなっています。

Enterprise tactics

さて「MITRE tactics」によれば、「Enterprise tactics」は合計14あるのですが、以下の3つは省かれているように見えました。

  1. Reconnaissance
  2. Resource Development
  3. Command and Control

Enterprise tactics の翻訳

参考までに、「MITRE tactics」を簡単に日本語訳したものを以下に記載します。

Name Description
Reconnaissance 敵対者は、将来の作戦計画に利用できる情報を収集しようとしています。
Resource Development 敵対者は、作戦を支援するために利用できるリソースを確立しようとしています。
Initial Access 敵対者は、あなたのネットワークに侵入しようとしています。
Execution 敵対者は、悪意のあるコードを実行しようとしています。
Persistence 敵対者は、足場を維持しようとしています。
Privilege Escalation 敵対者は、より高いレベルの権限を取得しようとしています。
Defense Evasion 敵対者は、検出を回避しようとしています。
Credential Access 敵対者は、アカウント名とパスワードを盗もうとしています。
Discovery 敵対者は、あなたの環境を把握しようとしています。
Lateral Movement 敵対者は、あなたの環境内を移動しようとしています。
Collection 敵対者は、自分の目標に関連するデータを収集しようとしています。
Command and Control 敵対者は、侵害されたシステムと通信して制御しようとしています。
Exfiltration 敵対者は、データを盗もうとしています。
Impact 敵対者は、あなたのシステムとデータを操作、中断、または破壊しようとしています。

検出結果の通知に関連して知っておきたいこと

以前、Amazon GuardDuty の 検出結果「高(High)」のみを Slack へと連携する方法をブログで紹介しました。

blog.serverworks.co.jp

本ブログからの引用ですが、当時以下の通り記載していました。

[Note] Values 0 and 9.0 to 10.0 are currently reserved for future use.

値 0 と 9.0 から 10.0 が将来使用するために現在予約されています。

https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_findings.html


このため、将来的にこれらの数字が High に追加もしくはそれ以上の重要度の Severity として追加された場合に、重要な検出結果を見逃してしまう可能性があります。

この懸念に対応するため、Event pattern は以下の通り「numeric」で不等号指定とし、7 以上の全てを検出するほうがより良いでしょう。

現在、Extended Threat Detection により「Critical」は実際に使われ始めました。ですので、以下の通りに「不等号」にて設定を頂いていれば、本機能による「Critical」の検出もこれまでの設定で問題なく検出&通知されることでしょう。

{
  "source": ["aws.guardduty"],
  "detail-type": ["GuardDuty Finding"],
  "detail": {
    "severity": [{
      "numeric": [">=", 7]
    }]
  }
}

Critical として検出されるまでに少し時間がかかる

GuardDuty Extended Threat Detection は GuardDuty の検出結果(Findings)の繋がりを分析し「攻撃シーケンス」として検出する都合、それぞれの検出結果を組み合わせての分析になります。

このため、GuardDuty の各 Findings はほぼ即時の通知がされる反面、GuardDuty Extended Threat Detection によって生成される「Critical」の検出結果は、表示されるまで少し時間を要するようでした。

以下が実際の Findings におけるタイムスタンプです。時間は JST で記載しています。

Type Name Created at Updated at
UnauthorizedAccess:IAMUser/
InstanceCredentialExfiltration.OutsideAWS
2024-12-02 18:58:05 2024-12-02 19:25:42
UnauthorizedAccess:IAMUser/
InstanceCredentialExfiltration.InsideAWS
2024-12-02 19:07:30 2024-12-02 19:07:30
AttackSequence:IAM/CompromisedCredentials 2024-12-02 19:22:53 2024-12-02 19:43:53

上記の通り、初回の攻撃は「18:58:05」に行われているのですが、「AttackSequence」の検出が行われたのは同日「19:22:53」です。20分以上時間が経過してからなのです。

このように、「Critical」としてエスカレーションされるまで少々時間がかかるという点は知っておいたほうが良いでしょう。

Critical の検出結果の JSON

参考までに、今回検出させた JSON を掲載します。なお、JSON では時刻は UTC のままとなっています。

[
  {
    "AccountId": "devaccountid",
    "Arn": "arn:aws:guardduty:ap-northeast-1:devaccountid:detector/f2c9591f2f532635b18c0-detectorid/finding/e0c9c3727ceba0faf0391d35627351de",
    "CreatedAt": "2024-12-02T10:22:53.399Z",
    "Description": "A sequence of actions involving 2 signals indicating a potential credential compromise was observed for AssumedRole/sabasoc-report-ec2-instance-role-dangerous-admin-role with principalId AROAW5WU5888888999999:i-0258a29e9796c5104 in account devaccountid between 2024-12-02T09:48:55Z and 2024-12-02T10:40:29.164Z with the following behaviors:\n- 4 MITRE ATT&CK tactics observed: Impact, Defense Evasion, Credential Access, Discovery\n- 5 MITRE ATT&CK techniques observed: T1580 - Cloud Infrastructure Discovery, T1578 - Modify Cloud Compute Infrastructure, T1562 - Impair Defenses, T1552.005 - Unsecured Credentials: Cloud Instance Metadata API, T1496 - Resource Hijacking\n- 4 sensitive APIs called: ec2:DescribeInstances, cloudtrail:StopLogging, ec2:CreateVpc, ec2:RunInstances\n",
    "Id": "e0c9c3727ceba0faf0391d35627351de",
    "Partition": "aws",
    "Region": "ap-northeast-1",
    "Resource": {
      "ResourceType": "AttackSequence"
    },
    "SchemaVersion": "2.0",
    "Service": {
      "Archived": false,
      "Count": 3,
      "DetectorId": "f2c9591f2f532635b18c0-detectorid",
      "EventFirstSeen": "2024-12-02T09:48:55.000Z",
      "EventLastSeen": "2024-12-02T10:16:13.000Z",
      "ServiceName": "guardduty",
      "AdditionalInfo": {
        "Value": "{}",
        "Type": "default"
      },
      "FeatureName": "Correlation",
      "Detection": {
        "Sequence": {
          "Uid": "1733134387821-f880afa0-b7dc-48bd-b5b9-995c3731ded9",
          "Description": "A sequence of actions involving 2 signals indicating a potential credential compromise was observed for AssumedRole/sabasoc-report-ec2-instance-role-dangerous-admin-role with principalId AROAW5WU5888888999999:i-0258a29e9796c5104 in account devaccountid between 2024-12-02T09:48:55Z and 2024-12-02T10:40:29.164Z with the following behaviors:\n- 4 MITRE ATT&CK tactics observed: Impact, Defense Evasion, Credential Access, Discovery\n- 5 MITRE ATT&CK techniques observed: T1580 - Cloud Infrastructure Discovery, T1578 - Modify Cloud Compute Infrastructure, T1562 - Impair Defenses, T1552.005 - Unsecured Credentials: Cloud Instance Metadata API, T1496 - Resource Hijacking\n- 4 sensitive APIs called: ec2:DescribeInstances, cloudtrail:StopLogging, ec2:CreateVpc, ec2:RunInstances\n",
          "Actors": [
            {
              "Id": "user:AssumedRole:AROAW5WU5888888999999:i-0258a29e9796c5104",
              "User": {
                "Name": "sabasoc-report-ec2-instance-role-dangerous-admin-role",
                "Uid": "AROAW5WU5888888999999:i-0258a29e9796c5104",
                "Type": "AssumedRole",
                "CredentialUid": "ASIAW5WU5KQY5MBTRSSO",
                "Account": {
                  "Uid": "201327199353"
                }
              }
            }
          ],
          "Resources": [
            {
              "Uid": "AROAW5WU5888888999999:i-0258a29e9796c5104",
              "ResourceType": "ACCESS_KEY",
              "Data": {
                "AccessKey": {
                  "PrincipalId": "AROAW5WU5888888999999:i-0258a29e9796c5104",
                  "UserName": "sabasoc-report-ec2-instance-role-dangerous-admin-role",
                  "UserType": "AssumedRole"
                }
              }
            },
            {
              "Uid": "i-0258a29e9796c5104",
              "ResourceType": "EC2_INSTANCE",
              "Data": {
                "Ec2Instance": {
                  "ProductCodes": [],
                  "Ec2NetworkInterfaceUids": []
                }
              }
            }
          ],
          "Endpoints": [
            {
              "Id": "199.9.99.199:0",
              "Ip": "199.9.99.199",
              "Port": 0,
              "Location": {
                "City": "Tokyo",
                "Country": "JP",
                "Latitude": XX.YYYY,
                "Longitude": XXX.YYYY
              },
              "AutonomousSystem": {
                "Name": "AMAZON-02",
                "Number": ZZZZZ
              }
            },
            {
              "Id": "109.9.99.109:0",
              "Ip": "109.9.99.109",
              "Port": 0,
              "Location": {
                "City": "Tokyo",
                "Country": "JP",
                "Latitude": XX.YYYY,
                "Longitude": XXX.YYYY
              },
              "AutonomousSystem": {
                "Name": "KDDI CORPORATION",
                "Number": ZZZZ
              }
            }
          ],
          "Signals": [
            {
              "Uid": "arn:aws:guardduty:ap-northeast-1:devaccountid:detector/f2c9591f2f532635b18c0-detectorid/finding/78c9c367235b6cfbdda6a2ab310ef037",
              "Type": "FINDING",
              "Description": "Credentials for instance role sabasoc-report-ec2-instance-role-dangerous-admin-role were used from an external IP address.",
              "Name": "UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration.OutsideAWS",
              "CreatedAt": "2024-12-02T09:58:05.750Z",
              "UpdatedAt": "2024-12-02T10:25:42.703Z",
              "FirstSeenAt": "2024-12-02T09:48:55.000Z",
              "LastSeenAt": "2024-12-02T10:40:29.164Z",
              "Severity": 8,
              "Count": 7,
              "ResourceUids": [
                "AROAW5WU5888888999999:i-0258a29e9796c5104",
                "i-0258a29e9796c5104"
              ],
              "ActorIds": [
                "user:AssumedRole:AROAW5WU5888888999999:i-0258a29e9796c5104"
              ],
              "EndpointIds": [
                "109.9.99.109:0"
              ],
              "SignalIndicators": [
                {
                  "Key": "HIGH_RISK_API",
                  "Values": [
                    "cloudtrail:StopLogging"
                  ]
                },
                {
                  "Key": "ATTACK_TACTIC",
                  "Values": [
                    "Credential Access",
                    "Defense Evasion"
                  ]
                },
                {
                  "Key": "ATTACK_TECHNIQUE",
                  "Values": [
                    "T1562 - Impair Defenses",
                    "T1552.005 - Unsecured Credentials: Cloud Instance Metadata API"
                  ]
                }
              ]
            },
            {
              "Uid": "arn:aws:guardduty:ap-northeast-1:devaccountid:detector/f2c9591f2f532635b18c0-detectorid/finding/3ec9c36b71a26f8be34bdf106ac4f909",
              "Type": "FINDING",
              "Description": "Credentials for the EC2 instance role sabasoc-report-ec2-instance-role-dangerous-admin-role were used from a remote AWS account.",
              "Name": "UnauthorizedAccess:IAMUser/InstanceCredentialExfiltration.InsideAWS",
              "CreatedAt": "2024-12-02T10:07:30.116Z",
              "UpdatedAt": "2024-12-02T10:07:30.132Z",
              "FirstSeenAt": "2024-12-02T10:01:21.000Z",
              "LastSeenAt": "2024-12-02T10:02:09.000Z",
              "Severity": 8,
              "Count": 5,
              "ResourceUids": [
                "AROAW5WU5888888999999:i-0258a29e9796c5104",
                "i-0258a29e9796c5104"
              ],
              "ActorIds": [
                "user:AssumedRole:AROAW5WU5888888999999:i-0258a29e9796c5104"
              ],
              "EndpointIds": [
                "199.9.99.199:0"
              ],
              "SignalIndicators": [
                {
                  "Key": "HIGH_RISK_API",
                  "Values": [
                    "ec2:RunInstances"
                  ]
                },
                {
                  "Key": "ATTACK_TACTIC",
                  "Values": [
                    "Credential Access",
                    "Impact"
                  ]
                },
                {
                  "Key": "ATTACK_TECHNIQUE",
                  "Values": [
                    "T1496 - Resource Hijacking",
                    "T1552.005 - Unsecured Credentials: Cloud Instance Metadata API"
                  ]
                }
              ]
            }
          ],
          "SequenceIndicators": [
            {
              "Key": "HIGH_RISK_API",
              "Values": [
                "cloudtrail:StopLogging",
                "ec2:RunInstances",
                "ec2:CreateVpc",
                "ec2:DescribeInstances"
              ]
            },
            {
              "Key": "ATTACK_TACTIC",
              "Values": [
                "Credential Access",
                "Defense Evasion",
                "Discovery",
                "Impact"
              ]
            },
            {
              "Key": "ATTACK_TECHNIQUE",
              "Values": [
                "T1496 - Resource Hijacking",
                "T1562 - Impair Defenses",
                "T1578 - Modify Cloud Compute Infrastructure",
                "T1580 - Cloud Infrastructure Discovery",
                "T1552.005 - Unsecured Credentials: Cloud Instance Metadata API"
              ]
            }
          ]
        }
      }
    },
    "Severity": 9,
    "Title": "Potential credential compromise of AssumedRole/sabasoc-report-ec2-instance-role-dangerous-admin-role indicated by a sequence of actions.",
    "Type": "AttackSequence:IAM/CompromisedCredentials",
    "UpdatedAt": "2024-12-02T10:43:53.048Z",
    "AssociatedAttackSequenceArn": "arn:aws:guardduty:ap-northeast-1:devaccountid:detector/f2c9591f2f532635b18c0-detectorid/finding/e0c9c3727ceba0faf0391d35627351de"
  }
]

参考情報:アップデートに関する参考 ドキュメント

AWS News (Whats-new)

aws.amazon.com

AWS Document

GuardDuty Extended Threat Detection

docs.aws.amazon.com

Severity levels of GuardDuty findings

docs.aws.amazon.com

ここに以下の追記がされています。「クリティカル」に関連する記述のため、重要なポイントでしょう。以下はその翻訳です。

値の範囲: 9.0 - 10.0
説明: 「クリティカル」の深刻度レベルは、攻撃シーケンスが進行中であるか、または最近発生した可能性を示します。IAM ユーザーのサインイン資格情報や Amazon S3 バケットなど、1 つ以上の AWS リソースに対する不正アクセスが確認されており、これらのリソースが既に侵害されているか、または現在も侵害されている可能性が非常に高いことを示唆しています。

AWS Blog

Introducing Amazon GuardDuty Extended Threat Detection: AI/ML attack sequence identification for enhanced cloud security

aws.amazon.com

余談:どのようにして Critical を検出させたのか?

SSRF (Server-Side Request Forgery) のようなことを行ってみました。

具体的には、IMDSv1 の EC2 インスタンスのインスタンスプロファイルを用いて、一時認証キーを取得し、ローカル等から色々と操作してみました。

aws.amazon.com

関連しての記載ですが、SSRF の対策には EC2 インスタンス で IMDSv2 を「required」とすることや、AWS WAF の導入、そもそも EC2 インスタンス自体をインターネットフェイシングさせないこと等が重要です。

まとめ

AWS re:Invent 2024 期間中のアップデートより、Amazon GuardDuty の新機能である「GuardDuty Extended Threat Detection」をご紹介しました。

再掲(画面キャプチャ)

GuardDuty Extended Threat Detectionは、各インシデントごと「バラバラに」ではなく、それぞれをつながりのある「攻撃シーケンス」として検出し通知する新機能で、GuardDuty 初の「クリティカル」の Severity として検出してくれる機能です。

Amazon GuardDuty は進化し続けるセキュリティサービスであり、セキュリティ対策でも重要な役割を担っておりますが、このアップデートでさらに使いやすさや利便性が向上したように思われます。

では、またお会いしましょう。

*1:現地時間12月1日発表の機能のため AWS re:Invent 2024 が12月2日からだと考えると、正しくは re:Invent 期間外と言えるかもしれません

*2:例えば、CloudTrailを無効化した後、IAM User、VPC、Subnet、Sg、EC2 インスタンスを順に作成し、S3 からデータを持ち出すなど

佐竹 陽一 (Yoichi Satake) エンジニアブログの記事一覧はコチラ

マネージドサービス部所属。AWS資格全冠。2010年1月からAWSを利用してきています。2021-2022 AWS Ambassadors/2023-2024 Japan AWS Top Engineers/2020-2024 All Certifications Engineers。AWSのコスト削減、最適化を得意としています。