SOC Prime Bias: 重大

09 4月 2026 17:52

チェーンシェル: MuddyWaterとロシアのMaaS

Author Photo
Ruslan Mikhalov SOC Primeの脅威リサーチ責任者 linkedin icon フォローする
チェーンシェル: MuddyWaterとロシアのMaaS
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

概要

MuddyWaterは、イランに関連した諜報活動を行う攻撃者で、ロシアのTAG-150マルウェア-as-a-serviceプラットフォームを利用して CastleRAT および新しいNode.jsベースでブロックチェーン対応のC2エージェント、ChainShellをイスラエルやその他の高価値のターゲットに対して配信しています。この活動は、露出したミスのあるC2ウェブサーバー、PowerShellデプロイメントスクリプト(reset.ps1)、ステガノグラフィを介して隠蔽されたPEペイロードによってサポートされています。複数のCastleRATリリース(ビルド120とビルド13を含む)には、同じMaaS世代を示す共通のハードコードされた識別子が含まれています。バックエンドインフラストラクチャはキャンペー化され、共有ドメイン(例えば、serialmenot.com)や各操作ごとのJWTクレデンシャルを使用して展開ごとにアクセスと追跡が分離されています。

調査

JUMPSECは露出したC2ホストをレビューし、15のマルウェアサンプルを回収し、reset.ps1デプロイメントロジックがChainShellと複数のCastleRATビルドの配信に関連していることを確認しました。調査員はまた、既知のMuddyWaterツールに見られるコード署名証明書(Amy CherneとDonald Gay)をTAG-150 MSIインストーラに結び付け、高い信頼性の帰属の証拠を形成しました。既知のMuddyWaterツールとTAG-150 MSIインストーラに見られる追加のサンプル間の重複が観察され、ツールとサーバーサイドアーティファクトに埋め込まれたハードコードされたビルドマーカー、再発するスケジュールドタスクの命名規則、およびJWTキャンペーンIDが一貫していました。

緩和策

reset.ps1、関連するスケジュールドタスク、CastleRATおよびChainShellにリンクされたユニークなミューテックスまたはファイルパスアーティファクトを監視します。既知のTAG-150インフラストラクチャをブロックし、serialmenot.com、ttrdomennew.com、およびsharecodepro.comを含み、PowerShell駆動のNode.jsコンポーネントのインストールを徹底的に調査します。厳格なコード署名の管理を施し、疑わしい証明書を既知のMuddyWater関連の署名素材と照合して検証します。

対応

インジケータが見つかった場合、影響を受けたエンドポイントを隔離し、完全なディスクとメモリイメージをキャプチャし、その他のCastleRATおよびChainShellの残余をスイープします。危険なコード署名証明書の信頼を取り消し、影響を受けた資格情報をリセットし、関連する全国CERTと報告を調整します。Ethereum RPCアクセスパターンやJWT使用を含むnetwork telemetryをレビューし、serialmenot.comコマンドアンドコントロールワークフローに関連しています。

