EDRStartupHinder: EDRスタートアッププロセスブロッカー
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
この記事は、EDRStartupHinderというリサーチツールについて説明しています。このツールはWindowsのBindlinkメカニズムを悪用し、重要なSystem32 DLLのロードをリダイレクトすることで、起動時に保護されたEDRプロセスをクラッシュさせます。優先度の高いサービスをインストールし、署名されていない代替DLLを提供することで、EDRコンポーネントの初期化を防ぎ、起動時にエンドポイントの保護を奪う手法です。
調査
著者は、Microsoft Defenderが起動時にmsvcp_win.dllをロードし、TDIグループに関連するサービスがDefenderより早く開始されることを確認しました。このツールは正規のDLLをコピーし、PEヘッダーを変更して改ざん版を作成し、DusmSVC-01というサービスを登録し、Defenderプロセス(MsMpEng.exe)を監視します。そして、Bindlinkを使用してDLL解決をリダイレクトし、Defenderが署名されていないDLLをロードしようとするようにします。プロセスがPPL保護下で実行されるため、署名されていないモジュールのロードがDefenderプロセスの終了を引き起こします。
軽減策
疑わしいまたは予期しないサービス作成イベントやbindlink.dllの使用を示すテレメトリーを監視してください。System32 DLLの整合性検証を強制し、予期しない重複、変更、またはロードパスリダイレクションについて警告します。DLLリダイレクションを可能にする書き込み権限を制限し、KnownDLLs周辺の制御を強化し、運用可能な場合にはコード署名ポリシーを強制することで攻撃の実現可能性を低減します。
対応策
DusmSVC-01という新しいサービスや異常なBindlink動作が検出された場合は、エンドポイントを隔離し、主要なSystem32 DLLの整合性を検証します。信頼できるソースやバックアップから変更されたファイルを復元し、悪意のあるサービスと関連するアーティファクトを削除します。フォレンジックレビューを完了し、スタートアップ時の保護バイパスに関連する追加の持続性、特権昇格、または後続の活動を特定します。
“graph TB %% Class Definitions classDef action fill:#99ccff classDef technique fill:#ffcc99 classDef operator fill:#ff9900 %% Nodes step_create_service[“<b>アクション</b> – <b>T1542 Pre-OS Boot</b><br/>ターゲットEDRサービスより前に開始するように設定された悪意のあるWindowsサービス(EDRStartupHinder)を作成する。”] class step_create_service action step_modify_registry[“<b>アクション</b> – <b>T1484 ドメインまたはテナントポリシーの変更</b><br/>レジストリでサービスグループの順序とBindlinkの設定を変更して、悪意のあるサービスを優先し、DLLのリダイレクトを可能にします。”] class step_modify_registry action step_hijack_dll[“<b>アクション</b> – <b>T1574.001 DLL 検索順序ハイジャッキング</b> & <b>T1055.001 動的リンクライブラリ注入</b><br/>Bindlinkを介して主要なDLL(例:msvcp_win.dll)をリダイレクトし、EDRプロセスが悪意のあるコピーをロードするようにします。”] class step_hijack_dll action step_corrupt_dll[“<b>アクション</b> – <b>T1574.001 DLL リダイレクト – PE ヘッダーの改ざん</b><br/>コピーされたDLLのPEヘッダーを変更して署名を無効にし、保護されたEDRプロセスがライブラリを拒否するようにします。”] class step_corrupt_dll action step_dos[“<b>アクション</b> – <b>T1499.004 エンドポイントサービス拒否</b><br/>EDRサービスが必要なDLLをロードできずに終了し、セキュリティコンポーネントに対するサービス拒否を達成します。”] class step_dos action %% Edges step_create_service u002du002d>|leads_to| step_modify_registry step_modify_registry u002du002d>|enables| step_hijack_dll step_hijack_dll u002du002d>|causes| step_corrupt_dll step_corrupt_dll u002du002d>|results_in| step_dos “
攻撃フロー
シミュレーション実行
前提条件:テレメトリーおよびベースラインの事前チェックが合格していること。
攻撃の流れとコマンド
攻撃者は、改ざんされたコピーを配布することでエンドポイント検出プラットフォームを無力化しようとしています。 msvcp_win.dll。手順は次の通りです。
- 信頼できるDLLを見つける in
C:WindowsSystem32. - コピー 攻撃者が制御する隠しディレクトリ(例:
C:ProgramDataFakeLib). - 署名の改ざん ファイル末尾に任意のバイトを追加することで、バイナリハッシュが変更され、オーセンティコード署名が無効になります。
- EDRのロードパスをトリガーする (ここではシミュレーションされていません)– 不正なDLLの存在により、EDRが初期化時に失敗します。
回帰テストスクリプト
# ---------------------------------------------------------------
# EDRStartupHinder シミュレーション – msvcp_win.dll のコピーと破損
# ---------------------------------------------------------------
# 1. ソースと悪意のある宛先を定義
$src = "$env:SystemRootSystem32msvcp_win.dll"
$dstDir = "C:ProgramDataFakeLib"
$dst = Join-Path $dstDir "msvcp_win.dll"
# 2. 宛先フォルダーを作成(非表示)
if (-not (Test-Path $dstDir)) {
New-Item -Path $dstDir -ItemType Directory | Out-Null
# ステルスを模倣するためにフォルダを隠す
(Get-Item $dstDir).Attributes += 'Hidden'
}
# 3. 正規のDLLをコピー
Copy-Item -Path $src -Destination $dst -Force
# 4. DLLを破損 – ランダムな4バイトを追加
$rand = -join ((65..90) + (97..122) | Get-Random -Count 4 | % {[char]$_})
[IO.File]::OpenWrite($dst).Seek(0, [IO.SeekOrigin]::End) | Out-Null
[IO.File]::WriteAllBytes($dst, [byte[]]($rand.ToCharArray() | ForEach-Object {[byte][char]$_}))
Write-Host "EDRStartupHinderのシミュレーション完了。DLLを$dstにコピーし、破損させました。"
クリーンアップコマンド
# 悪意のあるコピーを削除し、必要に応じて隠しフォルダーも削除
$dstDir = "C:ProgramDataFakeLib"
if (Test-Path $dstDir) {
Remove-Item -Path $dstDir -Recurse -Force
Write-Host "FakeLibディレクトリをクリーンアップしました。"
}
レポート終了