ESETリサーチGopherWhisper:マルウェアがいっぱいの巣穴
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
ESETは、ゴファーホイスパーと追跡されている、中国に関連する未確認のAPTグループが、モンゴルの政府機関を標的にしていることを確認しました。この脅威アクターは、GoおよびC++のバンドア、ローダー、インジェクターを中心に構築されたカスタムマルウェアエコシステムを運営しており、コマンド&コントロール活動のために正当なクラウドプラットフォームを多用しています。そのツールセットには、LaxGopher、RatGopher、BoxOfFriendsなどが含まれ、Discord、Slack、Microsoft Outlook、file.ioなどのサービスを介して通信します。研究者たちは、2025年1月にこのキャンペーンを初めて観察しました。
調査
ESETの分析により、このグループの広範なツールキットが発見され、インジェクション方法が文書化され、運用で使用されるSlackおよびDiscordのAPIトークンが特定されました。研究者たちはまた、キャンペーンに関連する数千のコマンド&コントロールメッセージとOutlookの下書きメールを抽出しました。彼らの調査は、サポートインフラストラクチャをマッピングし、攻撃者が信頼されたオンラインサービスをどのように使用して通信を隠し、データを外部送信していたかを示しました。
緩和策
防御者は、無許可のSlack、Discord、およびOutlookのAPI活動を監視し、 file.ioへの疑わしいアップロードをブロックし、DLLのロード動作に対する厳しい制御を施す必要があります。セキュリティチームは、 svchost.exe の異常なインジェクション活動を検出し、環境で実行中の未確認のGoベースのバイナリを調査する必要があります。
レスポンス
もしゴファーホイスパーの活動が検出された場合、直ちに影響を受けたシステムを隔離し、悪意のあるプロセスを終了し、インジェクトされたDLLを削除し、危険にさらされたサービスアカウントをリセットし、公開されたAPIトークンを取り消します。続いて完全なフォレンジック調査を実施し、関連するアーティファクトや追加の危険にさらされたホストを特定するためにネットワーク全体を対象に脅威ハンティングを行う必要があります。
"graph TB %% クラス定義 classDef malware fill:#ffcccc classDef process fill:#c2f0c2 classDef file fill:#ffd9b3 classDef technique fill:#e6e6ff classDef service fill:#ffffcc classDef network fill:#d9d9d9 %% ノード node_initial_loader["<b>マルウェア</b> – <b>JabGopher Loader</b><br/><b>アクション</b>: svchost.exeを作成し、LaxGopherバックドアをインジェクト"] class node_initial_loader malware node_svc_host["<b>プロセス</b> – svchost.exe"] class node_svc_host process node_laxgopher["<b>マルウェア</b> – <b>LaxGopher</b> バックドア (DLL)"] class node_laxgopher malware node_whisper_dll["<b>ファイル</b> – whisper.dll (偽装)"] class node_whisper_dll file node_process_injection["<b>テクニック</b> – T1055 プロセスインジェクション<br/><b>説明</b>: 実行中のプロセスに悪意のあるコードを注入する"] class node_process_injection technique node_reflective_loading["<b>テクニック</b> – T1620 リフレクティブコードローディング<br/><b>説明</b>: 標準OSローダーを使用せずにメモリ内にコードをロードする"] class node_reflective_loading technique node_masquerading["<b>テクニック</b> – T1036 偽装<br/><b>説明</b>: ファイル名を変更して正当化する"] class node_masquerading technique node_frienddelivery["<b>マルウェア</b> – <b>FriendDelivery DLL</b>"] class node_frienddelivery malware node_boxoffriends["<b>マルウェア</b> – <b>BoxOfFriends</b> バックドア"] class node_boxoffriends malware node_go_backdoor["<b>マルウェア</b> – Go ベースのバックドア (RatGopher, LaxGopher)"] class node_go_backdoor malware node_c2_slack["<b>サービス</b> – Slack (Web Service)"] class node_c2_slack service node_c2_discord["<b>サービス</b> – Discord (Web Service)"] class node_c2_discord service node_c2_outlook["<b>サービス</b> – Microsoft 365 Outlook メール REST API"] class node_c2_outlook service node_tech_c2_web["<b>テクニック</b> – T1102.002 Web Service 双方向通信<br/><b>説明</b>: 正当なWebサービスをC2に使用"] class node_tech_c2_web technique node_tech_mail["<b>テクニック</b> – T1071.003 メールプロトコル<br/><b>説明</b>: C2にメールプロトコルを使用"] class node_tech_mail technique node_remote_access["<b>テクニック</b> – T1219 リモートアクセスツール<br/><b>説明</b>: リモートコマンド実行を提供する"] class node_remote_access technique node_compactgopher["<b>マルウェア</b> – CompactGopher"] class node_compactgopher malware node_archive["<b>テクニック</b> – T1560.001 ユーティリティによる収集データのアーカイブ<br/><b>説明</b>: データの外部送信前に圧縮する"] class node_archive technique node_data_limit["<b>テクニック</b> – T1030 データ転送サイズ制限<br/><b>説明</b>: 圧縮や分割によりサイズ制限を処理する"] class node_data_limit technique node_exfil_fileio["<b>サービス</b> – file.io クラウドストレージ"] class node_exfil_fileio service node_exfil_tech["<b>テクニック</b> – T1567.002 クラウドストレージへのWebサービス経由の外部送信<br/><b>説明</b>: 外部送信チャネルとしてクラウドストレージを利用"] class node_exfil_tech technique node_transfer_to_cloud["<b>テクニック</b> – T1537 クラウドアカウントへのデータ転送<br/><b>説明</b>: 攻撃者管理のクラウドアカウントへのデータ移動"] class node_transfer_to_cloud technique node_sslordoor["<b>マルウェア</b> – SSLORDoor"] class node_sslordoor malware node_raw_socket["<b>テクニック</b> – Raw Socket 通信"] class node_raw_socket technique node_port_443["<b>ネットワーク</b> – ポート 443"] class node_port_443 network %% 接続 node_initial_loader –>|creates| node_svc_host node_initial_loader –>|injects| node_laxgopher node_laxgopher –>|uses| node_process_injection node_laxgopher –>|uses| node_reflective_loading node_laxgopher –>|file name| node_whisper_dll node_whisper_dll –>|masquerades as| node_masquerading node_frienddelivery –>|loads| node_boxoffriends node_boxoffriends –>|uses| node_process_injection node_boxoffriends –>|uses| node_reflective_loading node_laxgopher –>|C2 via| node_c2_slack node_go_backdoor –>|C2 via| node_c2_discord node_go_backdoor –>|C2 via| node_c2_slack node_c2_slack –>|uses technique| node_tech_c2_web node_c2_discord –>|uses technique| node_tech_c2_web node_boxoffriends –>|creates drafts via| node_c2_outlook node_c2_outlook –>|uses technique| node_tech_mail node_go_backdoor –>|provides| node_remote_access node_sslordoor –>|provides| node_remote_access node_compactgopher –>|compresses data with| node_archive node_compactgopher –>|handles size limits via| node_data_limit node_archive –>|uploaded to| node_exfil_fileio node_exfil_fileio –>|uses technique| node_exfil_tech node_exfil_fileio –>|uses technique| node_transfer_to_cloud node_sslordoor –>|uses raw sockets on| node_port_443 node_sslordoor –>|uses| node_raw_socket "
攻撃フロー
検出
短いファイル名(cmdline経由)
表示
Windows Defenderのリアルタイムモニタリングと他の環境設定変更を無効化(cmdline経由)
表示
WebBrowserPassViewの使用の可能性(cmdline経由)
表示
サードパーティサービス/ツール経由の可能なデータ侵入/流出/C2 (プロキシ経由)
表示
GopherWhisper C&C のSlack、Discord、Microsoft Graph API経由の検出 [Windowsネットワーク接続]
表示
GopherWhisperによる疑わしいプロセスインジェクション [Windowsプロセス作成]
表示
シミュレーション実行
前提条件: テレメトリとベースラインのプリフライトチェックが合格していること。
根拠: このセクションでは、検出ルールをトリガーするために設計された敵対者手法(TTP)の正確な実行を詳述します。コマンドと解説は、特定されたTTPに直接対応し、検出論理で予期する正確なテレメトリを生成することを目的としています。
-
攻撃者のナラティブとコマンド:
攻撃者は、まず新しいsvchost.exeプロセスを生成します(インジェクション用に選ばれたホスト)。反射的なDLLインジェクターを使用して、悪意のあるLaxGopher.dllペイロードをそのプロセスのメモリにロードし、 ダイナミックリンクライブラリ(DLL)インジェクション (T1055.001)を達成します。バックドアが常駐すると、隠されたcmd.exeインスタンスを開き、C2サーバーから受信したコマンドを実行し、 Windowsコマンドシェル (T1059.003)を満たします。このチェーンは、ゴファーホイスパーの研究で説明された動作を反映し、Sigmaルールが探している2つのプロセス作成イベントを生成します。 -
回帰テストスクリプト:
# ------------------------------------------------------------- # ゴファーホイスパー方式のプロセスインジェクションのシミュレーション # ------------------------------------------------------------- $svcHost = "$env:SystemRootSystem32svchost.exe" $dllPath = "C:TempLaxGopher.dll" # 仮のテストDLLがここに存在すると仮定する $cmdPath = "$env:SystemRootSystem32cmd.exe" # 1. インジェクションターゲットになる新しいsvchost.exeインスタンスを開始(中断) $svchost = Start-Process -FilePath $svcHost -ArgumentList "-k", "netsvcs" ` -PassThru -WindowStyle Hidden # 2. 簡単なリフレクティブインジェクションを実行(プレースホルダー) # 実際のテストでは適切なインジェクターを呼び出します; ここでは意図を記録するだけです。 Write-Host "[*] Injecting $dllPath into PID $($svchost.Id) (simulated)" # シミュレーションされたインジェクションコマンド: # .Invoke-ReflectiveDLLInjection.ps1 -Pid $svchost.Id -Path $dllPath # 3. インジェクトされたプロセスコンテキストからcmd.exeを起動(シミュレーション) Write-Host "[*] Launching cmd.exe from injected svchost (simulated)" Start-Process -FilePath $cmdPath -ArgumentList "/c echo Compromised > C:Temppwned.txt" ` -WindowStyle Hidden # 4. Sysmonがイベントを記録する時間を与えるために短時間スリープ Start-Sleep -Seconds 5 -
クリーンアップコマンド:
# シミュレーションされたsvchost.exeとcmd.exeプロセスを終了する Get-Process -Name svchost -ErrorAction SilentlyContinue | Stop-Process -Force Get-Process -Name cmd -ErrorAction SilentlyContinue | Stop-Process -Force # テストDLLを削除する(オプション) Remove-Item -Path "C:TempLaxGopher.dll" -Force -ErrorAction SilentlyContinue