"graph TB %% クラス定義 classDef action fill:#99ccff classDef tool fill:#ffcc99 classDef technique fill:#c2f0c2 classDef malware fill:#ff9999 classDef process fill:#ffd966 %% ノード action_phishing["<b>アクション</b> – <b>T1566.002 フィッシング</b><br/>悪意のあるマクロ有効ドキュメント(ClickFix/BatClickFix)がメール経由で配信される"] class action_phishing action action_user_exec["<b>アクション</b> – <b>T1204.002 ユーザー実行</b><br/>被害者がドキュメントを開いてPowerShellをトリガーする"] class action_user_exec action tool_powershell["<b>ツール</b> – <b>T1059.001 PowerShell</b><br/>スクリプトインタープリターがローダーをロードするために使用される"] class tool_powershell tool tool_cmstp["<b>ツール</b> – <b>T1218.003 CMSTP</b><br/>システムバイナリプロキシ実行が悪意のあるINFをロードする"] class tool_cmstp tool technique_dll_sideload["<b>テクニック</b> – <b>T1574.002 DLLサイドロード</b><br/>INF経由でロードされる悪意のあるDLL"] class technique_dll_sideload technique technique_dll_hijack["<b>テクニック</b> – <b>T1574.005 ハイジャック実行フロー</b><br/>正当なバイナリの隣に配置された悪意のあるuserenv.dllおよびxmllite.dll"] class technique_dll_hijack technique technique_scheduled_task["<b>テクニック</b> – <b>T1543.001 システムプロセスの作成または変更</b><br/>持続性のためのスケジュールドタスク(VirtualSmokestGuy120/666)"] class technique_scheduled_task technique technique_steganography["<b>テクニック</b> – <b>T1027.003 ステガノグラフィ</b><br/>JPEG画像内に隠されたネイティブPEペイロード"] class technique_steganography technique technique_embedded_payload["<b>テクニック</b> – <b>T1027.009 埋め込まれたペイロード</b><br/>さらに隠蔽された追加のペイロード"] class technique_embedded_payload technique technique_data_obfusc["<b>テクニック</b> – <b>T1001 データの難読化</b><br/>C2トラフィックのAES-256-CBC暗号化"] class technique_data_obfusc technique technique_uac_bypass["<b>テクニック</b> – <b>T1548.002 権限昇格コントロール メカニズムの悪用</b><br/>UACをバイパスするCMSTP実行"] class technique_uac_bypass technique technique_steal_cookie["<b>テクニック</b> – <b>T1539 ウェブセッションクッキーの盗み</b><br/>Chrome v127+ アプリバウンドクッキーの復号"] class technique_steal_cookie technique technique_forge_cookie["<b>テクニック</b> – <b>T1606.001 ウェブクレデンシャルの偽装</b><br/>認証のために抽出されたクッキーを使用"] class technique_forge_cookie technique technique_alt_auth["<b>テクニック</b> – <b>T1550.004 代替認証材料の使用</b><br/>ラテラルムーブメントのためにクッキーを悪用"] class technique_alt_auth technique technique_vnc["<b>テクニック</b> – <b>T1021.005 リモートサービス VNC</b><br/>不可視のデスクトップ制御を提供する隠れたVNC"] class technique_vnc technique technique_remote_service["<b>テクニック</b> – <b>T1021 リモートサービス</b><br/>リモートサービスによる追加のラテラルムーブメント"] class technique_remote_service technique technique_dead_drop["<b>テクニック</b> – <b>T1102.001 デッドドロップリゾルバー</b><br/>Ethereumスマートコントラクトから解決されるC2アドレス"] class technique_dead_drop technique technique_websocket_bidirectional["<b>テクニック</b> – <b>T1102.002 WebSocket 二方向</b><br/>コマンド交換のためのWebSocketチャネル"] class technique_websocket_bidirectional technique technique_websocket_oneway["<b>テクニック</b> – <b>T1102.003 一方向通信</b><br/>フォールバックC2パス"] class technique_websocket_oneway technique technique_web_protocol["<b>テクニック</b> – <b>T1071.001 アプリケーション層プロトコル ウェブプロトコル</b><br/>HTTPSを介したWebSocket経由のトラフィック"] class technique_web_protocol technique malware_chainshell["<b>マルウェア</b> – <b>名前</b>: ChainShell<br/>C2、暗号化、およびラテラルムーブメントを処理するペイロードオーケストレーター"] class malware_chainshell malware %% 接続 action_phishing –>|leads_to| action_user_exec action_user_exec –>|executes| tool_powershell tool_powershell –>|loads| tool_cmstp tool_cmstp –>|uses| technique_dll_sideload tool_cmstp –>|bypasses| technique_uac_bypass technique_dll_sideload –>|enables| technique_dll_hijack technique_dll_hijack –>|supports| technique_scheduled_task technique_scheduled_task –>|creates| malware_chainshell malware_chainshell –>|contains| technique_steganography malware_chainshell –>|contains| technique_embedded_payload malware_chainshell –>|encrypts| technique_data_obfusc malware_chainshell –>|steals| technique_steal_cookie technique_steal_cookie –>|enables| technique_forge_cookie technique_forge_cookie –>|enables| technique_alt_auth technique_alt_auth –>|enables| technique_vnc technique_vnc –>|uses| technique_remote_service malware_chainshell –>|resolves C2 via| technique_dead_drop technique_dead_drop –>|communicates via| technique_websocket_bidirectional technique_websocket_bidirectional –>|fallback to| technique_websocket_oneway technique_websocket_bidirectional –>|uses protocol| technique_web_protocol "

攻撃フロー

シミュレーション実行

