ホテル業界を標的とした不審メールの分析(パート2: 技術詳細編)

本記事はパート1「キャンペーン概要編」の続編です。パート1では、Booking.com を騙った不審メールや攻撃キャンペーンの全体像を解説しました。パート2では攻撃に使用された検体や通信先などの技術的な分析結果を解説します。

パート1の記事はこちらです。

攻撃の概要(全体像)

パート1で解説した通り、今回確認された攻撃の流れは以下の通りです。

  1. Booking.com を装ったメールがホテル運営会社へ送付される
  2. メール内のリンクをクリックすると zip ファイルがダウンロードされる
  3. zip ファイル内の lnk ファイルを実行すると PowerShell コマンドが実行され、追加で PowerShell ファイル(ps1)がダウンロードされ実行される
  4. PowerShell コマンドがファイル内の暗号化された JavaScript ファイル(TonRAT)を復号し、ファイルとして書き出す
  5. PowerShell コマンドが Node.js ランタイム(node.exe)を正規サイトからダウンロードして、TonRAT を実行する
  6. TonRAT が感染端末の情報収集と動作の永続化を行い、TON API を使用して C2 のドメインを取得する
  7. TonRAT が TON API から取得した C2 へ WebSocket で接続する

図1. マルウェア感染の流れ

このような動作を経て、最終的に被害者の端末は TonRAT へ感染し WebSocket を用いて攻撃者の用意した C2 サーバーと通信を確立します。

次の章では各ステップの技術的な詳細を解説します。

攻撃手法の詳細分析

多段スクリプト

メール本文に記載されたリンクをクリックすると zip ファイルがダウンロードされます。zip ファイルの中には lnk ファイルと mp4 ファイルがありますが、mp4 ファイルはダミーファイルです。
lnk ファイルには PowerShell コマンドが含まれており、ユーザーがこのlnkファイルを開くことで実行されます。このコマンドが実行されると、Invoke-WebRequestを使用してハードコードされている通信先から別の PowerShell ファイルを取得し、実行します。

図2. lnkファイルに記載されている PowerShell コマンド

  • デコード後の通信先:photo-26654[.]cfd

図3. PowerShell ファイル(LE3f0MRT.ps1)の処理の流れ

ダウンロードされた PowerShell ファイル(LE3f0MRT.ps1)は以下の流れで JavaScript ファイルを復号して実行します。

  1. PowerShell ファイルに含まれる AES で暗号化された JavaScript ファイルを復号し、%localappdata%\Nodejs フォルダに作成
  2. nodejs.org から %localappdata%\Nodejs フォルダに zip ファイル(node-v24.13.0-win-x64.zip)をダウンロードし、展開
  3. node.exe で復号された JavaScript ファイルを実行

Node.js のダウンロード URL は https://nodejs.org/dist/v24.13.0/node-v24.13.0-win-x64.zip です。

  • AES Key (base64): XuvxxbC6FTvygXIM6fkrzax9VMkZizAPEc1pB3GJmA4=
  • IV (base64): 3sqOzCNaHrLIQxwgJvClww==

図4. AES による JavaScript ファイルの復号

復号した JavaScript ファイルは Node.js のライブラリーを使用しているため、Windows に標準で存在する cscript.exe や wscript.exe では動作しません。
また、多重起動防止のための Mutex の作成やShowWindowを使用してPowerShellウィンドウの非表示などの処理を行います。lnkファイルが実行するPowerShellコマンドにウィンドウの非表示のオプションがないため、ShowWindowメソッドを使ってウィンドウを非表示にすることで、ユーザーに異常を気づかれにくくしていると考えられます。

図5. ShowWindow による PowerShell ウィンドウの非表示処理

興味深い点として、PowerShell ファイル(LE3f0MRT.ps1)は AES の鍵と IV がそれぞれ異なる値に設定されているため、ファイルのハッシュ値もメールのキャンペーンの検体毎に異なります。一方で、復号後に作成される JavaScript ファイル(TonRAT)については確認した限りでは同一のハッシュ値です。

JavaScript ファイル(TonRAT)

TonRAT は RAT およびダウンローダーの機能を持つマルウェアです。ブロックチェーンのシステムである The Open Network(TON)の仕組みを使って動作することが特徴です。
今回の検体は、難読化された長大なコードで構成されており、フォーマットすると約17,000行に及びました。難読化に使われた Obfuscator.io の VM Obfuscation が使用された影響と考えられます。1

図6. Obfuscator.io で難読化された TonRAT のコード

TonRAT は以下の環境変数を参照します。

