lotusbail npmパッケージは、WhatsApp Web APIライブラリ――正規の@whiskeysockets/baileysパッケージのフォーク――を装っています。56,000回以上のダウンロードがあり、宣伝どおり実際に動作する機能的なコードを備えているため、開発者が深く考えずにインストールしてしまう類いの依存関係です。このパッケージはnpm上で6か月間公開されており、執筆時点でもまだ公開されたままです。
その動作する機能の裏には、WhatsAppの認証情報を盗み、あらゆるメッセージを傍受し、連絡先を収集し、永続的なバックドアをインストールし、脅威アクターのサーバーへ送信する前にすべてを暗号化する――高度なマルウェアが潜んでいます。

取得されるもの:
- 認証トークンとセッションキー
- 完全なメッセージ履歴(過去および現在)
- 電話番号を含む完全な連絡先リスト
- メディアファイルとドキュメント
- WhatsAppアカウントへの永続的なバックドアアクセス
仕組み
見せかけは本物
多くの悪意あるnpmパッケージはすぐに正体を現します――タイポスクワットだったり、動かなかったり、明らかに怪しかったりします。これは実際にWhatsApp APIとして機能します。正規のBaileysライブラリをベースにしており、WhatsAppメッセージの送受信に関する実際に動作する機能を提供します。
露骨なマルウェアは見つけやすい。機能するマルウェアは? それはインストールされ、テストされ、承認され、本番環境にデプロイされます。
ここでのソーシャルエンジニアリングは見事です。開発者は動くコードの中にマルウェアを探しません。壊れるコードを探すのです。
窃取と持ち出し
このパッケージは、WhatsAppと通信する正規のWebSocketクライアントをラップします。アプリケーションを流れるすべてのメッセージは、まずマルウェアのソケットラッパーを通過します。
認証時にはラッパーが認証情報を取得します。メッセージが届けば傍受します。メッセージを送れば記録します。正規の機能は通常どおり動作し続け――マルウェアは単に、すべてに対して「第二の受信者」を追加するだけです。

WhatsAppの認証トークン、送受信されたすべてのメッセージ、完全な連絡先リスト、メディアファイル――APIを通過するものはすべて複製され、持ち出しの準備がされます。
しかし盗まれたデータは平文で送られません。マルウェアには、送信前にデータを暗号化するための完全なカスタムRSA実装が含まれています:

なぜカスタムRSAを実装するのか? 正規のWhatsAppライブラリにはカスタム暗号化は不要です――WhatsAppはすでにエンドツーエンド暗号化を扱っています。カスタム暗号が存在する理由はひとつ: ネットワーク監視に検知されないよう、持ち出し前に盗んだデータを暗号化するためです。
持ち出し先サーバーのURLは暗号化された設定文字列の中に埋め込まれ、圧縮されたペイロードの内部に隠されています。マルウェアは4層の難読化を使用します: Unicode変数操作、LZString圧縮、Base-91エンコード、そしてAES暗号化。サーバーの場所は、目に見える形でどこにもハードコードされていません。
バックドア
ここからが特に厄介です。WhatsAppはペアリングコードを使って新しいデバイスをアカウントにリンクします。コードを要求すると、WhatsAppがランダムな8文字の文字列を生成し、それを新しいデバイスに入力するとデバイス同士がリンクされます。
マルウェアは、このプロセスをハードコードされたペアリングコードで乗っ取ります。そのコードはAESで暗号化され、パッケージ内に隠されています:

つまり、脅威アクターはあなたのWhatsAppアカウントへの鍵を持っているということです。このライブラリを使って認証すると、アプリケーションをリンクするだけでなく、脅威アクターのデバイスも同時にリンクしてしまいます。彼らはあなたのWhatsAppアカウントに完全かつ永続的にアクセスでき、あなたはそこにいることすら気づきません。
脅威アクターは、あなたのメッセージをすべて読み、あなたになりすましてメッセージを送り、メディアをダウンロードし、連絡先にアクセスできます――アカウントを完全に制御できます。そして重要なのは、npmパッケージをアンインストールすれば悪意あるコードは削除されますが、脅威アクターのデバイスはWhatsAppアカウントにリンクされたままだという点です。ペアリングは、WhatsAppの設定からすべてのデバイスのリンクを手動で解除するまで、WhatsAppのシステム上で維持されます。パッケージが消えた後も、彼らはアクセスし続けられます。
彼らは本当に見られたくなかった
このパッケージには、デバッグツールが検出されると実行をフリーズさせる27個の無限ループトラップが含まれています:

これらのトラップはデバッガをチェックし、プロセス引数を検査し、サンドボックス環境を検出し、動的解析を総じて苦痛なものにします。さらに、悪意ある箇所を示す親切なコメントまでコード内に残していました――サプライチェーン攻撃にプロフェッショナルな開発プラクティスを適用しているのです。おそらくこれ用のJiraボードがあるのでしょう。
最後に
サプライチェーン攻撃は減速していません――むしろ巧妙化しています。マーケットプレイスのレビューをすり抜ける、洗練されたアンチデバッグ、カスタム暗号化、多層難読化を備えた「動くコード」を私たちは目にしています。lotusbailのケースは例外ではありません。これは予告編です。
従来のセキュリティではこれを捕捉できません。静的解析は動作するWhatsAppコードを見て承認します。評判システムは56,000ダウンロードを見て信頼します。マルウェアは「このコードは動く」と「このコードは主張どおりのことしかしていない」の間のギャップに潜みます。
高度なサプライチェーン攻撃を捕捉するには行動分析が必要です――パッケージが実行時に実際に何をするかを監視することです。WhatsAppライブラリがカスタムRSA暗号化を実装し、27個のアンチデバッグトラップを含むなら、それはシグナルです。しかし、それを監視する仕組みが必要です。
この解説記事はKoi Securityのリサーチチームによって執筆されました。私たちは、従来のチェックを通過してしまう一方で、実行時に悪意ある挙動を示す脅威を検出するためにKoiを構築しました。
デモを予約することで、行動分析が静的レビューの見落としをどのように捉えるかをご覧ください。
どうか安全に。
翻訳元: https://www.koi.ai/blog/npm-package-with-56k-downloads-malware-stealing-whatsapp-messages