【セキュリティ報告】私のコードに北朝鮮ハッカーが潜んでいる…Axiosサプライチェーン攻撃、今すぐに対応すべきこと

Photo of author

By Global Team

悪意のあるコードが挿入されたJavaScriptパッケージの配布により、開発環境全体にセキュリティ警告が灯されました。

悪意のあるコードが挿入されたJavaScriptパッケージの配布により、開発環境全体にセキュリティ警告が灯されました。
悪意のあるコードが挿入されたJavaScriptパッケージの配布により、開発環境全体にセキュリティ警告が灯されました。

世界中の開発者1億人が毎週ダウンロードしているJavaScriptライブラリが静かに汚染されました。グーグルの脅威インテリジェンスグループ(GTIG)は、先月31日にNPMエコシステムで流通しているaxiosパッケージの2つのバージョンから悪意のあるコードが発見されたと発表しました。インストールすると、バックドアが自動的にインストールされます。開発者自身も気づきにくいです。

問題のバージョンは1.14.1と0.30.4です。各々の週のダウンロード数が1億回と8,300万回に達しています。攻撃者はaxiosの管理者アカウントを乗っ取り、「plain-crypto-js」と呼ばれる悪意のある依存パッケージを密かに組み込みました。NPMがパッケージをインストール直後に自動実行する「postinstall」フックを悪用し、ユーザーの介入なしにバックドアを挿入する構造です。

GTIGは、この攻撃が北朝鮮に関連する金銭目的のハッカーグループUNC1069の仕業であると分析しました。2018年から活動しているこのグループは、今回、既存の悪質コードWAVESHAPERを高度化したWAVESHAPER.V2を投入しました。

Windows、MacOS、Linuxを問わず感染させ、60秒間隔で攻撃者のサーバーに信号を送って遠隔命令を待ちます。

◎感染経路、こうして潜り込む

攻撃の方式は巧妙です。インストールスクリプト自体が難読化されており、コードを見てもどのような動作をしているのかすぐに分かりません。XOR方式とBase64の組み合わせで、核心的な命令とサーバーアドレスを隠しています。実行後には自ら削除を試み、痕跡まで消します。

オペレーティングシステムごとに埋め込まれるペイロードが異なります。Windows環境では、正常なファイルであるPowerShellを別の名前でコピーした後、隠しモードで実行します。

MacOSでは、システムキャッシュパスに実行ファイルをダウンロードしてバックグラウンドで稼働させます。

Linuxでは、Pythonベースのバックドアが一時ディレクトリに位置します。すべてのケースで、インストール完了後、感染の痕跡であるpackage.jsonの変更内容を元に戻して検出を逃れます。

バックドアが挿入されると、攻撃者はかなりの権限を持つことになります。システム情報の収集、ディレクトリの閲覧、任意のスクリプト実行、追加の実行ファイルの注入がすべて可能です。Windows環境では、レジストリに項目を追加して再起動後も生き残ります。

◎今すぐにすべき措置

感染の有無を確認することが最初のステップです。プロジェクトのロックファイル(package-lock.jsonまたはyarn.lock)を開いて「plain-crypto-js」という項目が存在するかどうか検索します。バージョン4.2.0または4.2.1が存在する場合、感染環境と見なさなければなりません。WizやOpen Source Insightsなどの依存性検査ツールを活用すると、下位依存性まで一度に確認できます。

バージョンの制御が次のステップです。axios 1.14.1と0.30.4は即座に使用を停止しなければなりません。安全なバージョンはそれぞれ1.14.0以下、0.30.3以下です。package-lock.jsonに該当バージョンを明示的に固定し、不意のアップグレードを阻止します。企業内部のNPMリポジトリを運用中であるならば、感染バージョンが提供されないよう、即刻設定を変更すべきです。

CI/CDパイプラインの一時中断が三番目の措置です。axiosに依存するパッケージを含むビルド配布をすべて停止します。「最新バージョン(latest)」を自動で引っ張ってくる設定が残っているなら、この機会に必ず削除すべきです。安全バージョンを明示的に固定した後、再配布を行います。

ネットワークの遮断は直ちに実行できる措置です。攻撃者インフラのドメインsfrclak[.]comとIPアドレス142.11.206.73に向かうすべてのトラフィックをファイアウォールでブロックします。すでに感染している端末がある場合、このアドレスに向かって60秒周期通信を試みている可能性があります。

悪意のあるコードが通信するC2サーバーアドレスとドメインを整理したネットワーク侵害指標(IOC)のデータ画面。
悪意のあるコードが通信するC2サーバーアドレスとドメインを整理したネットワーク侵害指標(IOC)のデータ画面。

◎感染が確認された場合

悪意のあるコードを特定するためのファイルインデックスリストです。

plain-crypto-jsが発見された環境は全体侵害と見なすことが原則です。該当の環境を隔離し、知られている正常な状態に復元すべきです。その後は資格証明の交換です。該当の環境で使用されたAPIキー、トークン、アクセスパスワードをすべて変更します。バックドアが埋め込まれた時点から露出していた可能性を前提に対処しなければなりません。

NPM、yarn、pnpmのローカルおよび共有キャッシュも削除する必要があります。キャッシュに感染ファイルが残っていると、以後のインストール過程で再感染する可能性があります。開発者のワークステーションとビルドサーバーの両方が対象です。

エンドポイント検出および対応(EDR)ソリューションがない開発環境なら、今が導入を検討する時点です。Node.jsプロセスで異常な子プロセスが生成されるパターンが、今回の攻撃の主要な行動指標です。GTIGが公開したYARAルールをビルドサーバーと開発者端末に適用すると、事後検出に役立ちます。

中長期的には、開発環境自体をコンテナやサンドボックスで隔離する方式が推奨されます。敏感な資格証明をコードや環境変数に平文で保存する慣行も、今回の攻撃が狙った点です。OSキーチェーンやセキュリティボールトに移管することが根本的な対策です。

今回の事件で明らかになった核心は、オープンソースエコシステムに対する信頼が攻撃ベクトルになったという点です。axiosのように数億人が検証済みと信じているパッケージでさえ、管理者アカウント一つが突破されれば瞬く間に武器に変わります。バージョンを固定し、依存性を定期的に監査する習慣が、今、開発者に求められる最も現実的な防御線です。

Leave a Comment