環境変数
USER_ID 感染端末の識別に使用する ID
CONTRACT_ACCOUNT_ID TON API への問い合わせに使用するアカウント ID
WS_URL WebSocket 接続先の URL
DEV ws:// と wss:// の切り替え
TONAPI_DOMAIN_PREFIX TON API ドメインのプレフィックス

WS_URL が指定されていない場合は、引数または TON API 経由で取得したドメインから WebSocket URL を構成します。

TonRAT は以下の流れで通信処理を行います。

  1. PowerShell 経由で現在の node.exe プロセス数を確認
  2. PowerShell 経由で HKCU\Software\Microsoft\Windows\CurrentVersion\Run キーの既存値を確認
  3. https://google.com へ fetch リクエストを送信し、ネットワークの疎通を確認
  4. TON API へ fetch リクエストを送信し、C2 ドメインを取得
  5. 取得した C2 ドメインへ WebSocket 接続を確立
  6. ECDH ハンドシェイクによる暗号化通信の開始
  7. 感染端末のシステム情報を C2 サーバーへ送信

TonRAT は TON のプラットフォームの API を利用して、C2 ドメインを取得します。TonRAT には TON アカウント ID が設定されており、この ID を用いて C2 ドメインを取得します。

  • リクエストする API エンドポイント:hxxps://tonapi[.]io/v2/blockchain/accounts/0:c<REDACTED>9/methods/get_domain

図7. tonapi.io から取得した C2 ドメイン

API の応答からドメインを取得し、WebSocket の接続先として使用します。

  • 通信先:wss://tonajukbhuakpo2[.]shop/w

TonRAT の通信プロトコル

TonRAT は WebSocket プロトコルでC2サーバーと通信します。通信データは標準の Base64 ではなく、カスタム Base64 エンコーディングが用いられています。

  • カスタム Base64:gXldcExbCIjweVsOF0PK1N2iQkpBmfuH/oYWS9atJ6nZqh38MRGy+T5zD74LArUv

WebSocket 接続後、クライアントと C2 間で ECDH(Elliptic Curve Diffie-Hellman)鍵交換によるハンドシェイクが行われます。鍵導出の流れは以下の通りです。

  1. クライアントが secp256k1 曲線のECDH鍵ペアを生成し、公開鍵を C2 サーバーへ送信
  2. C2 サーバーが公開鍵と salt を返送
  3. クライアントが ECDH で共有秘密を計算し、HKDF(SHA-256)で48バイトの鍵素材を導出
  4. 先頭32バイトを AES 鍵、続く16バイトを IV として使用
  5. 以降の通信内容は AES-256-CBC で暗号化

TonRAT は JSON 形式でデータを送信します。 以下は WebSocket 接続直後に送信するデータです。

{
  "type": 2,
  "pub_key": "<クライアントの secp256k1 公開鍵(hex)>",
  "message_id": "<UUID v4>"
}

ハンドシェイク完了後、AES で暗号化した以下の感染端末の情報を送信します。

{
  "type": 4,
  "user_id": "<user_id>",
  "domain": " tonajukbhuakpo2[.]shop ",
  "system_info": {
    "id": "GUID",
    "platform": "win32",
    "arch": "x64",
    "osVersion": "<OS バージョン>",
    "cpuCount": <CPU 数>,
    "hostname": "<ホスト名>",
    "username": "<ユーザー名>",
    "totalmem": <メモリ容量(バイト)>,
    "macAddress": "<MAC アドレス>"
  },
  "message_id": "<UUID v4>"
}

TonRAT は任意のコマンド実行の機能を持ちます。C2 サーバーからコマンドを受け取り、実行結果を以下の通り応答します。

{
  "type": 6,
  "to": "<message_id>",
  "success": true,
  "response": "<コマンド実行結果>",
  "message_id": "<UUID v4>"
}

また、ファイルのダウンロード・実行の機能もあり、C2 サーバーから URL を受け取り、以下のメソッドでファイルの fetch から実行までの処理を行います。%temp% フォルダーに指定された URL からファイルをダウンロードします。ダウンロードしたファイルが実行形式でない場合はエラーを返します。

  • fetch hxxps://
  • Add-MpPreference -ExclusionProcess "%temp%\.exe"
  • writeFileSync("%temp%\.exe", )
  • chmodSync("%temp%\.exe", 0755)
  • execFile("%temp%\.exe", [], { windowsHide: true })

TON アカウント上の値は攻撃者が自由に変更できるため、マルウェア本体を更新せずに C2 ドメインを切り替えることが可能です。当社の分析の結果、以下の通り、攻撃キャンペーン中に攻撃者が TON アカウント上の値を変更し、C2 ドメインを切り替えた様子を観測できました。

