WhatsApp Web APIライブラリを装った悪意あるnpmパッケージが、数カ月にわたり機能する依存関係として動作しながら、メッセージを盗み、永続性を維持していた。
セキュリティ研究者は、正規のWhatsApp Web APIライブラリを装いながら、開発者環境からメッセージ、認証情報、連絡先データをひそかに盗み出す悪意あるnpmパッケージを発見した。
「lotusbail」と特定されたこのパッケージは、本物のWhatsAppクライアントライブラリをトロイの木馬化したラッパーとして動作し、Koi Securityによって問題が指摘されるまでに5万回以上ダウンロードされていた。
「56,000回を超えるダウンロード数があり、宣伝どおり実際に動作する機能的なコードを備えているため、開発者が何の疑いもなくインストールしてしまう種類の依存関係です」とKoiの研究者はブログの投稿で述べた。「このパッケージは6カ月間npmで公開されており、執筆時点でもまだ公開されたままです。」
盗まれたデータは暗号化され、攻撃者が管理するインフラへ送出(流出)されており、ネットワーク監視ツールによる検知の可能性を低下させていた。企業にとってさらに懸念すべきなのは、LotusbailがWhatsAppのマルチデバイスのペアリングを悪用し、パッケージを削除した後でも侵害されたアカウント上で永続性を維持する点だ。
正規APIをプロキシ化して脅威に
研究者によると、lotusbailは当初、WebSockets経由でWhatsAppとやり取りするために使われる正規の「@whiskeysockets/baileys」ライブラリの有用なフォークにすぎないように見えた。開発者はこれをインストールして、メッセージを送受信しても、何もおかしいことに気づかない可能性があった。
しかし、さらに調査を進めると問題が明らかになった。
このパッケージは、正規のWhatsApp WebSocketクライアントを悪意あるプロキシ層で包み込み、機密データを含むものも含めて、あらゆる操作を透過的に複製していた。認証時には、このラッパーがセッショントークンと鍵を捕捉した。アプリケーションを流れるすべてのメッセージは傍受され、記録され、攻撃者が管理するインフラへ密かに送信するために準備された。
さらに、盗まれた情報は送信中も保護されていた。認証情報やメッセージを平文で送るのではなく、このマルウェアは独自のRSA暗号層と複数の難読化戦略を用い、ネットワーク監視ツールによる検知をより困難にし、流出を目立たない形で進められるようにしていた。
研究者は「流出サーバーのURLは暗号化された設定文字列の中に埋め込まれ、圧縮されたペイロードの内部に隠されています」と指摘した。「マルウェアは4層の難読化を使用しています。Unicode変数の操作、LZString圧縮、Base-91エンコード、そしてAES暗号化です。サーバーの場所は、目に見える形でどこにもハードコードされていません。」
パッケージ削除後もバックドアが残り続ける
Koiは、この攻撃で最も重要な要素は永続性だと述べた。WhatsAppでは、8文字のコードを用いるペアリング手順により、1つのアカウントに複数のデバイスをリンクできる。悪意あるlotusbailパッケージは、ハードコードされたペアリングコードを埋め込むことでこの仕組みを乗っ取り、攻撃者のデバイスをユーザーのWhatsAppアカウント上の信頼済みエンドポイントとして事実上追加していた。
たとえ開発者や組織が後からパッケージをアンインストールしても、攻撃者のリンク済みデバイスは接続されたままだった。これにより、WhatsAppユーザーが設定パネルからすべてのデバイスのリンクを手動で解除するまで、攻撃は継続した。
永続的なアクセスにより、攻撃者は初期の露出から長期間が経過した後でも、メッセージの読み取り、連絡先の収集、被害者になりすましてのメッセージ送信、メディアのダウンロードを続けられる。
開発者と防御側は何をすべきか?
Koiの開示では、悪意あるロジックが正規の挙動を模倣する場合、評判指標、メタデータチェック、静的スキャンに基づく従来の防御策は機能しないと指摘している。
研究者は「マルウェアは『このコードは動く』と『このコードは主張どおりのことしか行わない』の間の隙間に潜んでいます」と述べ、こうしたサプライチェーンの脅威には、静的チェックだけに頼るのではなく、実行時にパッケージの挙動を監視することが必要だと付け加えた。彼らは、悪意あるコード内の独自RSA暗号化ルーチンや、数十個に及ぶ埋め込みのアンチデバッグ機構など、警告サインを探す(またはそれが可能なツールに依存する)ことを推奨した。
このパッケージはnpmで引き続き公開されており、直近の更新はわずか5日前に公開された。2020年からnpmを所有しているGitHubは、CSOのコメント要請に直ちには回答しなかった。