GitHubおよびSourceForgeで偽ソフトウェアを配布するDeno RAT by Gabriele Orini
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
脅威アクターは、GitHubとSourceForgeを利用して偽のインストーラーやプラグインを広く使用されるソフトウェア向けに配布し、DenoベースのバックドアであるDinDoorを配信しています。マルウェアはScoopまたはWinGetを通じてDenoランタイムをインストールし、データの盗難、リモートコマンドの実行、ピアツーピアビデオストリーミングを可能にするJavaScript RATを起動します。感染チェーンを開始するために悪意のあるMSIパッケージとPowerShellスクリプトが使用され、コマンド&コントロールのトラフィックはHTTPまたはWebSocketで行われます。このキャンペーンはさらにYouTubeの侵害されたチャンネルを悪用し、被害者を悪意のあるリポジトリへ誘導します。
調査
研究者は完全な感染シーケンスを再構築し、 curl コマンドでMSIファイルをダウンロードし、その後、インストーラースクリプトはScoop、WinGet、およびDenoを展開してからDinDoor JavaScriptローダーを実行しました。彼らの分析はRATの能力を記録し、システム調査、ブラウザおよび暗号ウォレット盗難、WebSocketを介したVNC、Edgeベースのピアツーピアストリーミングなどを含みます。チームはまた、ドメイン、URL、IPアドレス、コマンドラインアーティファクトなどの指標を抽出して、検出と脅威ハンティングをサポートしました。
緩和策
組織は、公式のベンダーウェブサイトからのみソフトウェアをダウンロードし、インストーラを実行する前にデジタル署名を確認するべきです。セキュリティチームは、DenoのインストールにScoopやWinGetを異常に使用すること、および予期しないMSIベースのソフトウェア展開を監視すべきです。特定された悪意のあるドメインおよびIPアドレスへの送信トラフィックをブロックし、そして curl 信頼されていないソースからファイルをダウンロードして実行するPowerShellまたは活動を精査する必要があります。
対応
ディフェンダーは警告を出すべきです msiexec が疑わしいGitHubまたはSourceForge URLからソースされるファイルを起動した場合、または deno.exeをログオン時に開始するRunレジストリキーを作成した場合、および既知のコマンド&コントロールインフラストラクチャとのネットワーク通信において影響を受けたホストは、スクリプトのドロップ、Denoランタイム、および永続化メカニズムを特定する法医学的レビューを受けるべきです。侵害されたシステムは直ちに隔離され、すべての許可されていないDenoインストールが削除されるべきです。
"graph TB %% クラス定義 classDef technique fill:#99ccff classDef tool fill:#ffcc99 classDef operator fill:#ff9900 %% 技術ノードとしての攻撃ステップ step1_malicious_link["<b>技術</b> – <b>T1204.001 ユーザ実行: 悪意のあるリンク</b><br/>被害者が偽のGitHubまたはSourceForgeプロジェクトにリダイレクトする悪意のあるYouTubeリンクをクリックする"] class step1_malicious_link technique step1_content_injection["<b>技術</b> – <b>T1659 コンテンツ注入</b><br/>侵害されたYouTubeチャンネルがビデオの説明やコメントに悪意のあるURLを注入する"] class step1_content_injection technique step2_msiexec["<b>技術</b> – <b>T1218.007 システムバイナリープロキシ実行: Msiexec</b><br/>コマンドがMSIファイルをダウンロードし、msiexec経由で実行する"] class step2_msiexec technique step3_installer_pkg["<b>技術</b> – <b>T1546.016 イベントトリガー実行: インストーラーパッケージ</b><br/>PowerShellスクリプトがScoopまたはWinGetを使ってDenoランタイムをインストールする"] class step3_installer_pkg technique step4_logon_script["<b>技術</b> – <b>T1037.001 ブートまたはログオン初期化スクリプト: ログオンスクリプト</b><br/>ログオン時にDenoバックドアを起動するRunレジストリキーを作成する"] class step4_logon_script technique step5_reflective_load["<b>技術</b> – <b>T1620 反射的コードロード</b><br/>バックドアがメモリ内で完全にJavaScriptコードをフェッチして実行するeval loopを実行する"] class step5_reflective_load technique step6_c2["<b>技術</b> – <b>T1102 ウェブサービス</b> 及び <b>T1102.002 双方向通信</b><br/>コマンド&コントロール用にHTTPエンドポイントとカスタムWebSocket VNCチャンネルを使用する"] class step6_c2 technique step7_browser_creds["<b>技術</b> – <b>T1555.003 パスワードストアからの資格情報: ウェブブラウザ</b><br/>スティーラーが保存されたブラウザパスワードを抽出する"] class step7_browser_creds technique step7_input_capture["<b>技術</b> – <b>T1056 入力キャプチャ</b><br/>キー入力記録とフォームキャプチャを通じて資格情報を取得する"] class step7_input_capture technique step7_clipboard["<b>技術</b> – <b>T1115 クリップボードデータ</b><br/>機密データを含む可能性があるクリップボードの内容を収集する"] class step7_clipboard technique step8_browser_discovery["<b>技術</b> – <b>T1217 ブラウザ情報調査</b><br/>暗号通貨ウォレットファイル、ブラウザデータ、スクリーンショットを収集する"] class step8_browser_discovery technique step9_exfil["<b>技術</b> – <b>T1011 他のネットワーク媒介による漏洩</b><br/>収集されたデータを同じHTTP/WebSocketチャンネルを通じて送信する"] class step9_exfil technique step10_process_injection["<b>技術</b> – <b>T1055.005 プロセス注入: スレッドローカルストレージ</b><br/>TLSを使用して正当なプロセスに悪意のあるコードを注入する"] class step10_process_injection technique step11_indirect_exec["<b>技術</b> – <b>T1202 間接コマンド実行</b><br/>追加ペイロードのプロキシ実行を行うためにmsiexecを活用する"] class step11_indirect_exec technique %% オプションのツールノード tool_msiexec["<b>ツール</b> – <b>名前</b>: msiexec<br/><b>説明</b>: プロキシ実行に使用されるWindowsインストーラ実行ファイル"] class tool_msiexec tool tool_powershell["<b>ツール</b> – <b>名前</b>: PowerShell<br/><b>説明</b>: インストーラーパッケージを駆動するために使用されるスクリプト環境"] class tool_powershell tool tool_deno["<b>ツール</b> – <b>名前</b>: Deno<br/><b>説明</b>: JavaScriptバックドアをホストするランタイム"] class tool_deno tool %% 攻撃フローを示す接続 step1_malicious_link –>|導く| step2_msiexec step1_content_injection –>|サポート| step2_msiexec step2_msiexec –>|使用| tool_msiexec step2_msiexec –>|トリガー| step3_installer_pkg step3_installer_pkg –>|使用| tool_powershell step3_installer_pkg –>|インストール| tool_deno step3_installer_pkg –>|有効化| step4_logon_script step4_logon_script –>|確立| step5_reflective_load step5_reflective_load –>|提供| step6_c2 step6_c2 –>|促進| step7_browser_creds step6_c2 –>|促進| step7_input_capture step6_c2 –>|促進| step7_clipboard step7_browser_creds –>|供給| step8_browser_discovery step7_input_capture –>|供給| step8_browser_discovery step7_clipboard –>|供給| step8_browser_discovery step8_browser_discovery –>|経由で送信| step9_exfil step9_exfil –>|使用チャンネル| step6_c2 step5_reflective_load –>|有効化| step10_process_injection step10_process_injection –>|特権昇格| step11_indirect_exec step11_indirect_exec –>|実行| step2_msiexec class step1_malicious_link,step1_content_injection,step2_msiexec,step3_installer_pkg,step4_logon_script,step5_reflective_load,step6_c2,step7_browser_creds,step7_input_capture,step7_clipboard,step8_browser_discovery,step9_exfil,step10_process_injection,step11_indirect_exec technique class tool_msiexec,tool_powershell,tool_deno tool "
攻撃フロー
検出
LOLBAS Conhost (コマンドライン経由)
表示
疑わしいコマンド&コントロールによる珍しいトップレベルドメイン(TLD)のDNS要求(via dns)
表示
検出するためのIOC (SourceIP): 偽のソフトウェアがGitHubとSourceForgeでDeno RATを配布する (Gabriele Orini)
表示
検出するためのIOC (DestinationIP): 偽のソフトウェアがGitHubとSourceForgeでDeno RATを配布する (Gabriele Orini)
表示
DinDoor RAT C2通信の検出 [Windows ネットワーク接続]
表示
偽のインストーラーを介したDeno RAT分布の検出 [Windowsプロセス作成]
表示
隠しウィンドウと実行ポリシーをバイパスしてPowerShellの実行 [Windows PowerShell]
表示
シミュレーション実行
前提条件: テレメトリー&ベースラインプレフライトチェックが合格しなければなりません。
理論: このセクションは、検出ルールをトリガーするための具体的な敵対技術(TTP)の実行を詳細に説明しています。コマンドと物語は、識別されたTTPを直接反映し、検出ロジックによって予想される正確なテレメトリを生成することを目的としています。
-
攻撃の説明とコマンド:
攻撃者は、フィッシングの添付ファイルに含まれる悪意のあるCMDスクリプトを通じて初期の足場を得ました。ステルス性を維持するために、スクリプトは隠しウィンドウでPowerShellを起動し、実行ポリシーを無効にし、第二段階のペイロードをダウンロードして実行するbase64エンコードされたペイロードを実行します。正確なコマンドラインがルールの警告される3つのサブストリングに一致することで、検出を確保します。-
ステージ1 – CMDランチャー (テスターによるシミュレーション):
@echo off start "" powershell.exe -NoProfile -ExecutionPolicy Bypass -WindowStyle Hidden -EncodedCommand %payload% -
ステージ2 – PowerShellペイロード (base64エンコード済み、テスト用無害):
$cmd = 'Write-Output "Malicious simulation executed"' $bytes = [System.Text.Encoding]::Unicode.GetBytes($cmd) $b64 = [Convert]::ToBase64String($bytes) echo $b64 # バッチファイルにこの値を%payload%として挿入
-
-
回帰テストスクリプト: 以下のスクリプトは、エンコードされたコマンドを生成し、必要なフラグを持つPowerShellを起動し、その後、SIEMがイベントを取り込むのを待つために少しの間中断することで完全なフローを自動化します。
# ------------------------------------------------- # 回帰テスト - PowerShell Hidden + Bypass EP # ------------------------------------------------- # 1) 無害なペイロードを作成 (Write‑Output) $payload = 'Write-Output "Malicious simulation executed"' # 2) ペイロードをbase64にエンコード (Unicodeエンコーディングとして、PowerShellを期待) $bytes = [System.Text.Encoding]::Unicode.GetBytes($payload) $b64 = [Convert]::ToBase64String($bytes) # 3) Sigmaルールが要求する正確なフラグセットでPowerShellを起動 $psCmd = @( 'powershell.exe', '-NoProfile', '-ExecutionPolicy', 'Bypass', '-WindowStyle', 'Hidden', '-EncodedCommand', $b64 ) -join ' ' Write-Host "実行中:`n$psCmd" Start-Process -FilePath "powershell.exe" -ArgumentList "-NoProfile","-ExecutionPolicy","Bypass","-WindowStyle","Hidden","-EncodedCommand",$b64 -WindowStyle Hidden # 4) ロギングを伝搬させるために待機 (必要に応じて調整) Start-Sleep -Seconds 10 Write-Host "シミュレーション完了 - SIEMで検出を確認してください。" -
クリーンアップコマンド: 一時ファイル(ここでは作成されていない)を削除し、残るPowerShellプロセスがないことを確認します。
# テストによって生成された余分なPowerShellプロセスを終了する (現在のセッションを除く) Get-Process -Name powershell | Where-Object { $_.Id -ne $PID } | Stop-Process -Force Write-Host "クリーンアップ完了。"