
Node.jsは、JavaScriptをブラウザの外、つまりサーバサイドで実行するための環境(ランタイム)です。
これにより、ウェブ開発者はフロントエンドとバックエンドの両方でJavaScriptを使用できるようになり、開発効率が向上します。
この人気のNode.js向けのパッケージ管理ツールがnpmです。
npmは(Node Package Manager)です。
いろいろなコンピュータ言語向けのパッケージ管理システムを経由してマルウェアが展開されていますが、今日の話はnpmの事例です。
npmでは、いろいろなパッケージが公開されています。
基本的な機能を提供するもの、高度なアプリケーション要素を提供するもの、さまざまです。
多くの高度な機能を提供するものでは、その内容を実現するために、さらに別のパッケージに依存していることは一般的です。
そんなふうに、多くの環境で利用されているものの一つに「is」があります。
「is」は、さまざまな型チェックおよび値検証機能を提供する軽量のJavaScriptユーティリティライブラリです。
これはパッケージで利用されることが多い機能ですし、通常の開発者が必要とする場合も多いので、多くの開発環境で利用されています。
これの侵害版が多くダウンロードされてしまいました。
なにがあったのでしょう。
- 脅威アクターが偽のnpmサイトを公開した
脅威アクターは、「npnjs[.]com」を構築して公開しました。
npmの本家のサイトは「npmjs.com」です。
開発者のtypoを狙ったサイトですね。 - 開発者がログインした
typoしていることに気がつかないで偽サイトにたどりついた人の中に、「is」のメンテナーがいました。
そして、そのメンテナーは偽サイトにログインを試みました。
ログインしようということなので、本家のサイトで利用できる認証情報を入力します。
ここでメンテナーの資格情報は脅威アクターに把握されました。 - 改造版を公開した
メンテナーの認証情報を入手した脅威アクターは本家のサイトにログインしました。
ログインすると、そのメンテナーの変更できるものの中に「is」がありました。
これは人気のパッケージでした。
継続的にダウンロードする人がいることが期待できるパッケージです。
脅威アクターはマルウェアローダーを仕込んだ更新版を作成し、公開しました。 - 多数の新しいバージョンの「is」がダウンロードされた
これらの悪意のあるアップデートは、通常の依存関係解決ワークフローを通じて、開発者やCIシステムに自動的に配布されました。
入手されてしまった正規のものではないバージョンのソフトウェアの数は、いったいいくつになるのでしょうか。
「is」は通常1週間に280万回くらいもダウンロードされるパッケージです。
被害は、とても大きなものになります。
入手されてしまった偽の新バージョンは、バックドア付きマルウェアローダーを含んでいます。
マルウェアはosモジュールやprocess.envモジュールを使って、感染環境の情報を収集します。
WebSocketの接続機能も有し、収集した情報を持ち出したり、さらなる悪事のために利用するJavaScriptを持ち込んだりします。
そして、リモートシェル機能で持ち込んだscriptを実行します。
現時点では「is」がこのような状態になってしまっていたことが確認されていますので、さらに更新を実行すると、安全なバージョンが利用できる状態になっています。
このように悪意ある新バージョンを公開されてしまったパッケージは、「is」だけではありませんでした。
わかっているものは、いくつかあります。
しかし、まだ確認できていないものもあるかもしれません。
通常は新しいバージョンが公開された場合、速やかに更新することは正しい運用です。
これが正しい運用とみなせることには前提条件があります。
関連するシステムで正規の運用がなされていることが前提の一つです。
このような事例があると、自動更新の仕組みを運用することが怖くなるかもしれません。
問題ないことがわかっているバージョンで固定する状態にし、自動更新されない状態にして運用したくなる人もいるでしょう。
しかし、これは諸刃の剣です。
適切な運用が多くの現場で実施されていることを期待し、適切なパッチケイデンスを維持することが、やはり重要に思えます。
npm ‘is’ Package Hijacked in Expanding Supply Chain Attack
https://socket.dev/blog/npm-is-package-hijacked-in-expanding-supply-chain-attack
この記事をシェア |
---|