ケーススタディ:Defenderの予測的シールドがGPOベースのランサムウェアを実行前にブロックした方法
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
Microsoft Defender は、人間が操作するランサムウェア攻撃を、大規模な教育機関を標的にしたもので、セキュリティ設定を弱めるために使用されるグループポリシーオブジェクト (GPO) の悪用を検出し、スケジュールされたタスクを通じてランサムウェアを配布することで阻止しました。
調査
攻撃者はドメイン管理者アカウントを侵害し、Active Directory の列挙を実行し、クレデンシャルをブルートフォースし、Kerberos チケットと NTDS データを収集し、不正なローカルアカウントを作成し、侵害ポリシーを強制し、スケジュールされたタスクを通じてランサムウェアの配信をトリガーする悪意のある GPO を展開しました。
緩和策
Defender の予測的なシールドは悪意のある GPO アクティビティを特定し、一時的な GPO 強化を実施し、スケジュールされたタスクのランサムウェア展開をブロックし、97% のデバイスで暗号化を防止しました。
応答
検出されたら、防御側は即座に GPO 強化を有効にし、侵害されたアカウントを封じ込め、疑わしい SMB トラフィックをブロックし、許可されていないローカルアカウントの作成を含む追加の持続手法を調査します。
"graph TB %% Class Definitions classDef action fill:#99ccff classDef technique fill:#ffcc99 classDef builtin fill:#cccccc %% Reconnaissance Nodes recon_action["<b>Action</b> – Reconnaissance<br/>AD Explorer を使用して Active Directory を列挙し、パスワード推測を行いました。"] class recon_action action recon_brute["<b>Technique</b> – T1110 ブルートフォース: パスワード推測<br/><b>説明</b> 試行錯誤を使ってパスワードを推測します。"] class recon_brute technique recon_account["<b>Technique</b> – T1087.002 アカウント発見: ドメインアカウント<br/><b>説明</b> ドメインユーザーアカウントを列挙します。"] class recon_account technique recon_gpo["<b>Technique</b> – T1615 グループポリシー探索<br/><b>説明</b> ドメインコントローラーからグループポリシー設定を取得します。"] class recon_gpo technique %% Reconnaissance Connections recon_action –>|uses| recon_brute recon_action –>|discovers| recon_account recon_action –>|discovers| recon_gpo %% Credential Access Nodes action_cred["<b>Action</b> – クレデンシャルアクセス<br/>Kerberoasting を行い、NTDS.dit をダンプしました。"] class action_cred action tech_kerb["<b>Technique</b> – T1558.003 Kerberoasting<br/><b>説明</b> サービスチケットを要求し、オフラインで解除します。"] class tech_kerb technique tech_ntds["<b>Technique</b> – T1003.003 OS クレデンシャルダンプ: NTDS<br/><b>説明</b> Active Directory データベースからパスワードハッシュを抽出します。"] class tech_ntds technique %% Credential Access Connections action_cred –>|uses| tech_kerb action_cred –>|uses| tech_ntds %% Persistence Nodes action_persist["<b>Action</b> – 持続性<br/>侵害されたホストに新しいローカルアカウントを作成しました。"] class action_persist action tech_create_local["<b>Technique</b> – T1136.001 アカウント作成: ローカルアカウント<br/><b>説明</b> 進行中のアクセスのためにローカルユーザーアカウントを追加します。"] class tech_create_local technique %% Persistence Connections action_persist –>|uses| tech_create_local %% Lateral Movement Nodes action_lateral["<b>Action</b> – 横移動<br/>盗まれたドメイン資格情報を使用して、SMB を介してリモート管理シェアにアクセスしました。"] class action_lateral action tech_smb["<b>Technique</b> – T1021.002 リモートサービス SMB/Windows 管理シェア<br/><b>説明</b> 横移動のために SMB シェアを活用します。"] class tech_smb technique %% Lateral Movement Connections action_lateral –>|uses| tech_smb %% Defense Evasion Nodes action_evasion["<b>Action</b> – 防御回避<br/>悪意のある GPO を展開して Microsoft Defender を無効にしました。"] class action_evasion action tech_gpo_mod["<b>Technique</b> – T1484 ドメインまたはテナントポリシーの変更<br/><b>説明</b> グループポリシーオブジェクトを変更してセキュリティ設定を変更します。"] class tech_gpo_mod technique tech_impair["<b>Technique</b> – T1562.001 防御の妨害 ツールを無効化または修正<br/><b>説明</b> セキュリティツールをオフにしたり、修正したりします。"] class tech_impair technique %% Defense Evasion Connections action_evasion –>|modifies| tech_gpo_mod action_evasion –>|disables| tech_impair %% Impact Preparation Nodes action_impact["<b>Action</b> – 影響準備<br/>GPO を通じてスケジュールされたタスクを作成し、すべてのドメインマシン上でファイルをコピーして実行しました。"] class action_impact action tech_scheduled["<b>Technique</b> – T1053 スケジュールされたタスク/ジョブ<br/><b>説明</b> 指定された時間にコマンドの実行をスケジュールします。"] class tech_scheduled technique tech_cmd["<b>Technique</b> – T1059.003 コマンドおよびスクリプトインタープリタ Windows コマンドシェル<br/><b>説明</b> バッチファイルを cmd.exe を使用して実行します。"] class tech_cmd technique tech_rundll["<b>Technique</b> – T1218.011 システムバイナリプロキシ実行 Rundll32<br/><b>説明</b> rundll32.exe を使用して悪意のある DLL をロードします。"] class tech_rundll technique %% Impact Preparation Connections action_impact –>|creates| tech_scheduled action_impact –>|executes| tech_cmd action_impact –>|uses| tech_rundll %% Ransomware Deployment Nodes action_ransom["<b>Action</b> – ランサムウェア展開<br/>ペイロードがファイルを暗号化しようとする際に、Defender は多くのデバイスで GPO の伝搬をブロックしました。"] class action_ransom action tech_encrypt["<b>Technique</b> – T1486 影響のためにデータを暗号化<br/><b>説明</b> 被害者のデータを暗号化して身代金を要求します。"] class tech_encrypt technique %% Ransomware Deployment Connections action_ransom –>|uses| tech_encrypt %% Overall Flow Sequence recon_action –>|leads_to| action_cred action_cred –>|leads_to| action_persist action_persist –>|leads_to| action_lateral action_lateral –>|leads_to| action_evasion action_evasion –>|leads_to| action_impact action_impact –>|leads_to| action_ransom "
攻撃フロー
シミュレーション実行
前提条件: テレメトリとベースラインのプリフライトチェックが合格している必要があります。
理論: このセクションは、検出規則をトリガーするために設計された攻撃者の技術 (TTP) の正確な実行を詳述します。 コマンドとナラティブは検出ロジックによって予期される正確なテレメトリを生成することを目的とし、特定された TTP を直接反映する必要があります。
攻撃のナラティブ & コマンド
-
ADExplorer による Active Directory の列挙 – 攻撃者は地の利を活かしたユーティリティを使用しています ADExplorer.exe AD データベースを閲覧し、プロセス作成イベントを生成しています
Image|endswith: 'ADExplorer.exe'. -
クレデンシャルブルートフォース (T1110) – 攻撃者はドメインアカウントに対してパスワードスプレーを実施し、繰り返し失敗したログオン (Event 4625) が発生します。失敗の理由は
%#13(“ユーザーが信頼されていないドメインからログオンしようとしました”)。 -
Kerberoasting (T1558.003) – オープンソースツール Rubeusを使用して、攻撃者はコンピュータアカウントの SPN の Kerberos サービスチケットを要求します (例えば、
HOST01$)。 各リクエストは Event 4769 を生成し、ServiceNameは次で終わります$. -
NTDS ダンプ (T1003.003) – 攻撃者はシステムドライブのボリュームシャドウコピーを作成し、
NTDS.ditを抽出し、次のコマンドを使用ntdsutilし、Event 4662 が発生してObjectType = "ds"andOperationType = "Replication".
とします。すべてのアクションが同じホスト上で 5 分以内に実行され、現実的な攻撃後の“収穫”フェーズを模倣します。
回帰テストスクリプト
# -------------------------------------------------
# シミュレーションスクリプト – すべての4つの検出パスをトリガーします
# -------------------------------------------------
# 1. ADExplorer の実行 (プロセス作成)
$adExplorerPath = "$env:ProgramFilesSysinternalsADExplorer.exe"
if (-Not (Test-Path $adExplorerPath)) {
Write-Host "ADExplorer が見つかりません - テスト用のプレースホルダーをダウンロードします。"
# 任意の exe を予想される名前にコピーしてシミュレートします
Copy-Item "$env:SystemRootSystem32notepad.exe" $adExplorerPath
}
Start-Process -FilePath $adExplorerPath -ArgumentList "/quiet" -WindowStyle Hidden
Start-Sleep -Seconds 5
# 2. ブルートフォースログイン試行 (4625 と %#13)
$domain = "CONTOSO"
$user = "testuser"
$badPwd = "IncorrectPassword123!"
1..3 | ForEach-Object {
$null = [System.DirectoryServices.AccountManagement.PrincipalContext]::new('Domain', $domain).ValidateCredentials($user, $badPwd)
Start-Sleep -Milliseconds 500
}
# 3. Rubeus を使用した Kerberoasting (PATH に Rubeus.exe が必要)
$rubeusPath = "$env:ProgramFilesRubeusRubeus.exe"
if (-Not (Test-Path $rubeusPath)) {
Write-Host "Rubeus が見つかりません - Kerberoasting ステップをスキップします。"
} else {
& $rubeusPath kerberoast /outfile:"C:Tempkerb_tickets.kirbi"
}
Start-Sleep -Seconds 5
# 4. VSS を使用した NTDS.dit の抽出 (4662 レプリケーション)
# VSS シャドウコピーを作成し、NTDS.dit をコピーする
$shadow = (vssadmin list shadows | Select-String -Pattern "ShadowCopy Volume" -Context 0,1).Line.Split()[-1]
$ntdsSource = "$shadowWindowsNTDSNTDS.dit"
$ntdsDest = "C:TempNTDS_dump.dit"
if (Test-Path $ntdsSource) {
Copy-Item -Path $ntdsSource -Destination $ntdsDest -Force
}
Start-Sleep -Seconds 5
Write-Host "シミュレーションが完了しました。すべてのテレメトリが取り込まれるはずです。"
クリーンアップコマンド
# -------------------------------------------------
# クリーンアップ – シミュレーションによって作成されたアーティファクトを削除します
# -------------------------------------------------
# 作成された場合、偽の ADExplorer を削除
Remove-Item -Path "$env:ProgramFilesSysinternalsADExplorer.exe" -ErrorAction SilentlyContinue
# Kerberos ダンプを削除
Remove-Item -Path "C:Tempkerb_tickets.kirbi" -ErrorAction SilentlyContinue
# NTDS ダンプを削除
Remove-Item -Path "C:TempNTDS_dump.dit" -ErrorAction SilentlyContinue
# 作成されたシャドウコピーをクリア (管理者権限が必要)
# vssadmin delete shadows /all /quiet
Write-Host "クリーンアップ完了。"