概要
npmレジストリにおいて、正規のソフトウェアプロジェクトを模倣した10個の悪意あるパッケージが発見されました。これらのパッケージは、Windows、Linux、macOSシステムから機密データを収集する情報窃取コンポーネントをダウンロードします。
サイバーセキュリティ企業Socketの研究者によると、これらのパッケージは7月4日にnpmにアップロードされ、多層的な難読化により長期間検出されずにいました。合計で約10,000回ダウンロードされ、システムキーリング、ブラウザ、認証サービスから認証情報を窃取していました。
標的となった悪意あるパッケージ
以下のパッケージが、Socketによって悪意あるものとして報告されています。これらは、正規のパッケージ名(TypeScript、discord.js、ethers.js、nodemon、react-router-dom、zustand)のスペルミスやバリエーションを利用したタイポスクワッティングの手法を用いてユーザーを誘い込んでいました。
- typescriptjs
- deezcord.js
- dizcordjs
- dezcord.js
- etherdjs
- ethesjs
- ethetsjs
- nodemonjs
- react-router-dom.js
- zustand.js
攻撃の手口
パッケージのインストール時に、postinstallスクリプトが自動的にトリガーされ、ホストのOSに合わせた新しいターミナルを起動します。このスクリプトは、検出を回避するためにapp.jsを可視化されない形で実行し、すぐにウィンドウをクリアします。
app.jsファイルはマルウェアローダーであり、以下の4つの難読化レイヤーを使用しています。
- 自己デコード型evalラッパー
- 動的に生成されたキーによるXOR復号
- URLエンコードされたペイロード
- 複雑な制御フロー難読化
スクリプトは、インストールプロセスに正当性があるかのように見せかけるため、ASCIIアートで偽のCAPTCHAをターミナルに表示します。その後、被害者の地理位置情報とシステムフィンガープリントを攻撃者のC2(コマンド&コントロール)サーバーに送信し、外部ソースから24MBのPyInstallerでパッケージ化された実行ファイルをダウンロードして自動的に起動します。
窃取される情報
情報窃取マルウェアは、以下の機密情報を標的とします。
- システムキーリング: Windows Credential Manager、macOS Keychain、Linux SecretService、libsecret、KWallet
- ブラウザデータ: ChromiumベースおよびFirefoxブラウザのプロファイル、保存されたパスワード、セッションクッキー
- 認証情報: 一般的なディレクトリ内のSSHキー、OAuth、JWT、その他のAPIトークン
窃取された情報は圧縮アーカイブにまとめられ、一時的に/var/tmpまたは/usr/tmpにステージングされた後、攻撃者のサーバー(195[.]133[.]79[.]43)に送られます。
開発者への推奨事項
上記リストのいずれかのパッケージをダウンロードした開発者は、直ちに感染をクリーンアップし、すべてのアクセスキーとパスワードをローテーションすることが強く推奨されます。これらの情報が侵害されている可能性が高いです。
npmやその他のオープンソースインデックスからパッケージを調達する際は、タイポがないか二重に確認し、信頼できる発行元と公式リポジトリからのものであることを確認することが重要です。
