Qilin EDRキラー感染チェーン
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
このレポートでは、トロイの木馬化されたmsimg32.dllとして配信され、300以上のエンドポイント検出および応答製品を無効化または削除できる多段階ローダーについて説明しています。このローダーは、高度なSEH/VEH悪用、カーネルドライバ技術、およびハードウェアブレークポイントを組み合わせて、ユーザーモードフックの回避やセキュリティプロセスの停止を実現します。この活動はQilinランサムウェアエコシステムに関連しており、ThrottleStopツールから派生したカスタムドライバーを含みます。最終的な結果は、セキュリティサービスを終了し、コドインテグリティコールバックロジックを復旧または無効化することで攻撃者の制御を再度可能にする専用のEDRキラーペイロードです。
調査
研究者は、悪意のあるDLL、そのPEローダー、および2つのヘルパードライバであるrwdrv.sysとhlpdrv.sysをリバースエンジニアリングしました。この分析では、ローダーがシステムコールスロットポリシーテーブルを構築し、例外ディスパッチャーを改ざんし、IATフックを実行して実行をリダイレクトする方法を詳細に説明しています。その後、ベクタード例外処理を使用してshell32ベースのペイロードをステージして開始します。ドライバ層は生の物理メモリアクセスを公開し、カスタムIOCTLインターフェースを介してEDR関連のカーネルコールバックを削除または無効化し、保護されたプロセスを終了させるために活用されます。
緩和策
多層防御を使用し、単一のEDRコントロールに頼らないでください。異常なドライバロード活動、疑わしい物理メモリIOCTL使用、およびカーネルコールバック構造の予期しない変更を監視します。攻撃者が正規のシステムライブラリを置き換えるDLLサイドローディングを防ぎ、ハードウェアブレークポイントスタイルの回避に対するカバレッジを追加します。ClamAVやSnortなどのツールのルールセットを含め、ネットワークとエンドポイントの署名を最新のものに保ちます。
対応策
検出された場合、エンドポイントを隔離し、悪意のあるプロセスを停止し、疑わしいドライバをアンロードします。フォレンジックのためにフルメモリイメージをキャプチャし、特にrwdrv.sysとhlpdrv.sysをチェックして、カーネルコールバックと関連するセキュリティテレメトリの整合性を確認します。ファイル名msimg32.dll、ドライバロードイベント、IOCTL 0x2222008パターンの最新検出を配備します。ホストへの信頼を再び確立できない場合、システムの整合性確認を完了し、既知の良好なバックアップから回復します。
"graph TB %% クラス定義 classDef technique fill:#ffcc99 %% ノード定義 tech_initial_appinit["<b>技法</b> – <b>T1546.010 AppInit DLLs</b>: 不正なmsimg32.dllのサイドロード<br/><b>説明</b>: AppInit_DLLsレジストリ値を使用して、User32.dllをロードするすべてのユーザーモードプロセスに不正なDLLをロードさせます。"] class tech_initial_appinit technique tech_obfuscation["<b>技法</b> – <b>T1027 隠されたファイルや情報</b>: 暗号化されたペイロードとSEH/VEHトリック<br/><b>説明</b>: 不正なコードを暗号化またはその他の方法で隠し、構造化例外処理またはベクタード例外処理のトリックを使用して静的解析を回避します。"] class tech_obfuscation technique tech_dll_injection["<b>技法</b> – <b>T1055.001 DLL インジェクション</b>: ExitProcessのIATフック<br/><b>説明</b>: 標的プロセスに不正なDLLを注入し、そのインポートアドレステーブルを修正してExitProcess呼び出しをハイジャックします。"] class tech_dll_injection technique tech_hijack_flow["<b>技法</b> – <b>T1574 実行フローのハイジャック</b>: VEH/SEHハンドラとハードウェアブレークポイント<br/><b>説明</b>: 例外ハンドラを追加または交換し、ハードウェアブレークポイントを設定して不正なコードに実行をリダイレクトします。"] class tech_hijack_flow technique tech_reflective_load["<b>技法</b> – <b>T1620 リフレクティブコードローディング</b>: インメモリPE復号化と実行<br/><b>説明</b>: メモリ内でポータブル実行ファイルを復号化し、ディスクに書き込まずに実行します。"] class tech_reflective_load technique tech_elev_control["<b>技法</b> – <b>T1548 権限昇格制御メカニズムの悪用</b>: 物理メモリのR/Wにrwdrv.sysドライバをロードする<br/><b>説明</b>: 署名済みまたは脆弱なドライバをインストールして物理メモリへの読み書きアクセスを取得します。"] class tech_elev_control technique tech_priv_esc["<b>技法</b> – <b>T1068 権限昇格のための悪用</b>: カーネルオブジェクトの操作とEDRコールバックの無効化<br/><b>説明</b>: ロードされたドライバを使用してカーネル構造を操作し、エンドポイント検出および応答フックを無効化します。"] class tech_priv_esc technique tech_persistence_appinit["<b>技法</b> – <b>T1546.010 AppInit DLLs (持続性)</b>: 無効化されたEDR状態を維持する<br/><b>説明</b>: AppInit_DLLsを通じて不正なDLLを登録して再起動時に持続させ、EDRが無効のままの状態を維持します。"] class tech_persistence_appinit technique tech_sandbox_evasion["<b>技法</b> – <b>T1497.002 仮想化/サンドボックス回避</b>: ロケールチェックとブレークポイント検出<br/><b>説明</b>: システムのロケール設定を確認し、デバッガのブレークポイントを調査して解析環境を検出します。"] class tech_sandbox_evasion technique %% 攻撃フローの接続を表示 tech_initial_appinit –>|leads_to| tech_obfuscation tech_obfuscation –>|leads_to| tech_dll_injection tech_dll_injection –>|leads_to| tech_hijack_flow tech_hijack_flow –>|leads_to| tech_reflective_load tech_reflective_load –>|leads_to| tech_elev_control tech_elev_control –>|leads_to| tech_priv_esc tech_priv_esc –>|leads_to| tech_persistence_appinit tech_persistence_appinit –>|leads_to| tech_sandbox_evasion "
攻撃フロー
検出
Msimg32動的ライブラリのサイドローディング試行の可能性(image_load経由)
表示
検出用IOC(HashSha256):Qilin EDRキラー感染チェーン
表示
検出用IOC(HashSha1):Qilin EDRキラー感染チェーン
表示
検出用IOC(HashMd5):Qilin EDRキラー感染チェーン
表示
Qilinランサムウェア攻撃で読み込まれるEDRキラードライバーの検出[Windowsプロセス作成]
表示
Nt* シスコールを使用したEDR回避技術の検出 [Windowsシステム]
表示
Qilinランサムウェア攻撃で使用される悪意あるmsimg32.dllの検出 [Windowsイメージロード]
表示
シミュレーション実行
前提条件:テレメトリ & ベースラインプレフライトチェックが通過している必要があります。
根拠:このセクションでは、検出ルールをトリガーするために設計された敵の技術(TTP)の正確な実行を詳細に説明します。コマンドと説明は、特定されたTTPに直接反映し、検出ロジックが期待する正確なテレメトリを生成することを目的としています。
-
攻撃の流れとコマンド:
攻撃者は、ネイティブCの最小限のバイナリを作成し、これが明示的に ntdll.dll をダウンロードし、 NtTraceEvent をエクスポート名で呼び出すようにします。 バイナリはターゲットホスト上でVisual C++ビルドツールを使用してコンパイルされ、実行されます。 通常のWindows APIサーフェスを経由して呼び出されるため、プロセス作成イベントがイメージ(
ntdll.dll)を記録し CallTrace フィールドに「NtTraceEvent」という文字列が含まれており、シグマ条件が満たされます。その後、攻撃者は法医学的な痕跡を減少させるためにバイナリを削除します。 -
回帰テストスクリプト:
# --------------------------------------------------------- # ステップ1 – NtTraceEventを呼び出す一時的なCソースを作成する # --------------------------------------------------------- $src = @" #include <windows.h> typedef NTSTATUS (NTAPI *pNtTraceEvent)(HANDLE, ULONG, PVOID, ULONG); int main() { HMODULE hNtdll = LoadLibraryA("ntdll.dll"); if (!hNtdll) return 1; pNtTraceEvent NtTraceEvent = (pNtTraceEvent)GetProcAddress(hNtdll, "NtTraceEvent"); if (!NtTraceEvent) return 1; // ミニマルコール – このデモのための引数の大部分は無視されます NtTraceEvent(NULL, 0, NULL, 0); return 0; } "@ $tmpPath = "$env:TEMPNtTraceDemo.c" $exePath = "$env:TEMPNtTraceDemo.exe" $src | Set-Content -Path $tmpPath -Encoding ASCII # --------------------------------------------------------- # ステップ2 – cl.exeを使用してコンパイルする(Visual C++ビルドツールがインストールされていると仮定) # --------------------------------------------------------- $vcVars = "$env:ProgramFiles(x86)Microsoft Visual Studio2019BuildToolsVCAuxiliaryBuildvcvars64.bat" if (Test-Path $vcVars) { & cmd /c "`"$vcVars`" && cl /nologo /O2 /Fe:`"$exePath`" `"$tmpPath`"" } else { Write-Error "Visual C++ ビルドツールが見つかりません。 このスクリプトを実行する前にインストールしてください。" exit 1 } # --------------------------------------------------------- # ステップ3 – バイナリを実行する(これによりルールがトリガーされるべきです) # --------------------------------------------------------- & $exePath # --------------------------------------------------------- # ステップ4 – アーティファクトをクリーンアップする # --------------------------------------------------------- Remove-Item -Force $tmpPath, $exePath -
クリーンアップコマンド:
# 残ったファイルを削除する(管理者として実行) Get-ChildItem "$env:TEMPNtTraceDemo.*" -ErrorAction SilentlyContinue | Remove-Item -Force