SOC Prime Bias: 中程度

09 12月 2025 18:46

Castle RAT クライアント マルウェア: 戦術、技術、および取引の専門技術

Author Photo
Ruslan Mikhalov Chief of Threat Research at SOC Prime linkedin icon Follow
Castle RAT クライアント マルウェア: 戦術、技術、および取引の専門技術
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

サマリー

CastleRATは2025年3月に初めて観察されたリモートアクセス型トロイの木馬であり、PythonとコンパイルされたCバリアントの両方で出荷されています。システムのメタデータ、キーストローク、クリップボードの内容、スクリーンショット、メディアデバイスの詳細を収集し、RC4暗号化を使用してC2サーバーにこの情報を流出させます。マルウェアは追加のペイロードを取得し、rundll32を介してそれらを起動し、スケジュールされたタスクとUAC(ユーザーアカウント制御)バイパス方法を通じて永続性を確立できます。

調査

Splunkの脅威研究チームはPythonとCの実装をリバースエンジニアリングし、システムディスカバリ、キーロギング、スクリーンキャプチャ、オーディオ/ビデオデバイスの列挙、デッドドロップリゾルバー、権限昇格のためのハンドル複製を含むMITRE ATT&CK技術にその動作をマッピングしました。調査は、CastleRATが正当なWindowsバイナリ(rundll32, ComputerDefaults.exe)に依存していること、および公開IPアドレスを取得するためにwww.ip-api.comを使用していることを強調しました。

緩和策

防御者は、見慣れないドメインへの不審なアウトバウンド接続、RC4で暗号化されたトラフィックパターン、序数に基づくDLLロードを使用したrundll32の実行を検出する必要があります。CastleRATを起動するために作成されたスケジュールされたタスク、ComputerDefaults.exeを利用したUACバイパスの試み、ミュートオーディオブラウザーフラグで起動されるプロセスを監視してください。悪用されたSteamコミュニティページなど、既知のデッドドロップリゾルバーの場所へのアクセスをブロックします。

対応

CastleRATアクティビティが特定された場合、影響を受けたホストを隔離し、悪意のあるプロセスを終了し、関連するスケジュールされたタスクや永続性のアーティファクトを削除します。プロセス階層、コマンドライン引数、およびレジストリの変更などの法医学的証拠を収集します。追加のDLLプラグインとC2チャネルを包括的に追跡し、環境全体への修復および強化策を展開します。

mermaid graph TB %% Class definitions classDef technique fill:#e6f7ff %% Node definitions t1016_001[“<b>技術</b> – T1016.001 システムネットワーク構成の発見<br />コンピューター名、ユーザー名、マシンGUID、OSバージョン、およびパブリックIPアドレスなどのシステムの詳細を収集してC2に送信する”] class t1016_001 technique t1115[“<b>技術</b> – T1115 クリップボードデータ<br />Windowsクリップボードからデータを収集し、しばしばシミュレートされた貼り付けアクションを使用してそれを流出させる”] class t1115 technique t1036[“<b>技術</b> – T1036 偽装<br />落とされたファイルや環境変数を正当なPythonまたはJavaコンポーネントとして見せかける名前”] class t1036 technique t1056_001[“<b>技術</b> – T1056.001 入力キャプチャ: キーロギング<br />キーストロークを傍受し、ローカルファイルに書き込み、RC4でファイルを暗号化して攻撃者に送信する”] class t1056_001 technique t1559[“<b>技術</b> – T1559 プロセス間通信<br />標準ストリームが匿名パイプを通してリダイレクトされた隠しシェルプロセスを生成し、コンソールを表示せずにリモートでコマンドを実行できるようにします”] class t1559 technique t1123[“<b>技術</b> – T1123 オーディオキャプチャ<br />Media Foundationを介してメディアキャプチャデバイスを列挙する”] class t1123 technique t1125[“<b>技術</b> – T1125 ビデオキャプチャ<br />Media Foundationを介してメディアキャプチャデバイスを列挙する”] class t1125 technique t1218_011[“<b>技術</b> – T1218.011 システムバイナリプロキシ実行: Rundll32<br />序数によって悪意のあるDLLエクスポート関数をロードする”] class t1218_011 technique t1055_001[“<b>技術</b> – T1055.001 プロセス注入: ダイナミックリンクライブラリ注入<br />rundll32.exeを使用して悪意のあるDLLをロードする”] class t1055_001 technique t1547_010[“<b>技術</b> – T1547.010 ブートまたはログオンAutostart実行: ポートモニター<br />C2から追加のDLLプラグインをダウンロードし、RC4でそれらを復号してロードする”] class t1547_010 technique t1053[“<b>技術</b> – T1053 スケジュールされたタスク/ジョブ<br />マルウェアを起動するためのスケジュールされたタスクを作成する”] class t1053 technique t1113[“<b>技術</b> – T1113 画面キャプチャ<br />定期的にスクリーンショットをキャプチャし、それを流出させます”] class t1113 technique t1102_001[“<b>技術</b> – T1102.001 ウェブサービス: デッドドロップリゾルバー<br />無害な外部ウェブサイトから設定やペイロードを取得する”] class t1102_001 technique t1127[“<b>技術</b> – T1127 信頼された開発者ユーティリティプロキシ実行<br />ComputerDefaults.exeとハンドル重複を使用してUACをバイパスし、昇格された権限でコードを実行する”] class t1127 technique t1027[“<b>技術</b> – T1027 難読化されたファイルまたは情報<br />コマンドとデータペイロードにRC4暗号化を使用する”] class t1027 technique t1048_001[“<b>技術</b> – T1048.001 代替プロトコルによる流出: 対称暗号化非C2プロトコル<br />暗号化されたデータをC2に送信する”] class t1048_001 technique t1132_001[“<b>技術</b> – T1132.001 データエンコーディング: 標準エンコーディング<br />送信前にデータをエンコードする”] class t1132_001 technique %% Connections showing attack flow t1016_001 u002du002d>|leads_to| t1115 t1115 u002du002d>|leads_to| t1036 t1036 u002du002d>|leads_to| t1056_001 t1056_001 u002du002d>|leads_to| t1559 t1559 u002du002d>|leads_to| t1123 t1123 u002du002d>|leads_to| t1125 t1125 u002du002d>|leads_to| t1218_011 t1218_011 u002du002d>|leads_to| t1055_001 t1055_001 u002du002d>|leads_to| t1547_010 t1547_010 u002du002d>|leads_to| t1053 t1053 u002du002d>|leads_to| t1113 t1113 u002du002d>|leads_to| t1102_001 t1102_001 u002du002d>|leads_to| t1127 t1127 u002du002d>|leads_to| t1027 t1027 u002du002d>|leads_to| t1048_001 t1048_001 u002du002d>|leads_to| t1132_001

