SOC Prime Bias:

14 4月 2026 18:43

保管庫の亡霊:Obsidianが悪用されPhantomPulse RATを配信

Author Photo
SOC Prime Team linkedin icon フォローする
保管庫の亡霊:Obsidianが悪用されPhantomPulse RATを配信
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

概要

Elastic Security Labsは、Obsidianのノート作成プラットフォームとそのコミュニティプラグインエコシステムを悪用する新しいソーシャルエンジニアリングキャンペーンを発見しました。これは、以前に文書化されていなかったRATであるPhantomPulseをWindowsとmacOSの両方のシステムにターゲットとして届けるものです。この運用は、LinkedInとTelegramを使用して、初期の餌として改ざんされたObsidianボールトを配布する方法で、金融および暗号通貨の分野の個人を対象にしているようです。Windowsでは、感染チェーンはPowerShell、PhantomPullと呼ばれるカスタムのメモリ内ローダー、およびリフレクティブローディング技術に依存しています。macOSでは、攻撃者はAppleScriptを使用し、Telegramベースのデッドドロップ指令および制御メカニズムを利用しています。このキャンペーンはまた、Ethereumのトランザクションデータを通じてブロックチェーンベースのC2ディスカバリーも取り入れています。

調査

研究者は、悪意のある実行を引き起こすためにShell CommandsおよびHiderプラグインを使用した武器化されたObsidianボールトを構築して攻撃を再現しました。分析中に、彼らはPowerShellスクリプトがローダーをダウンロードすることを観察しました。 syncobs.exe から 195.3.222.251、そしてそれにより暗号化されたペイロードを取得し、メモリ内にリフレクティブに読み込みました。ローダーはミューテックスを作成し、 panel.fefea22134.netでホストされているコントロールパネルと通信し、ブロックチェーンデータから導出されたフォールバックインフラストラクチャをサポートしました。macOSでは、マルウェアはLaunchAgent plistを通じて永続性を確立し、ハードコーディングされたドメインとTelegramチャンネルから二次的なAppleScriptペイロードをダウンロードしました。調査者は、両方の感染経路に関連するJSON設定ファイルとメモリリソースからキーアーティファクトを回収しました。

緩和

組織は、Obsidianが無認可の子プロセスを生成することを防ぎ、コミュニティプラグインの使用に厳しい制御を適用し、親プロセスとしてObsidianが表示されるPowerShell活動を監視するべきです。ネットワーク防御は、アウトバウンドトラフィックをブロックするべきです。 195.3.222.251 とドメイン panel.fefea22134.net, 0x666.info、およびキャンペーンに関連する既知のTelegramデッドドロップの場所です。 セキュリティチームはまた、リフレクティブロード、タイマーキューコールバックの濫用、およびマルウェアローダーによって使用される特定のミューテックス値の兆候を探すべきです。

対処

Obsidianからの疑わしい子プロセスが検出された場合は、影響を受けたホストを即座に隔離し、 .obsidian ディレクトリを収集して、悪意のあるプラグインファイルとボールトコンテンツのフォレンジックレビューを行います。ミューテックス hVNBUORXNiFLhYYhを検索し、エンドポイントをスキャンしてPHANTOMPULLローダーとPHANTOMPULSE RATバイナリの痕跡を探します。識別されたコマンドアンドコントロールインフラをブロックし、任意の侵害されたObsidian関連の認証情報を取り消し、金融および暗号通貨アカウントに関わる認証情報窃盗露出のより広範囲なレビューを行います。

