ダークゲートの内部解析
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
DarkGateは、犯罪市場でマルウェア・アズ・ア・サービスとして販売されているDelphiベースのローダーです。完全なRAT機能、動的API解決、およびカスタムベース64文字セット、Union-APIスタイルのような多層の回避トリックを含んでいます。 システムコール のロードとAPCの注入。このツールは「RastaFarEye」とされる売り手に帰属しており、TA577やDucktailといったアクターに採用されています。HTTPを介してC2と通信し、難読化されたペイロードを持ち、リモートデスクトップユーティリティの展開、Discordトークンの窃取、およびインタラクティブなリバースシェルの実行が可能です。
DarkGateマルウェア解析
この出版物は、DarkGateの実行ファイルのリバースエンジニアリングを詳細に解説し、独自の設定スクランブリング、XOR駆動のBotID生成、暗号化されたログを説明しています。ローダーの持続技術、権限昇格経路、トークンの窃盗ワークフロー、PsExecやExtexportなどの正当なバイナリの悪用によるDLLサイドローディングをカタログ化しています。さらに、C2通信パターン、デフォルトのhVNC資格情報、および一般的に使用されるHTTPポート(2351および9999)を文書化しています。
緩和策
ブルーチームは参照されたファイルやレジストリのRunエントリの作成に注意し、デフォルトのhVNC資格情報を即座に無効化またはブロックし、承認されていないDLL読み込みにPsExecやExtexportが使用されているのを検出すべきです。行動分析はUnion-APIシステムコールの使用、NtTestAlertを介したAPC注入、および親PIDのスプーフィングをカバーすべきです。ネットワークディフェンスは、奇異なHTTPポートをフラグ付けし、DarkGateのカスタムベース64アルファベットをデコードしようとすることでC2トラフィックを特定できます。
対応
DarkGateの活動が確認されたら、影響を受けたエンドポイントを孤立させ、文書化されたアーティファクトを収集し、悪意のあるプロセスを停止し、すべての持続的な進入点を掃除します。公開された資格情報をローテーションし、既知のC2ドメインやIP範囲をブロックします。詳細なフォレンジックレビューによって、二次ペイロードの特定や、Extexportや関連ローダーを通じて導入されたすべてのDLLが消去されたことを確認します。
mermaid graph TB %% クラスの定義 classDef technique fill:#ffcc99 classDef tool fill:#c2e0ff classDef action fill:#d9ffd9 %% ノード – テクニック step_initial_infection[“<b>技術</b> – <b>T1055.001: AutoItスクリプトを使用した初期アクセス</b><br />AutoItスクリプトは被害者システムにマルウェアペイロードを配信するのに使用されます。”] class step_initial_infection technique step_dynamic_api[“<b>技術</b> – <b>T1027.007: 難読化/保存されたファイル – 動的API解決</b><br />悪意のあるコードは実行時に必要なWindows APIを解決し、静的解析を回避します。”] class step_dynamic_api technique step_union_syscall[“<b>技術</b> – <b>T1106: ネイティブAPI</b><br />Union APIシステムコールの回避技法を実行して、悪意のある挙動を監視ツールから隠します。”] class step_union_syscall technique step_process_injection[“<b>技術</b> – <b>T1055.004: プロセス注入 – APC</b><br />非同期プロシージャコール注入を使用して、正当なプロセス内で悪意のあるコードを実行します。”] class step_process_injection technique step_token_manipulation[“<b>技術</b> – <b>T1134: アクセストークン操作</b><br />攻撃者はアクセストークンを盗んだり変更して権限を高めます。”] class step_token_manipulation technique step_priv_esc_psexec[“<b>技術</b> – <b>T1548.002: 権限昇格制御メカニズムの悪用 – PsExec</b><br />PsExecはリモートシステム上の高権限ユーザーとしてコマンドを実行するために利用されます。”] class step_priv_esc_psexec technique step_persistence[“<b>技術</b> – <b>T1547.001: 起動時またはログオン時の初期化スクリプト – LNKとレジストリのRun</b><br />ショートカットファイルとRunレジストリキーが作成され、マルウェアが起動時に開始されることを保証します。”] class step_persistence technique step_keylogging[“<b>技術</b> – <b>T1056.001: 入力キャプチャ – キーロガー</b><br />ユーザーのキーストロークを記録して資格情報や機密データをキャプチャします。”] class step_keylogging technique step_remote_vnc[“<b>技術</b> – <b>T1021.005: リモートサービス – VNC</b><br />隠されたVNCサーバーが、攻撃者にインタラクティブなリモートデスクトップアクセスを提供します。”] class step_remote_vnc technique step_command_execution[“<b>技術</b> – <b>T1059.001: コマンドおよびスクリプトインタープリター – PowerShell</b> および <b>T1059.003: コマンドおよびスクリプトインタープリター – Windowsコマンドシェル</b><br />PowerShellおよびcmdは追加の攻撃者コマンドを実行するために使用されます。”] class step_command_execution technique step_c2_communication[“<b>技術</b> – <b>T1102.002/T1102.003: アプリケーション層プロトコル – ウェブプロトコル(HTTP/HTTPS)</b> および <b>T1132.002: データエンコーディング – 標準エンコーディング</b><br />C2トラフィックは、通常のWebトラフィックに混じるようにカスタムエンコードでHTTPで送信されます。”] class step_c2_communication technique step_environment_checks[“<b>技術</b> – <b>T1497.001: 仮想化/サンドボックスの回避 – システムチェック</b> および <b>T1112: レジストリの変更</b><br />マルウェアは環境を調査し、存在を隠すためにレジストリ値を変更します。”] class step_environment_checks technique %% ノード – ツール tool_autoit[“<b>ツール</b> – <b>名前</b>: AutoIt<br /><b>説明</b>: 初期感染スクリプトの作成に使用されるスクリプト言語。”] class tool_autoit tool tool_psexec[“<b>ツール</b> – <b>名前</b>: PsExec<br /><b>説明</b>: 高権限でプロセスを実行するためのリモート実行ユーティリティ。”] class tool_psexec tool tool_vnc[“<b>ツール</b> – <b>名前</b>: 隠しVNCサーバー<br /><b>説明</b>: 攻撃者にステルスモードのリモートデスクトップ能力を提供します。”] class tool_vnc tool %% 接続 – 攻撃フロー step_initial_infection u002du002d>|使用| tool_autoit step_initial_infection u002du002d>|につながる| step_dynamic_api step_dynamic_api u002du002d>|につながる| step_union_syscall step_union_syscall u002du002d>|につながる| step_process_injection step_process_injection u002du002d>|につながる| step_token_manipulation step_token_manipulation u002du002d>|につながる| step_priv_esc_psexec step_priv_esc_psexec u002du002d>|使用| tool_psexec step_priv_esc_psexec u002du002d>|につながる| step_persistence step_persistence u002du002d>|につながる| step_keylogging step_keylogging u002du002d>|につながる| step_remote_vnc step_remote_vnc u002du002d>|使用| tool_vnc step_remote_vnc u002du002d>|につながる| step_command_execution step_command_execution u002du002d>|につながる| step_c2_communication step_c2_communication u002du002d>|につながる| step_environment_checks
攻撃フロー
検出
NtQueueApcThreadとNtTestAlertによるDarkGateのAPC注入検出 [Windows Sysmon]
表示
DarkGateマルウェアコマンド実行と権限昇格検出 [Windowsプロセス作成]
表示
検出するためのIOC(HashMd5):DarkGate内部
表示
検出するためのIOC(HashSha256):DarkGate内部
表示
異常な場所からのAutoHotKeyとAutoITの疑わしい実行(プロセス作成を介して)
表示
可能な持続点 [ASEP – ソフトウェア/NTUSERハイブ] (registry_eventを介して)
表示
シミュレーション実行
前提条件:テレメトリー&ベースラインの事前チェックが合格していること。
-
攻撃のストーリー&コマンド:
模擬対象はすでにエンドポイントに侵入しており、持続的なRDPアクセスの確立を目指しています。まず、cmdkeyを使用して資格情報を収集しそれを保存し、次にpsexec.exeを使用して横移動します。最後にキーロガースタブをドロップするPowerShellペイロードを起動します。各ステップは、検出ルールが監視する正確なプロセス作成イベントを生成するように設計されています。cmdkey、続いてpsexec.exeを使用して横移動し、最後にキーストロークロガースタブをドロップするPowerShellペイロードを起動します。各ステップは、検知ルールが監視する正確なプロセス生成イベントを生成するように設計されています。- 資格情報の収集 (T1552.001) – ルールの
selection_cmdkeyパターンに一致する作成された資格情報エントリを保存します。 - 横移動 (T1219) – リモートホストに対して
psexec.exeを実行し、新しいPowerShellセッションを生成するコマンドを呼び出します。 - PowerShellの実行 (T1059.001) – 悪意のあるスクリプトを読み込むPowerShellコマンドを実行します(ここではベース64でエンコードされた無害なコマンドでシミュレートされています)。
- キーロガーの展開 (T1056.001) – 呼び出す小さなCバイナリをコンパイルして実行します
GetAsyncKeyState、APIフィールドマッチを生成します。
- 資格情報の収集 (T1552.001) – ルールの
-
リグレッションテストスクリプト:
# DarkGateシミュレーションスクリプト – PowerShell # -------------------------------------------------- # 1. Cmdkey資格情報エントリ(検出パターンに一致) $generic = '""' # DarkGateで使用される空の汎用 $user = 'SafeMode' # ルールが期待するユーザー名 $pass = 'darkgatepassword0' # ルールが期待するパスワード cmd.exe /c cmdkey /generic:$generic /user:$user /pass:$pass # 2. PsExecによる横移動(バイナリがPATHに存在するか完全パスを指定する必要があります) $remoteHost = '10.0.0.5' $psexecPath = "$env:SystemRootSystem32psexec.exe" if (Test-Path $psexecPath) { & $psexecPath \$remoteHost -accepteula cmd /c "whoami" } else { Write-Host "PsExecが$psexecPathで見つかりませんでした – このステップをスキップします。" } # 3. PowerShellの実行(ベース64エンコードされた無害なコマンド) $psCommand = 'Write-Output "PowerShell payload executed"' $encoded = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($psCommand)) powershell.exe -EncodedCommand $encoded # 4. キーロガースタブのコンパイルと実行 $cSource = @" #include <windows.h> int main() { // APIマッチを満たすためのGetAsyncKeyStateの単純な呼び出し GetAsyncKeyState(VK_RETURN); return 0; } "@ $srcPath = "$env:TEMPkeylog_stub.c" $exePath = "$env:TEMPkeylog_stub.exe" $cSource | Set-Content -Path $srcPath -Encoding ASCII # Visual C++でコンパイル(cl.exeがPATHにある必要があります) cl.exe /nologo /O2 /Fe:$exePath $srcPath if (Test-Path $exePath) { & $exePath } -
クリーンアップコマンド:
# 資格情報のエントリを削除 cmd.exe /c cmdkey /delete:$generic # 一時ファイルを削除 Remove-Item -Force -ErrorAction SilentlyContinue "$env:TEMPkeylog_stub.c" Remove-Item -Force -ErrorAction SilentlyContinue "$env:TEMPkeylog_stub.exe" # オプション:スクリプトによって起動された任意のpsexecまたはpowershellプロセスを終了します Get-Process -Name psexec, powershell -ErrorAction SilentlyContinue | Stop-Process -Force