フィッシング
日本のホテル産業を狙ったフィッシングキャンペーンの展開を観測
2026年5月にBooking.comを利用している日本の宿泊施設を狙うフィッシングメールが多数観測されました。攻撃者が狙った対象と、用いられた攻撃手法、マルウェアの特徴について記述します。
2026年5月下旬、宿泊施設の情報サービス「Booking.com」の日本のパートナー企業向けに、「重要:ゲスト滞在レビュー依頼」という件名で送付される不審なメールを確認しました。この不審メールを起点とした攻撃では、不審サイトへのハイパーリンクからアクセスすることにより、zipファイルがダウンロードされ、zipファイル内のショートカットリンクをユーザがクリックすることでマルウェアの感染が開始される攻撃キャンペーンの一種でした。
メールリンクに記載された不審サイトが運用されるドメイングループ(後述するTLD=CFD)へのアクセス状況について確認した結果、TrendAIの観測したデータでは日本地域からのアクセスが最も多いことが確認されています。
- 重要:ゲスト滞在レビュー依頼
- 【重要】お客様からの重大な苦情に関するご連絡
件名の他、含まれるハイパーリンクの文字列にも特徴があることが確認されており、以下の複数の文字列が確認されています。
- Download Photos and Videos
- 証拠写真・動画を確認する
- 添付資料を確認する
また、以下の英文も観測されており、国内組織向けのメールでありながら、英語話者を対象としていると推測される攻撃も確認されています。件名は1種類のみでした。
- Urgent: Bed bug complaint from guest
ハイパーリンク先のインフラおよびマルウェアを調査した結果、異なるメールへと繋がる情報が確認され、Gmailを送信元として悪用する手口も観測されました。
冒頭で紹介したハイパーリンク付きのメールを送付する手口と異なり、観測された別メールの事例の一部では、宿泊施設の担当者に対してURLを含まない通常の問い合わせメールをまず送り、担当者からメールの返信を受け取った後、再度悪意あるURLを含んだハイパーリンクを記述してメールを送る「やり取り型の攻撃」が用いられていることが確認されました。最初に悪意あるURLを記載したメールを送らず、やり取りをすることで相手の信頼を得る手口は、APTにも通じるテクニックとも言えます。
Gmailを悪用する手口において、当社にて観測したメール件名は以下の通りです。日本語の件名は見つかっていません。しかしGmailを用いて如何にも通常の顧客を装ってやり取りを開始している特徴から、本調査以降に用いられる可能性もあり、注意が必要です。
いずれのTLDグループも、”domain/v”のURLにアクセスすることでzipファイルがダウンロードされる仕組みが実装されており、標的とするメールアドレスへの送信によって使い分けていることが確認できています。
これらの観測されたドメインはCloudflareのインフラを悪用、かつCloudflare Name Serverのペアが「galilea」と「moura」の組み合わせでした。CloudflareのDNSは必ず2種類の名前が割り当てられ、別ユーザがDNSを登録する際に、偶然合致する可能性が低い性質を持つため、同一のDNSの名称を持つペアの場合、同じ攻撃者によるものと推測できます。
6月以降の作成ドメインにおいては「brianna」と「roan」の組み合わせに変わっており、何らかの理由でアカウント内のゾーンまたは管理手順が変わった可能性が考えられます。観測されたメールからのハイパーリンク、およびドメインの調査により、図 4の分類分けと表 2の特徴が存在することが分かりました。
上述したようにCOMのTLDグループにおいては唯一Registrant(ドメイン登録者)の特徴が存在していることも確認されました。Registrant Emailに用いられているghastlierは使い捨てメールドメインであるため、長期間に渡り利用を継続することは困難であると考えられます。攻撃者は何らかの目的か意図を持ってRegistrant NameとRegistrant Emailにこの値を設定しているようです。
LNKに埋め込まれたPowershellコマンドは、2つの巨大整数を以下System.Numerics.BigIntegerとして扱い、その差分を計算するものでした。計算により得られた数値を、さらに256で除算を繰り返し、最後の余りを1バイトの文字(Char)として変換することで、通信先のドメインを復元しています。復元されたドメインに対してInvoke-WebRequestを実行し、取得したPS1ファイル(Powershellスクリプトファイル)を「%TEMP%」 配下へと保存し、Powershellで実行します。System.Numerics.BigIntegerは6月以降に用いられており、5月末まではbigintにて定義されていました。
PS1を取得するために外部へと通信する際、System.Numerics.BigIntegerにより生成されたドメイン名は、zipファイルを取得したドメインのURLへとPowershell.exeを用いて接続を行います。この時、User-Agentに”Powershell”の文字列が含まれているかをサーバ側で確認します。Powershellが含まれない、ブラウザのUser-Agentなどの場合は404 NotFoundがレスポンスとなり、Powershellが含まれる場合は200 OKのレスポンスにより、PS1ファイルのスクリプト文字列が取得されます。
取得されたPS1ファイルは、ShowWindowを制御することで、PowerShellウィンドウが非表示になるように呼び出されます。その後、分割された文字列から結合し、以下の配下のフォルダをNode.jsの配置先として定義し、同フォルダパスに後段ペイロードとなるJavaScriptファイルを保存します。ペイロードの保存先は以下のパスです。
%USERPROFILE%\\Appdata\\Local\\Nodejs
また、同フォルダへnode-v24.13.0-win-x64を展開するよう文字列結合が行われます。このnodejsの展開は後述するWebサイトからのダウンロードを伴います。
%USERPROFILE%\\Appdata\\Local\\Nodejs\\{filename}.js
%USERPROFILE%\\Appdata\\Local\\Nodejs\\node-v24.13.0-win-x64\\
Get-ProcessとWhere-Objectを使用して、同フォルダパスのnode.exeが端末上で既に動作している場合はexit 1として処理が終了されるよう、多重起動防止も組み込まれていました。
スクリプト内ではBase64からAES鍵(32バイト)とIV(16バイト)を復元し、Mutex名の処理や、後段JavaScriptペイロードの実行、引数の復号の処理が行われています。
暗号化されたBlob(Binary Large Object)※をAES-CBC(Cipher Block Chaining)で復号し、Mutex名を取得します。Mutex名による多重実行防止も実装されていました。さらに、77行目に非常に長いBase64の文字列が格納されています。
※Blob(Binary Large Object):データのかたまり
Node.exeが存在しない場合、nodejs.orgの公式Webサイトからnode-v24.13.0-win-x64.zipを取得し、以下の配下へと展開します。
%USERPROFILE%\\AppData\\Local\\Nodejs
文字列の結合により以下のURLとなります。このダウンロードではv24.13.0が指定されダウンロードされており、本調査時点における検体すべてにおいてv24.13.0が指定されていることが確認されています。
https://nodejs.org/dist/v24.13.0/node-v24.13.0-win-x64.zip
77行目に格納されていたBase64文字列を100行目から101行目の処理でデコードし、さらにAES-CBCで復号することでJavaScriptペイロードを生成します。また、JavaScriptペイロード実行時に利用する引数として、103行目で暗号化BlobをAES-CBCで復号することで、PS1ファイルを取得したドメイン名を復号します。結果、以下のように実行されます。
node.exe {JavaScript payload}.js {DomainName}
マルウェア TONResolver 静的解析の実施
node.exeによって引数とともに実行されるJavaScriptファイル(検出名:TrojanSpy.JS.TONRESOLVER.A)は、RAT(Remote Access Trojan)として動作するマルウェアでした。このRATマルウェアはVM型難読化 (VM-based obfuscation) が行われており、純粋な静的解析のみでは詳細を明らかにすることができません。動的解析と併せて動作を確認したことで、ブロックチェーンプラットフォーム「TON※」をC&Cサーバの解決先として用いることが確認されました。
*TON(The Open Network):TelegramがTelegram Open Networkの名称で開発をはじめ、現在はTON Foundationを中心として開発・運営をしているブロックチェーンプラットフォーム。
正規サービスを隠れ蓑として悪用する手法は「デッドドロップリゾルバー」と呼ばれる通信解決の攻撃手法であり、単純な静的解析のみでは通信先が特定できない特徴を持っています。運用中のC&Cサーバが何らかの方法でテイクダウン、ブロック等された場合も、C&Cサーバの通信先を切り替えることが可能となり、攻撃者による攻撃永続性を確保する際に用いられる手法の1つです。
VM型難読化では、ロジックが独自の仮想命令セットへ変換され、解釈されることでスクリプト内に埋め込まれたCustom VM Interpreter (独自VMインタプリタ) が実行されます。この解釈によりDispatcherは仮想のopcodeに応じてスクリプトのハンドラへと処理が振り分けられるため、静的解析のみでフローを復元して解析することが困難でした。
コードを整理すると、JavaScript内ではvme (0x…) の箇所が文字列を復号する仕組みを持ち、vmn_22aed1の箇所がVMインタプリタとして動作します。これらのコードを、静的解析による文字列の復号を行ったことで、下記の機能が実装されていることが判明しました。
インタプリタへの処理受け渡し
コードを静的解析することで、vmn_22aed1へと処理を渡し呼び出す構造となっており、vmn_22aed1が難読化された命令を解釈するVMインタプリタとして動作していると考えられます。
ファイル操作や情報収集に関連する構造
Vmn_22aed1へ受け渡すための関数hにおいて、osやfsといったオペレーティングシステム側の操作を行うためのモジュールが読み込まれることが読み取れました。
関数に着目した文字列の復号
元となるJavaScriptでは難読化されているため、用いられる関数が分かりません。そのため、文字列配列を返す処理に相当するvmz関数、文字列を復号する箇所と推測されるvme関数に着目し、vme (…) の呼び出しを復号しました。復号した文字列の中からBase64文字列および平文を確認することで、以下の機能に関与する文字列が確認されました。
・fetch + https://google.com
・HKCU:\\Software\\Microsoft\\Windows\\CurrentVersion\\Run
・aes-256-cbc
・createCipheriv
・createDecipheriv
・Received message
・secp256k1
これらの静的解析の結果から、マルウェアはNodejsに読み込まれ、独自の解釈を行って実行され、WebSocket (ECDH + HKDF-SHA256 + AES-256-CBC) により暗号化されるため、プロキシやネットワークセキュリティのサービスにおいて、パケット文字列による不審な検出を行うことは極めて困難であると考えられます。
また、Base64文字列および平文には以下のtonapiioのURLが確認されています。
hxxps://tonapi\[.\]io/v2/blockchain/accounts/ 0:c66119f0e5635c4380441d7a79baf0c02a0ab7ea6cd78de06507fc5dc2c1a5d9/methods/get\_domain
URLを確認することで、本マルウェアはJavaScript内に固定の文字列として保持するのではなく、C&Cサーバの通信先の処理について、TonAPIを介して取得することで、攻撃者がC&Cサーバの通信先を容易に変更することができることが判明しました。
通信先となるtonapiioは正規のWebサイトおよびサービスであり、TONスマートコントラクトにスクリプトを実装し、攻撃者が有効となるC&Cサーバのドメインを以下に実装していることが確認できました。
methods/get\_domain
C&Cサーバがブロックされた場合は、攻撃者が新たにTONスマートコントラクトに対して文字列を送ることで、新たなC&Cサーバへの通信が自動的に行われる仕組みとなっています。
動的解析の実施
ここまで記述した静的解析を含め、より正確な動作を確認するために動的解析を行った結果、以下の動作を行いながら実行する流れが確認されました。
また、上記流れを含め、動的解析実施時の送受信メッセージを解析した結果、RATとして動作すると推測される、以下のtype:0からtype:4までの機能分類が確認できました。しかし、type:5からtype:8は仮の分類分けであり、静的解析の文字列群とコード解析から割り当てた解釈となります。
type:4が持つ端末情報の送信には、明確に以下の情報が含まれていることが確認できました。domainにはLNKおよびPS1取得時および実行時の引数として割り当てられており、その他の情報は端末が持つユーザ名、ホスト名の他、OSやCPUのコア数、メモリ情報、MACアドレスのハードウェア情報も送信されます。
ここまでの解析により、一連の流れにおいて、被害者となるユーザがLNKを実行し、Node.jsによって実行されるTONResolverを実行した場合も、即座に端末上のファイルや認証情報が盗まれる攻撃ではないと判明しました。しかし、攻撃者とのKeepalive通信により、追加でのコマンドやファイルの実行が行われる機能が備えられていることから、被害者の端末情報や接続元IPアドレスなどの環境情報をもとに、追加コマンドの実行対象を選別しているものと推測できます。
攻撃の始まりから、追加コマンドおよび後続のマルウェアの実行までを整理すると以下の流れとなります。
- 攻撃者によるTONへインフラとスクリプトの設定、およびC&Cドメインの更新
- フィッシングメールの送付と、送付されたハイパーリンクのクリック
- photo-*****[.]cfd の悪意あるWebサイトへ接続
- 悪意あるショートカットリンクが含まれるZIPファイルのダウンロードと展開
- ユーザ操作によるショートカットリンクファイルの実行
- 再度 photo-*****[.]cfd の悪意あるWebサイトへPS1スクリプトのダウンロードリクエスト
- PS1スクリプトの実行
- Node.zip(Node.exe)の取得と展開
- 悪意あるJavaScript(TONResolver)をNode.exeに読み込み実行
- TONプラットフォーム(tonapi[.]io)へ接続し、
methods/get_domainへアクセス - レスポンスにてC&Cドメインを取得
- 取得したC&Cサーバへ接続し、公開鍵認証を確立(その後、端末情報を送信)
- Keepaliveの実施
- 攻撃者による追加攻撃実行の選定とコマンド送信
- コマンド実行および追加マルウェアの展開(認証情報等の窃取を実施)
ブロックチェーン TONコントラクトとトランザクションの解析
デッドドロップリゾルバーとして悪用されたTONコントラクトのアクセス先はtonapiioに含まれるmethods/get_domainへのWebSocket接続による、C&Cサーバの解釈により得られるURLでした。TONコントラクトのTransactionはtonapiioのURLにアクセスすることで誰でも閲覧することができます。しかし、直接的に文字列としてC&Cサーバが書かれているものではありません。
hxxps://tonapi\[.\]io/v2/blockchain/accounts/0:c66119f0e5635c4380441d7a79baf0c02a0ab7ea6cd78de06507fc5dc2c1a5d9/transactions
TONコントラクト内のraw_body部においてHex文字列は構造化されており、解釈すると次表のように整理できます。
TONResolverであるJavaScriptが実行された際の通信先の取得では、methods/get_domainへアクセスすることで、このC&Cサーバドメインが処理されることが確認できました。methods/get_domainへリクエストを送ることで得られるレスポンスは以下の通りdecoded.domainにC&Cサーバのドメインがレスポンスとして得られました。
各Transaction Hashのutime (日時)、Hex文字列を確認することで、いつどのC&Cサーバドメインが攻撃者によりTONコントラクトに書き込まれたかを確認することができました。
以下のTONコントラクトのTransactionsを整理すると、下記の流れが確認できました。
0:c66119f0e5635c4380441d7a79baf0c02a0ab7ea6cd78de06507fc5dc2c1a5d9
入金元となるTONコントラクトを確認した結果、name:Huobiが設定されたTONコントラクトから入金されていたものの、それ以外の有用な情報は確認されませんでした。
攻撃者が用いるC&Cサーバ更新用のTONコントラクトは以下であり、
0:6d5b44d0678e6bd6703f2cabd2531ccf5a0b11cc081f8f7175bd679db4c12d41
いずれのTransactionsもこのアドレスを送信元とするものでした。
TONコントラクトのmethodsは、TonAPIが呼び出され処理されます。CRC16を用いた計算式により、methods/get_domainで呼び出された文字列が数字へと変換され、TONコントラクトの実装に従い処理が行われます。そのため、get_domainを呼び出す攻撃者のコントラクトにおいて、どのように実装されているのかを確認することが必要となります。以下の通り、CRC16/XMODEMによる計算式では、get_domainは 119378 へ変換されることが分かります。
crc16(“get\_domain”) | 0x10000
\==\> 119378
TONコントラクトへ実装された機能は”code”をバイナリファイルとして取得し、TON-Blockchainを処理するためのライブラリ(tdisasm)により逆アセンブルすることで実装された機能をアセンブリレベルで読み解くことができます。攻撃者が値を保管していると推測される”data”も同様にバイナリファイルにて取得できます。
逆アセンブルした結果は下記図の通りとなり、3行目にキー0の処理、40行目にキー119378の処理が確認できます。さらに、16行目にTONコントラクトのTransactionに含まれた、op_codeであるx{17BE49CF}が確認できます。このop_codeは表 5に記載したop_codeと同じであり、攻撃者はこの処理を含めてTONコントラクトを実装していることが伺えます。
- キー0:内部メッセージの管理用ウォレットからの更新処理
- 管理ウォレットから内部メッセージ(Transaction)を受信
- data cellから登録されているウォレットアドレスを読み込む
- 内部メッセージの送信元アドレスとdata cellのウォレットアドレスを比較する
- 一致しない場合は403で処理を拒否する
- 一致した場合、本文が
0x17BE49CFで始まるか確認する 0x17BE49CFで始まる場合、内部メッセージに記載された新しいC&Cドメインをdata cellに保存する
- キー119378:
methods/get_domainによるC&Cドメインの処理methods/get_domainが呼び出されると、119378の処理が開始される- data cellからドメインを読み込む
- 先頭128bitの処理および管理ウォレットアドレスの処理を飛ばす
- data cellに保存されているドメイン長を読み込む
- data cellの
ref[0]に保存されているドメイン文字列となるHexを読み出し、decoded.domainとしてC&Cドメインの文字列を返す
展開された実行ファイルにより、以下のフォルダに対する操作、およびC:\Windows\System32\lsass.exeプロセスの関与が観測されています。フォルダにはブラウザへ保存されたパスワードのSQLite DB、Cookie DB、History、autofill、ブックマーク情報などが含まれており、攻撃者により窃取された可能性が疑われます。
C:\\Users\\\<UserName\>\\AppData\\Local\\Google\\Chrome\\User Data\\
C:\\Users\\\<UserName\>\\AppData\\Local\\Microsoft\\Edge\\User Data\\
現在も継続しているキャンペーンの一種であり、TrendAIでは引き続き攻撃の詳細と被害状況について分析を進めています。後続に展開されるマルウェアについて公開可能な情報が確認された場合は、改めて記事を公開する予定です。
まとめ
TONをデッドドロップリゾルバーとして悪用する、Bookingのパートナー企業向け攻撃キャンペーンでは、Node.jsを悪用することで難読化が施されていました。TONのブロックチェーンプラットフォームの悪用と、正規のNode.jsを組み合わせた攻撃は、従来の多くの検出を回避できてしまう恐れがあります。
攻撃キャンペーンの進行に合わせ、新たなドメインの登録と、C&Cサーバの切り替えなども行われており、攻撃者は常に攻撃の動向と成功を監視しています。TONResolverに感染した端末は、常にKeepaliveによるコマンドの受付を待ち続けており、攻撃者が狙った場合は攻撃が進行してしまうリスクを持ち合わせています。
Node.jsはJavaScriptを端末上で容易に動作させることができ、アプリケーションを動作することができる便利な実行環境とプラットフォームです。しかし、このような便利な環境は時にして検出を回避し、攻撃者の行動すらも容易とさせてしまいます。組織が持つ端末上で動作するサービスとプロセスは常に監視を行い、日ごろからベースラインを整えながら異常値を見つけるための体制を構築することが重要です。
狙われたBooking.comパートナー企業向けには、メールを起点として被害に遭ってしまっていることが確認されています。日頃からサービスと機能を利用した、通常の業務に不要な通信やアプリケーションの制御を行うことも、これらの攻撃となる脅威から組織を守ることが期待できます。各設定の見直し、監視の強化、いざというインシデント発生時の運用について今一度見直すことを推奨します。
対策
これらの攻撃に対して、いくつか脅威への対策と緩和は以下の事項が考えられます。
TONプラットフォームへの接続制限
インターネット利用端末において、プロキシゲートウェイを設け、接続時のフィルタリングを行うことで、特定のデッドドロップリゾルバーの悪用から守ることが可能となります。今回の攻撃では「tonapiio」にアクセスすることで、C&Cサーバのドメインが取得される攻撃手法が用いられていました。
通常、業務でブロックチェーンプラットフォームへアクセスする環境の必要性は限定的であると考えられます。不要な通信である場合は事前に接続制限を施すことで、攻撃チェーンを途中で絶つことが可能となります。
TrendAI Vision One™ Workbenchによる検出
Workbenchでは不審なNode.jsの利用について、「Suspicious Autorun Entry Created by Node.js」のモデルにおいて、重大度:高にてイベントを検出します。
TrendAI Apex One および TrendAI Vision OneTM – Endpoint Security
エンドポイントに備えられたファイアウォール機能を利用することで、本攻撃によるPS1ファイル取得時の通信をブロックする通信制限を施すことが可能です。Powershell.exeの外部IPアドレスへの通信を遮断する設定を行うことで、攻撃を途中で中断させることができます。利用にはVision OneコンソールのEndpoint Securityメニューより設定が必要です。
TrendAI Vision OneTM – Zero Trust Secure Access (ZTSA)
ZTSAが提供するInternet Access Ruleにおいて、Powershellの文字列が含まれるUser-Agentに対して通信制限を行うことで、Powershellによる外部通信や、ファイル取得を行う攻撃を中断させることができます。利用にはVision OneコンソールのZero Trust Secure Accessメニューより設定が必要です。
ハンティングクエリ
TrendAI Vision One™ XDR Data Explorer App
TrendAI Vision One™をご利用のお客様は、XDR Data Explorer Appを使用することで、本ブログ記事で取り上げた不正な痕跡を、ご自身の環境内のデータと照合・ハンティングできます。
eventSubId: 101 AND processCmd: (powershell.exe AND ps1) AND objectFilePath: AppData\\Local\\Nodejs\\node.zip AND parentCmd: ([bigint] OR BigInteger)
eventSubId: 901 AND processCmd: (SOFTWARE\\Microsoft\\Cryptography AND MachineGuid) AND parentFilePath: \\AppData\\Local\\Nodejs\\node-v24.13.0-win-x64\\node.exe AND processName: powershell.exe
eventSubId: 301 AND processFilePath: AppData\\Local\\Nodejs\\node-v24.13.0-win-x64\\node.exe AND processCmd: (node.exe AND .js) AND hostName: tonapi
侵入の痕跡(IoC: Indicators Of Compromise)
本記事に関する侵入の痕跡は、こちらをご参照ください。
執筆者:
佐藤 佑哉(アドバンストサイバーディフェンスグループ Senior Incident Response Consultant)
調査協力:
Don Ovid Ladores(アドバンストサイバーディフェンスグループ Senior Engineer, Threat IR and Forensic)
マネージドサービスチーム (JP Managed Service Team)