2026年1月20日18時03分(UTC)に、当社のシステムは新しいnpmパッケージの存在を検知し、アラートを発し始めました。 flockiali26分以内に、攻撃者は4つのバージョンを公開しました。2日後、彼らは立て続けに公開を行いました。 opresc, prndn, oprnm、および operni詳細を調査した時点では、ヨーロッパ、中東、米国全域の産業およびエネルギー企業の従業員を標的とした、高度に絞り込まれたスピアフィッシングキャンペーンを発見していました。
そして、その配信メカニズムは? npm + jsDelivrです。他社のCDNにただ乗りできるのに、なぜ自前のフィッシングインフラをホストする必要があるのでしょうか?
発見したこと
これらのパッケージには単一のJavaScriptファイルが含まれており、ロードされるとウェブページ全体をフィッシングキットに置き換えます。しかし、興味深いのはここからです。各バージョンは特定の人物を標的としています。
5つの企業にわたる5つの標的を発見しました。
flockialiv1.2.5は、フランスの複合材料メーカーであるCQFD Compositesの人物を標的としています。flockialiv1.2.6は、スペインの風力タービン企業であるIngeteamの人物を標的としています。oprescv1.0.0は、UAEのEV充電企業であるEmagineの人物を標的としています。prndnそしてoprnm両方とも、ドイツの産業用ミキシング企業であるAmixon GmbHの同じ人物を標的としています。operniv1.2.7は、米国の製パン機器企業であるCMC Americaの人物を標的としています。
攻撃者は無差別に攻撃しているわけではありません。各標的ごとに新しいパッケージを公開しています。そして、特定の標的が特に興味深い場合、異なる配信パスを持つ複数のパッケージを公開します。
攻撃の流れ
被害者がフィッシングリンクを開くと何が起こるかをご紹介します。
ページがロードされ、偽の「Micro-Share」ファイル共有インターフェースが表示されます。
📁 Micro-Share
安全なファイル共有
共有ドキュメントを保護するため、メールアドレスを確認し、続行してください。
以下のドキュメントが安全に共有されました: [victim]@ingeteam.com
📄 Specification.pdf
- RFQ.pdf
- Project descriptions.pdf
- equipment's end destination.pdf
[ ダウンロード ]
ドキュメントはエンジニアリング関連のテーマであり、RFQ、プロジェクト仕様書、CADファイルなどです。まさに産業企業の従業員が受け取るであろう内容です。
被害者が「ダウンロード」をクリックすると、ページはMicrosoftブランドのログイン画面に遷移します。
⊞ Microsoft
サインイン
⚠ 認証が必要です。「次へ」をクリックしてサインインし、ダウンロードを続行してください。
┌────────────────────────────────────────┐
│ [victim]@ingeteam.com │ (読み取り専用)
└────────────────────────────────────────┘
アカウントをお持ちでない場合:作成
アカウントにアクセスできませんか?
[ 次へ ]
被害者のメールアドレスは既に入力されており、読み取り専用としてマークされています。「次へ」をクリックすると、認証情報収集サーバーにリダイレクトされます。
window.location.href = "https://login.siemensergy[.]icu/DIVzTaSF";はい、 siemensergy[.]icuこれはSiemens Energyのタイポスクワットです。攻撃者は、ターゲットがどの企業と取引しているかを綿密に調査していることが明らかです。
アンチボット対策
このフィッシングキットは非常に巧妙で、自動分析を回避するための複数の手法が含まれています。
WebDriver (navigator.webdriver) の有無、空のプラグインリスト、ゼロの画面サイズをチェックします。また、以下のユーザーエージェントに一致するものをフィルタリングします。 /bot|crawl|spider|headless|HeadlessChrome/i. ボットが入力した場合にキルスイッチをトリガーするハニーポットフォームフィールドが含まれています。また、ダウンロードボタンは、ページがマウスの動きやタッチイベントを検出するまで無効のままです。インタラクションがなければ、フィッシングは発生しません。
v1.2.5 驚くほど洗練されたマウス軌跡アナライザーを用いて、さらに高度な対策を講じています。
isLegitimateTrajectory() {
if (this.mouseTrail.length < 20) return false;
const t = this.mouseTrail.slice(-10);
const variance = t.reduce((acc, p) =>
acc + Math.pow(p.x - t[0].x, 2), 0) / 10;
return variance > 100;
}
これは、直近10回のマウス位置の分散を計算します。カーソルが(ボットのように)不自然に直線的に移動した場合、分散は低く保たれ、ボタンは有効になりません。実際の人間は不規則に動くものです。
このフィッシングキットには、相当な労力が費やされています。
5つのパッケージ、5つのターゲット、2つのテンプレート
ペイロードのバージョンは、単に異なる人々をターゲットにしているだけでなく、2種類の異なるフィッシングキットのデザインを使用しています。
会社情報 v1.2.5 (CQFD Compositesをターゲットとする) ペイロードは、紫のグラデーションとInterフォントを使用した「MicroSecure Pro」ブランドを採用しています。これは、CADファイルやエンジニアリング成果物を餌として表示し、洗練されたマウス軌跡アナライザーを備え、認証情報をoprsys.deno[.]devに送信します。
残りのもの(v1.2.6, opresc, prndn, oprnm, operni)は、白い背景とSegoe UIを使用した、よりクリーンな「Micro-Share」デザインを採用しています。これらはRFQ(見積依頼書)やプロジェクト仕様書を表示し、基本的なインタラクションチェックを使用し、認証情報をSiemens Energyのタイポスクワットに送信します。
会社情報 v1.2.5 以前のキットは、アニメーションやグラデーションの背景でより派手でした。新しいキットはよりミニマルで、実際のMicrosoftの外観に近いです。攻撃者はA/Bテストを行い、よりシンプルなデザインの方がコンバージョン率が高いと判断したのかもしれません。あるいは、単に反復作業を行っているだけかもしれません。
CMC Americaのペイロード(operni)は、食品業界向けにカスタマイズされた文書の誘い文句を持っています。「製品仕様と成分詳細」、「生産能力目標と運用パラメータ」といった内容です。攻撃者は餌をカスタマイズしているのです。
興味深いのはC2(コマンド&コントロール)の選択です。最近のすべてのターゲットは、Siemens Energyのタイポスクワットに誘導されています。これは偶然ではありません。Ingeteamは風力タービンを製造し、EmagineはEV充電インフラを手がけ、AmixonとCMC Americaは産業用混合装置を製造しています(Amixonはバッテリー材料も扱っています)。これらすべての企業は、Siemens Energyが主要なプレーヤーである市場で事業を展開しています。攻撃者はターゲットのビジネス関係を調査しているのです。
微妙な変化に注目してください。 siemensergy[.]icu (ハイフンなし)が siemens-energy[.]icu (ハイフンあり)に変わりました。 siemens-energy[.]com ドメインです。DNSを通じて、ハイフンなしのドメインにはレコードが一切存在しないことを確認しました。攻撃者はそれを放棄したのです。
インフラが物語る
ここからが興味深い点です。C2インフラがいつ設定されたかを確認するために、証明書の透明性ログを使用しました。*.siemens-energy[.]icuの最初のSSL証明書は2025年10月24日に発行され、その後1月14日、16日、17日に更新されました。npmキャンペーンは1月20日に開始されています。
攻撃者はnpmパッケージが出現する3ヶ月前にドメインを登録し、SSL証明書を取得していました。この点をよく考えてみてください。これは日和見的なものではなく、誰かがこの作戦を計画し、2025年10月にインフラを構築し、その後待機していたのです。
C2サーバー(163.123.236[.]118)は、ミシガン州マスキーゴンにある小規模なホスティングプロバイダーであるRackGeniusによってホストされています。一方、古い v1.2.5 ペイロードは oprsys.deno[.]devを使用しており、これはGoogle Cloudインフラ(Deno Deploy)に解決されます。これはフィッシングのための無料サーバーレスホスティングであり、典型的な手口です。このキャンペーンを観測した際、Denoチームに通知したところ、彼らは非常に迅速に対応し、サービスを停止させました。
なぜnpm + jsDelivrなのか?
package.jsonがその詳細を物語っています。
{
"keywords": ["jsdelivr", "cdn", "template"],
"main": "resp/template.min.js"
}
jsDelivrはnpmパッケージを自動的にミラーリングします。npmに公開すれば、即座にCDNホスティングが利用できます。 cdn.jsdelivr[.]net/npm/flockiali@1.2.6/resp/template.min.js。サーバーの維持管理やホスティング費用は不要で、被害者は不審なフィッシングドメインではなく、正規に見えるCDNのURLを目にします。
タイムライン
1月20日(26分間で4つのバージョン):
- 18:03 UTC:
flockialiv1.2.3(空のプレースホルダー) - 18:10 UTC:
flockialiv1.2.4(メタデータ更新) - 18:15 UTC:
flockialiv1.2.5(CQFD Compositesターゲット) - 18:29 UTC:
flockialiv1.2.6(Ingeteamターゲット)
1月22日(さらに5つのパッケージ):
- 09:52 UTC:
oprescv1.0.0 (Emagine ターゲット) - 12:29 UTC:
prndnv1.0.0 (Amixon ターゲット) - 12:49 UTC:
oprnmv1.0.0 (Amixon 再度) - 13:11 UTC:
operniv1.2.6 (破損、空) - 13:16 UTC:
operniv1.2.7 (CMC America ターゲット)
攻撃者はターゲットのリストを持っており、それらを順次処理しています。Amixon社の従業員は20分間隔で2つのパッケージを受け取りました(過剰ではないでしょうか?)。CMC Americaのパッケージにはタイプミスがありました(reps/ ~の代わりに resp/)と、破損した最初のバージョンが含まれていました。おっと。この攻撃者は迅速に行動しており、ミスを犯しています。
どのような対応が必要でしょうか?
ターゲットとされた企業のいずれかに所属している場合、誰かがjsDelivrのURLへのリンクを受け取ったか、または「Micro-Share」ドキュメント共有に関連するものをクリックしたかどうかを確認してください。
以下のリンクを含むメールログを検索してください。 cdn.jsdelivr[.]net/npm/flockiali, cdn.jsdelivr[.]net/npm/opresc, cdn.jsdelivr[.]net/npm/prndn, cdn.jsdelivr[.]net/npm/oprnm、または cdn.jsdelivr[.]net/npm/operni。境界でIOCドメインをブロックしてください。認証情報が入力された場合は、直ちにそれらをローテーションしてください。
侵害の痕跡
C2ドメイン:
login.siemens-energy[.]icu(163.123.236[.]118、RackGenius)login.siemensergy[.]icu(放棄済み、DNSなし)oprsys.deno[.]dev(34.120.54[.]55, Deno Deploy)
フィッシングURL:
https://login.siemensergy[.]icu/DIVzTaSFhttps://login.siemens-energy[.]icu/DIVzTaSF
jsDelivr URL:
hxxps://cdn.jsdelivr[.]net/npm/flockiali@1.2.6/resp/template.min.jshxxps://cdn.jsdelivr[.]net/npm/flockiali@1.2.5/resp/template.min.jshxxps://cdn.jsdelivr[.]net/npm/opresc@1.0.0/resp/template.min.jshxxps://cdn.jsdelivr[.]net/npm/prndn@1.0.0/template.min.jshxxps://cdn.jsdelivr[.]net/npm/oprnm@1.0.0/resp/template.min.jshxxps://cdn.jsdelivr[.]net/npm/operni@1.2.7/reps/template.min.js
パッケージ:
flockiali(1.2.3-1.2.6)opresc(1.0.0)prndn(1.0.0)oprnm(1.0.0)operni(1.2.6-1.2.7)
ペイロードハッシュ (SHA256):
3ceb182fb32a8fb0f0fcf056d6ab8de1cf6e789053f1aadc98ba315ae9a96f0c– flockiali 1.2.6fdb6c79a8d01b528698c53ebd5030f875242e6af93f6ae799dee7f66b452bf3e– flockiali 1.2.54631584783d84758ae58bc717b08ac67d99dee30985db18b9d2b08df8721348e– opresc211f88a55e8fe9254f75c358c42bb7e78e014b862de7ea6e8b80ed1f78d13add– prndn/oprnm7d7f795ac1fcb5623731a50999f518877fd423a5a98219d0f495c488564a1554– operni 1.2.7