graph TB %% Class definitions classDef technique fill:#99ccff classDef tool fill:#ffcc99 classDef malware fill:#ff9999 classDef process fill:#ccffcc %% Technique nodes tech_valid_accounts[“<b>技術</b> – <b>T1078 有効なアカウント</b><br/><b>説明</b>: 攻撃者は侵害された資格情報を使用してアカウントへアクセスする。<br/><b>詳細</b>: Obsidian資格情報が被害者に提供”] class tech_valid_accounts technique tech_user_execution[“<b>技術</b> – <b>T1204 ユーザー実行</b><br/><b>説明</b>: ユーザーが悪意あるコードを実行するよう誘導される。<br/><b>詳細</b>: 共有Vaultを開きプラグイン同期を有効化”] class tech_user_execution technique tech_powershell_initial[“<b>技術</b> – <b>T1059.001 PowerShell</b><br/><b>説明</b>: PowerShellでコマンドを実行する。<br/><b>詳細</b>: Base64コマンドでscript1.ps1をダウンロード”] class tech_powershell_initial technique tech_bits_transfer[“<b>技術</b> – <b>T1105 ツール転送</b><br/><b>説明</b>: ツールやペイロードをホストへ転送する。<br/><b>詳細</b>: syncobs.exeをダウンロード”] class tech_bits_transfer technique tech_reflective_loading[“<b>技術</b> – <b>T1620 リフレクティブロード</b><br/><b>説明</b>: ディスクに書かずにメモリへ直接ロードする。<br/><b>詳細</b>: AES-256-CBC暗号化ペイロードをメモリ展開”] class tech_reflective_loading technique tech_process_injection[“<b>技術</b> – <b>T1055.002 PEインジェクション</b><br/><b>説明</b>: プロセスへのコード注入。<br/><b>詳細</b>: リフレクティブPEインジェクション”] class tech_process_injection technique tech_dynamic_resolution[“<b>技術</b> – <b>T1568 動的解決</b><br/><b>説明</b>: 実行時にC2を解決する。<br/><b>詳細</b>: ブロックチェーンでC2 URLを解決”] class tech_dynamic_resolution technique tech_powershell_c2[“<b>技術</b> – <b>T1059.001 PowerShell</b><br/><b>説明</b>: C2通信とビーコン送信に使用”] class tech_powershell_c2 technique tech_applescript[“<b>技術</b> – <b>T1059.007 AppleScript</b><br/><b>説明</b>: macOSで悪意あるコード実行<br/><b>詳細</b>: osascriptで実行”] class tech_applescript technique tech_launch_agent[“<b>技術</b> – <b>T1543.001 ランチエージェント</b><br/><b>説明</b>: LaunchAgentによる永続化<br/><b>詳細</b>: plistインストール”] class tech_launch_agent technique tech_dead_drop_resolver[“<b>技術</b> – <b>T1102.001 デッドドロップ解決</b><br/><b>説明</b>: WebサービスをC2解決に利用<br/><b>詳細</b>: Telegramが代替C2”] class tech_dead_drop_resolver technique %% Tool / Malware nodes tool_syncobs_exe[“<b>ツール</b> – <b>名前</b>: syncobs.exe<br/><b>説明</b>: 第2段階バイナリ”] class tool_syncobs_exe tool malware_phantompull[“<b>マルウェア</b> – <b>名前</b>: PHANTOMPULL<br/><b>説明</b>: AES-256-CBCペイロードを実行するローダー”] class malware_phantompull malware %% Flow connections tech_valid_accounts –>|leads_to| tech_user_execution tech_user_execution –>|leads_to| tech_powershell_initial tech_powershell_initial –>|executes| tech_bits_transfer tech_bits_transfer –>|downloads| tool_syncobs_exe tool_syncobs_exe –>|enables| tech_reflective_loading tech_reflective_loading –>|loads| malware_phantompull malware_phantompull –>|facilitates| tech_process_injection tech_process_injection –>|injects| tool_syncobs_exe tech_process_injection –>|enables| tech_dynamic_resolution tech_dynamic_resolution –>|resolves| tech_powershell_c2 tech_dynamic_resolution –>|resolves| tech_applescript tech_powershell_c2 –>|beacons| tech_dead_drop_resolver tech_applescript –>|creates| tech_launch_agent tech_launch_agent –>|persists| tech_dead_drop_resolver

攻撃フロー

シミュレーション実行

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

論理的根拠:このセクションでは、検出ルールをトリガーするために意図された敵技術の正確な実行を詳細に説明します。 コマンドとナラティブは、特定されたTTPsを直接反映し、検出ロジックによって期待される正確なテレメトリーを生成することを目的とする必要があります。 抽象的または無関係な例は、誤診につながるでしょう。

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

    1. 初期妥協: 攻撃者は悪意のあるObsidianプラグイン(evil-plugin.js)をユーザーのObsidianプラグインディレクトリに挿入します。
    2. 実行トリガー: Obsidianが開始されると、プラグインはPowerShellのワンライナーを実行して notepad.exe via を起動します。これにより、ルールが監視する正確なプロセスチェーンが作成されます。 プロセスチェーンが作成されます。 process chain the rule watches.
    3. 持続性: プラグインは毎回のObsidian起動時に自動ロードされるように設定されており、悪意のある子プロセスが再現されます。
    4. 回避: プラグインはまた、短時間 rundll32.exe (T1216.002)を呼び出して無害なDLLをロードし、真の意図を隠しつつ、検出トリガーチェーンを維持します。
  • 回帰テストスクリプト:

    # -------------------------------------------------
    # 悪意のある Obsidian プラグインシミュレーション(PowerShell)
    # -------------------------------------------------
    # 1. Obsidian が期待されるパスにインストールされていることを確認する
    $obsidianPath = "C:Program FilesObsidianObsidian.exe"
    if (-Not (Test-Path $obsidianPath)) {
        Write-Error "Obsidian not found at $obsidianPath"
        exit 1
    }
    
    # 2. Obsidian を*親として*起動し、直ちに Notepad を生成する
    $startInfo = New-Object System.Diagnostics.ProcessStartInfo
    $startInfo.FileName = $obsidianPath
    $startInfo.Arguments = "-c `"Start-Process notepad.exe`""
    $startInfo.UseShellExecute = $false
    $startInfo.CreateNoWindow = $true
    
    $proc = [System.Diagnostics.Process]::Start($startInfo)
    
    # 3. オプション: サインされたバイナリ (rundll32) を呼び出して T1216.002 をシミュレートする
    Start-Process -FilePath "C:WindowsSystem32rundll32.exe" -ArgumentList "shell32.dll,Control_RunDLL" -WindowStyle Hidden
    
    # 4. ログが生成されるまでに必要な間、スクリプトを一時停止する
    Start-Sleep -Seconds 5
    # -------------------------------------------------
  • クリーンアップコマンド:

    # テストで作成されたすべての異常なObsidianまたはNotepadインスタンスを終了する
    Get-Process -Name "Obsidian","notepad","rundll32" -ErrorAction SilentlyContinue | Stop-Process -Force
    
    # シミュレーションで作成された悪意のあるプラグインファイルを削除する(存在した場合)
    $pluginPath = "$env:APPDATAObsidianpluginsevil-plugin.js"
    if (Test-Path $pluginPath) { Remove-Item $pluginPath -Force }
    
    Write-Host "Cleanup complete."