攻撃の流れ

シミュレーションの実行

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

理由:このセクションでは、検出ルールをトリガーするように設計されたアドバサリの技術(TTP)の正確な実行を詳細に説明します。コマンドと物語はTTPに直接反映され、検出ロジックに期待されるテレメトリを生成することを目的とすべきです。抽象的または無関係な例は誤診につながります。

  • 攻撃の物語とコマンド:

    1. ステージ1 – CastleRATバイナリの展開: 攻撃者はコピーを作成します CastleRAT.exe 犠牲者の %APPDATA% ディレクトリに配置してユーザーデータに溶け込ませます。
    2. ステージ2 – キーロギングの実行: 小さなC#インメモリローダーを使って攻撃者は SetWindowsHookEx を呼び出し、低レベルのキーボードフックをインストールし、Sysmonがプロセス作成イベントのCallTraceにAPIを記録するようにします。
    3. ステージ3 – 権限昇格: 同じローダーが次に DuplicateHandle を呼び出し、特権システムプロセス(例: lsass.exe )からハンドルを複製し、マルウェアがSYSTEM権限で実行できるようにします。両方のAPI呼び出しがSysmonの同じCallTraceに現れ、検出ルールの基準を満たしています。
  • 回帰テストスクリプト:

    # -------------------------------------------------
    # CastleRATシミュレーション – SetWindowsHookExとDuplicateHandleをトリガー
    # -------------------------------------------------
    $castlePath = "$env:APPDATACastleRAT.exe"
    
    # 1. 実際のペイロードをロードする最小スタブをドロップ(ここではシミュレート)
    $payload = @"
    using System;
    using System.Runtime.InteropServices;
    public class Loader {
        [DllImport("user32.dll")]
        public static extern IntPtr SetWindowsHookEx(int idHook, IntPtr lpfn, IntPtr hMod, uint dwThreadId);
        [DllImport("kernel32.dll", SetLastError = true)]
        public static extern bool DuplicateHandle(IntPtr hSourceProcessHandle,
                                                  IntPtr hSourceHandle,
                                                  IntPtr hTargetProcessHandle,
                                                  out IntPtr lpTargetHandle,
                                                  uint dwDesiredAccess,
                                                  bool bInheritHandle,
                                                  uint dwOptions);
        public static void Execute() {
            // 低レベルのキーボードフックをインストール(WH_KEYBOARD_LL = 13)
            SetWindowsHookEx(13, IntPtr.Zero, IntPtr.Zero, 0);
            // 現在のプロセスからハンドルを複製(シミュレート)
            IntPtr dupHandle;
            DuplicateHandle((IntPtr)-1, (IntPtr)0x1234, (IntPtr)-1, out dupHandle, 0, false, 0);
        }
    }

“@

# C#コードをその場でコンパイル
Add-Type -TypeDefinition $payload -Language CSharp

# 現在のPowerShellプロセス(CastleRAT.exeとして機能)をターゲットパスにコピー
Copy-Item -Path $PSCommandPath -Destination $castlePath -Force

# 悪意のあるペイロードを実行
[Loader]::Execute()

# プロセスを短時間生かして、Sysmonがコールスタックをログに記録できるようにする
Start-Sleep -Seconds 5
  • クリーンアップコマンド:

    # シミュレートされたCastleRATバイナリを削除
    Remove-Item -Path "$env:APPDATACastleRAT.exe" -Force
    
    # オプションでフックをアンロード(スタブでは不要ですが完全性のために含めています)
    # 上記のNULLコールバックを使用しているSetWindowsHookEx呼び出しに対して明示的なアンロードは不要です。