前提条件:テレメトリー&ベースライン事前フライトチェックが合格していること。

  • 攻撃の流れ&コマンド:

    1. ステージ1 – シンプルなC2サーバーを準備します (攻撃者のマシンまたは制御されたVMで実行)。サーバーはポート9999でリスンし、受信データをエコーします。

    2. ステージ2 – ターゲットWindowsホストでPowerShellバックドアを起動する ポート9999でC2サーバーにTCP接続を開きます。ペイロードは、.NETクラスをネイティブに使用して、別の実行ファイルを作成せずに、“living-off-the-land”アプローチを模倣します。

    3. ステージ3 – オプションのプロキシホップ: PowerShellスクリプトは最初にローカルHTTPプロキシ(127.0.0.1:8080でリスン)に接続し、TCPトラフィックをリモートC2サーバーに転送し、宛先ポートが変わらないことを実証します。

    これらのステップはファイアウォールイベントを生成し DestinationPort = 9999をSigmaルールに合わせて満たします。

  • 回帰テストスクリプト:

    # -------------------------------------------------
    # CastleRATスタイルC2シミュレーション – PowerShell
    # -------------------------------------------------
    # 1. C2サーバーアドレスの定義(テストIPと置き換えてください)
    $c2Ip = "10.0.0.50"
    $c2Port = 9999
    
    # 2. オプション:ローカルプロキシの定義(プロキシホップをテストしたい場合)
    $useProxy = $false
    $proxyHost = "127.0.0.1"
    $proxyPort = 8080
    
    # 3. TCPストリームを開くための関数(直接またはプロキシ経由)
    function Invoke-C2Connection {
        param (
            [string]$destIp,
            [int]$destPort,
            [bool]$viaProxy
        )
        if ($viaProxy) {
            # シンプルなHTTP CONNECTトンネル
            $proxyUri = "http://$proxyHost`:$proxyPort"
            $client = New-Object System.Net.Sockets.TcpClient($proxyHost,$proxyPort)
            $stream = $client.GetStream()
            $connectRequest = "CONNECT $destIp`:$destPort HTTP/1.1`r`nHost: $destIp`r`n`r`n"
            $bytes = [System.Text.Encoding]::ASCII.GetBytes($connectRequest)
            $stream.Write($bytes,0,$bytes.Length)
            # プロキシ応答を破棄
            $buffer = New-Object byte[] 1024
            $null = $stream.Read($buffer,0,$buffer.Length)
            Write-Host "[+] プロキシトンネル確立"
            return $stream
        } else {
            $client = New-Object System.Net.Sockets.TcpClient($destIp,$destPort)
            Write-Host "[+] 直接TCP接続確立"
            return $client.GetStream()
        }
    }
    
    # 4. 接続を開く
    $stream = Invoke-C2Connection -destIp $c2Ip -destPort $c2Port -viaProxy:$useProxy
    
    # 5. シンプルなビーコンを送信
    $beacon = "CastleRAT Beacon $(Get-Date -Format o)`n"
    $bytes = [System.Text.Encoding]::UTF8.GetBytes($beacon)
    $stream.Write($bytes,0,$bytes.Length)
    Write-Host "[+] ビーコン送信"
    
    # 6. 短期間チャンネルをオープンに保つ(持続性のシミュレーション)
    Start-Sleep -Seconds 15
    
    # 7. クリーニング
    $stream.Close()
    Write-Host "[+] 接続終了"
  • クリーニングコマンド:

    # 残存するTCP接続が閉じられていることを確認
    Get-NetTCPConnection -RemotePort 9999 -State Established | ForEach-Object {
        try {
            $proc = Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue
            if ($proc) { Stop-Process -Id $proc.Id -Force }
        } catch {}
    }
    
    # ローカルで起動された場合は、任意の一時プロキシリスナーを削除
    Stop-Process -Name "python" -Force -ErrorAction SilentlyContinue

追加の観察&強化の推奨

  1. ポートベースの検出を強化: ポートチェックを既知の悪意のあるC2 IP/ドメイン、TLSフィンガープリンティング、または異常なトラフィック量ヒューリスティクスと組み合わせます。
  2. 正当なサービスの許可リスト: アプリケーションが正当にポート9999または8888を使用しているもの(例:特定のデータベースや管理ツール)の例外リストを作成します。
  3. 行動ベースライン: 高リスクのポートへの低頻度のアウトバウンド接続をフラグにする統計モデルを展開し、非サーバーエンドポイントからの発信を検出します。
  4. プロセスコンテキスト: ファイアウォールイベントを発生元プロセス(ImageFileName, CommandLine)と関連付けます。予期しないプロセス(e.g., powershell.exe, cmd.exe).

)によって行われる接続にフラグを立てます。 2 これらの緩和策を適用することで、ルールの耐性を現在の から 範囲まで引き上げ、本物のCastleRAT C2トラフィックの検出を維持しながら、偽陽性を劇的に減少させます。