6件のnpmパッケージ、イーサリアムウォレットからC2アドレスを読み取り

6件のnpmパッケージが、攻撃者の管理下にあるイーサリアムウォレットに問い合わせて次段階のマルウェアの取得先を割り出していたことが判明しました。ブロックチェーン上の取引データからコマンド&コントロール(C2)アドレスを読み取る手口です。

Sonatype Research Labsは8月10日にこれらのパッケージを特定し、同日に分析結果を公開しました。6件すべてが同一のペイロードを含んでおり、Sonatypeはsonatype-2026-005899およびsonatype-2026-005901として追跡しています。

このウォレットアドレスは、OpenSourceMalwareの研究者らが以前に文書化していたものと一致します。同社はこの手法を「NullReceiver」と名付け、調査対象の活動を北朝鮮(DPRK)関連のContagious Interviewキャンペーン(Lazarusグループと関連)に帰属させています。 

Sonatypeは、ウォレットの一致を確認したほか、パッケージの乗っ取りやブロックチェーンを介した後続インフラの取得など、類似の手口を確認したと述べています。

npmサプライチェーン攻撃についてさらに詳しく: 北朝鮮のハッカー集団、npmパッケージ攻撃の新たな波を仕掛ける

デッドドロップとしての取引

実行されると、ローダーはイーサリアムに対して該当ウォレットからの送金取引を照会し、その取引の送金先アドレスからバイト列を読み取ります。このバイト列をデコードすると2つのIPv4アドレスが得られ、それぞれ主系・副系のC2エンドポイントとして扱われます。

Sonatypeによれば、今回の実装は従来確認されていたものよりもさらに高度化しているといいます。ローダーは複数のイーサリアムRPC(リモートプロシージャコール)プロバイダーに問い合わせを行い、それらの間でリクエストを競わせ、呼び出しをバッチ処理し、さらに該当の取引が見つからない場合はBlockscout APIにフォールバックすることができます。これにより、いずれかの経路が失敗してもインフラを復旧できる複数のルートを確保しています。

アドレスの解決後、ローダーはサーバーからさらに2段階のペイロードを取得します。通常のリクエストが失敗した場合は再試行し、代わりにレスポンスヘッダーからペイロードを復元します。

取得結果はデコードされ、現在のNode.jsプロセス内で直接実行されるか、あるいは独立した子プロセスとして起動されます。

レジストリへの2つの侵入経路

6件のパッケージは、乗っ取られたものと最初から悪意を持って作成されたものにほぼ半々に分かれます。@kolbo/mcp、agentgui、godot-kitの3件は、公開アカウントが侵害された正規パッケージとみられます。

いずれのケースでも元の機能はそのまま維持されており、ローダーは既存ファイルの末尾に追記される形で挿入されていました。Sonatypeは、これが北朝鮮関連のPolinRiderキャンペーンで確認された挙動と一致すると指摘しています。

残る3件、envpack-conf、postcss-initial-provider、tailwindcss-motion-advancedは、最初からマルウェアが仕込まれた状態で公開されており、それぞれがもっともらしい機能でラッピングされていました。1件はパッケージ設定用コードを装い、もう1件は実際に動作するPostCSSプラグインを備え、3件目はローダーを最小化(minify)されたユーティリティファイル内に隠していました。

Sonatypeによれば、乗っ取られたパッケージの方が検知が難しい問題を抱えているといいます。悪意あるコードが、開発者がすでに認識し信頼している可能性のある名前を通じて届くためです。

各チームは自社の環境で該当バージョンが使用されていないか確認し、該当パッケージを削除した上で、後続のJavaScript実行やその他の侵害の兆候がないか調査する必要があります。Sonatypeは、関連するnpmの活動について引き続き調査を進めているとしています。

翻訳元: https://www.infosecurity-magazine.com/news/npm-packages-ethereum-wallet-c2/

ソース: infosecurity-magazine.com