以下は各ドメインと IP アドレスの紐づけの時系列を示した図です。2026年6月2日ごろまでは C2 のドメインとして zloapobikahy23[.]bond のドメインが使用されていましたが、2026年6月2日から tonajukbhuakpo2[.]shop のドメインが使用されていることがわかります。

図8. zloapobikahy23[.]bondのFirst SeenとLast Seenの日付

図9. tonajukbhuakpo2[.]shopのFirst SeenとLast Seenの日付

通信先の分析

zip ファイルを配布しているドメインは同一パターンで攻撃者が取得しており、^photo-[0-9]{5}.cfd$ の形式で多くの関連ドメインを発見できました。

  • photo-12454[.]cfd
  • photo-22454[.]cfd
  • photo-23454[.]cfd
  • photo-24454[.]cfd
  • photo-26154[.]cfd
  • photo-26254[.]cfd
  • photo-26454[.]cfd
  • photo-26554[.]cfd
  • photo-26651[.]cfd
  • photo-26652[.]cfd
  • photo-26653[.]cfd
  • photo-26656[.]cfd
  • photo-26657[.]cfd
  • photo-27657[.]cfd
  • photo-27757[.]cfd
  • photo-32454[.]cfd
  • photo-52454[.]cfd
  • photo-62454[.]cfd

他にも類似のドメインとして以下のドメインが攻撃に使用されていることを確認しました。既に通信不可ですが、公開情報ではStealCマルウェアと紐づけられていることから TonRAT 以外にも情報窃取マルウェアが使用されていると考えられます。

  • photo-16524[.]com

また、今回確認した検体の TON アカウント ID と zloapobikahy23[.]bond のドメインは Booking.com の画面を騙った ClickFix の攻撃キャンペーンでも使い回されていたことが報告されています。
したがって、当社が今回観測したスパムメールは2026年3月ごろから行われている ClickFix のキャンペーンと関連性があると考えられます。

図10. Booking.com のページを騙った ClickFix のページ(引用:https://x.com/SinghSoodeep/status/2034625833847972088

まとめ

本記事では、Booking.com を騙りホテル運営会社を標的とした不審メールの攻撃手法を解説しました。
攻撃者は Calendly の日程調整メールや Google の短縮 URL といった正規サービスを悪用することで、セキュリティー製品やメールフィルターによる検知を回避しています。また、最終的に実行される TonRAT は、TON(The Open Network)の API を利用して C2 ドメインを取得するため、C2 ドメインのブロックによる対策だけでは対策を回避されてしまいます。さらに、WebSocket プロトコルによる C2 通信や Node.js ランタイムの利用など、一般的なセキュリティー監視では見落としやすい手法が組み合わされている点も特徴的です。

本攻撃への対策として、以下の点が有効と考えられます。

  • PowerShell の実行ポリシーの制限やログの監視
  • Node.js(node.exe)など、業務で使用しない実行ファイルの実行監視
  • TON API(tonapi.io)や WebSocket 通信など、通常の業務では発生しない通信先への接続の監視・遮断

Booking.com を騙る攻撃は継続的に報告されています。ホテル業界に限らず、外部からの問い合わせメールを受け付ける業務に携わる組織においては、同様の攻撃に対する警戒が必要です。本記事の分析結果が、組織におけるサイバーセキュリティー対策の一助となれば幸いです。

Appendix

IoC(ファイル)

ファイル名 ハッシュ値 (SHA256)
photo-262086327.zip 73e12fac74093fa3fdc0aae09dfc61728a6f0ac69a3619a11aae3dd745827650
PHOTO-819427133.png.lnk f1adf26743807d05d986d0f12bd1e759fb3c473c5946fd1a2fc5c7b5caf3e26d
L72zxE.ps1 cf0abf3d787b96ddb684e29f0c4903f3e6867eb97140dbddb4bda746cf9e2dcb
hjkADJgVXYybmH.js 9a75e798a71c2541f17102128f7c546288bbd3eb30b6b2b4948b17e73873a510
photo-703159625.zip 3dae5afc2244fb7232b9cd1cea8e72871e49780f33d14f3f328c5bbfe0428454
PHOTO-695281245.png.lnk 669487ee84114de6957332d0426eee62aedd6960b19ecdccdec98e3c5dd98183
LE3f0MRT.ps1 2df7df0993e8ce33b3a11a2aa75ff120381bbe3158237bb828df8e577304f518
dHVAjSB1s3uy.js 9a75e798a71c2541f17102128f7c546288bbd3eb30b6b2b4948b17e73873a510

IoC(通信先)

  • photo-21454[.]cfd
  • photo-26654[.]cfd
  • zloapobikahy23[.]bond
  • tonajukbhuakpo2[.]shop



  1. JavaScript obfuscator tool - Protect Your JS Code
    https://obfuscator.io/