npm blogの翻訳です。英語わかる方は元記事を読むことをおすすめします。
翻訳ミスや誤字脱字等あれば指摘してもらえるとありがたいです。
The npm Blog — Details about the event-stream incident
event-stream事件の詳細
これは多くの人たちが今週の初めに気づいたevent-stream事件の分析です。npmは、コミュニティの安全に影響を及ぼす運用上の懸念事項や問題に即座に対応しますが、インシデントについて議論する前に、より詳細な分析を行うのが一般的です。(私たちはあなたが待っていたことを知っています。)
11月26日の朝、npmのセキュリティチームは、人気のnpmパッケージであるevent-stream
に入った悪質なパッケージについて知らされました。マルウェアを調査した後、npmセキュリティは、レジストリからflatmap-stream
とevent-stream@3.3.6
を削除し、さらなる悪用を防止するためにevent-stream
パッケージの所有権を取得することで対応しました。
悪質なパッケージはバージョン0.1.1のflatmap-stream
でした。このパッケージは、新しい管理者によりevent-stream
パッケージの直接の依存関係として、バージョン3.3.6に2018年9月9日追加されました。event-stream
パッケージは広く使用されていますが、悪意あるコードは非常に固有の開発環境を設定した企業の開発者をターゲットにしていました。つまり他の環境でペイロードを実行しても効果はありません。この特定のターゲット設定は、悪意のあるモジュールを誤ってインストールしても、最終的にはほとんどの開発者が影響を受けないことを意味します。
注入されたコードはCopayアプリを対象としています。Copayの開発者がリリースビルドスクリプトの1つを実行すると、結果のコードはアプリケーションにバンドルされる前に変更されます。このコードは、100 Bitcoinまたは1000 Bitcoin Cashの残高を持つアカウントからアカウントの詳細と秘密鍵を収集するように設計されています。
Copayの最初の対応は、この悪意のあるコードを含むビルドは公開されていないということでしたが、現在、Copayから「悪質なコードはバージョン5.0.2から5.1.0にデプロイされました。」という確認があります。
攻撃
この攻撃はソーシャルエンジニアリング攻撃から始まりました。攻撃者はメンテナーと見せかけevent-stream
モジュールのメンテナンスを引き継ぎました。
技術的な詳細
興味のある人のために私たちが知っている技術的な詳細です。
注入されたコード:
- テスト用備品に偽装されたファイルからAES暗号化データを読み込む
- 1番目の解読されたチャンクから2番目の解読されたチャンクの終わりまでの小さなコメント付きプレフィックスを連結
- 連結されたコードブロックを無効なJSから有効なJSに変換する小さなデコードタスクを実行(これは動的解析ツールによる検出を回避するために行われたと考えられます)
- JSのこの処理済みブロックを、ビルドスクリプトによってパッケージ化される依存関係に格納されたファイルに書き出す
書き出されたコードは、実際の悪意のあるコードで、Copayのエンドユーザーが所有するデバイス上で実行されることを意図していました。
このコードは次のことを行います
- 現在の環境を検出する(モバイル/Cordova/Electron)
- 被害者の保険金口座のBitcoinとBitcoinの現金残高を確認する
- 現在の残高が100 Bitcoinまたは1000 Bitcoin Cashより多い場合
- 被害者のアカウントデータを完全に収集する
- 被害者のcopay秘密鍵を収集する
- 被害者のアカウントデータ/秘密鍵を111.90.151.134で動作するコレクションサービスに送る
Copayアプリのユーザーは、「5.0.2から5.1.0のいずれかのバージョンを使用している場合は、Copayアプリを実行または開くべきではありません」とbitpayが推奨しています。
npmユーザーは、npm audit
を実行することで、プロジェクトに脆弱な依存関係が含まれていないかどうかを確認できます。このevent-stream
の影響を受けるバージョンをインストールした場合は、できるだけ早く新しいバージョンにアップデートすることをお勧めします。