1 ポイント 投稿者 GN⁺ 2025-12-24 | 1件のコメント | WhatsAppで共有
  • Lotusbail パッケージは、正規のWhatsApp Web APIライブラリである Baileys をフォークしたもので、6か月間にnpmで5万6千回以上ダウンロードされた マルウェア混入パッケージ
  • 正常に動作するAPI機能を提供しつつ、WhatsAppの認証情報、メッセージ、連絡先、メディアファイル を窃取して攻撃者サーバーへ送信する
  • データは RSA、AES、Base-91、LZString など複数の暗号化と難読化の工程を経て送信され、セキュリティ監視の回避 が可能
  • パッケージは ハードコードされたペアリングコード を通じて、攻撃者のデバイスをユーザーのWhatsAppアカウントに恒久的に接続する バックドア を設置する
  • この事例は サプライチェーン攻撃の高度化 を示しており、静的解析だけでは検知できない 挙動ベースのセキュリティ監視の必要性 を強調している

Lotusbailパッケージ概要

  • lotusbail は正規の @whiskeysockets/baileys のフォークで、WhatsApp Web API の機能をそのまま提供する
    • メッセージの送受信が正常に動作するため、開発者が疑わずにインストールする可能性が高い
    • npmに6か月間登録されており、執筆時点でも引き続きダウンロード可能な状態にある
  • 実際の機能の裏では、WhatsApp認証情報の窃取、メッセージの傍受、連絡先の収集、バックドアの設置 などの悪意ある動作が隠されている

窃取される情報

  • 認証トークンとセッションキー全メッセージ履歴電話番号を含む連絡先一覧メディアファイルと文書持続的なバックドアアクセス権限 が含まれる
  • すべてのデータは攻撃者サーバーへ送信される前に 暗号化処理 される

動作方式

実際に動く偽装機能

  • 多くの悪意あるnpmパッケージは誤動作したり不審なコードによって容易に識別できるが、Lotusbailは 正常に動作するAPI を装っている
  • 正規のBaileysライブラリをベースとしており、メッセージ送受信機能が完全に実装 されている
  • これにより、開発者が「正常に動くコード」であれば悪意ある挙動を疑わなくなる ソーシャルエンジニアリング的手法 が使われている

データ窃取と送信

  • パッケージは WhatsAppと通信するWebSocketクライアント をラップする形で動作する
    • 認証時に認証情報をキャプチャし、メッセージ受信・送信時に内容をすべて複製する
    • 正常機能はそのまま維持され、ただすべてのデータが 攻撃者に二重送信 される
  • 窃取されたデータは カスタムRSA実装 によって暗号化されて送信される
    • WhatsApp自体のエンドツーエンド暗号化とは別に存在し、ネットワーク監視回避用の暗号化 として使われる
  • サーバーアドレスはコード内に直接露出せず、暗号化された設定文字列 の中に隠されている
    • Unicode変数操作、LZString圧縮、Base-91エンコード、AES暗号化 など4段階の難読化を適用

バックドアの設置

  • WhatsAppの デバイスペアリングコード 機能を悪用して、攻撃者のデバイスをユーザーのアカウントに接続する
    • パッケージ内には AESで暗号化されたハードコード済みペアリングコード が含まれている
    • ユーザーが認証すると、攻撃者のデバイスも同時に接続され、持続的なアカウントアクセス権限 を獲得する
  • 攻撃者はメッセージ閲覧、送信、メディアのダウンロード、連絡先へのアクセスなど アカウント全体を制御 できる
  • npmパッケージを削除しても攻撃者のデバイスは依然として接続されたままで、遮断するには WhatsAppの設定ですべてのデバイス接続を手動で解除 する必要がある

解析回避手法

  • コードには 27個の無限ループトラップ が含まれており、デバッグツールを検知すると実行が停止する
    • デバッガー、プロセス引数、サンドボックス環境などを検知して 動的解析を妨害 する
    • 悪意あるコード部分にはコメントが付けられており、体系的な開発管理の痕跡 が存在する

結論とセキュリティ上の示唆

  • サプライチェーン攻撃の高度化 が進んでおり、正常に動作するコードの形に偽装した事例が増加している
  • 静的解析と評判ベースの検証 だけでは検知が難しく、実行中の挙動分析(behavioral analysis) が必要となる
  • Lotusbailの事例は、「コードが動作するという理由で安全だと信じる」セキュリティ上の隙を悪用したもので、ランタイム挙動監視システム構築の重要性 を示している
  • Koi Security研究チームは、このようなランタイムベースの検知技術を通じて、既存の検証手順を回避する脅威を特定した

1件のコメント

 
GN⁺ 2025-12-24
Hacker Newsの意見
  • マルウェア事件が起きるたびに、セキュリティチームがデータを過度にロックする方向へ進むのがもどかしい
    WhatsAppメッセージの流出がきっかけだったとしても、結局は別のものが盗まれていたはず
    アプリを特定の署名しか読めないようにすると、正当なバックアップやデータアクセスまで不可能になる
    セキュリティ強化は良いが、何もかもをロックするような過剰防御は別の問題だと思う

    • 同意する。ちなみにこのパッケージは公式WhatsApp APIのラッパーではなく、リバースエンジニアリングされたWhatsApp Webクライアント
      ユーザーはWhatsAppアカウントに別のクライアントを接続するのと同じようにアクセスし、その結果、全データへのアクセスが可能になる
      WhatsAppがまともな公式APIを提供していれば、こうした事態は減っていたはず
      関連ドキュメント: Baileys Wiki
    • OSがアプリ間のデータアクセスを仲介し、ユーザーに明示的な権限要求を行うべきだと思う
    • WhatsAppがこうした制限を設ける理由は、セキュリティではなく競争制限だと見ている
    • アプリをロックするのは、結局企業がより多くの統制権と収益を得るための手段だ
      昔はマルウェアも多かったが、そのぶん自由と相互運用性も大きかった
    • この状況をうまく風刺した xkcd漫画 がある
  • こうした攻撃はもはや予見可能な結果だと思う
    NPMのようなパッケージマネージャは、ビルド直前に依存関係を取得する構造なので本質的に脆弱
    バージョン管理システムを迂回しつつ、膨大な依存関係を検証なしで受け入れる文化が問題だ

    • だんだん実感してきたが、開発者である自分たちは本当にセキュリティに弱い
      NPMだけでなく、Cargo、Docker、CI/CDなど、どのエコシステムも似た問題を抱えている
      「名前でインストールして終わり」という仕組みなので、信頼ベースが大きすぎる
      解決策もなかなか見つからない — 協業を諦めるわけにもいかないし、かといって完全なセキュリティも不可能だ
      結局、怪物はすでに家の中にいる
    • 同意するが、これはパッケージマネージャだけの問題ではない
      git URLを直接指定しても結果は同じだろう
      結局は依存関係管理そのものの構造的問題
    • プラットフォームごとにパッケージマネージャが多すぎる
      言語に依存しない標準化されたパッケージマネージャが必要だと感じる
      署名検証、出所保証、API標準化といった機能が必須だ
    • aptやrpmのようなシステムパッケージマネージャも完璧ではない
      xz事件のように、感染したパッケージがそのまま配布されることもある
      しかもシステムパッケージマネージャは最新版対応が遅く、開発には不向きだ
      結局、npm、cargo、pipのようなツールが必要になる理由でもある
    • これは依存関係が感染したのではなく、最初から悪意あるパッケージだった
      パッケージマネージャの問題ではなく、そもそも信用できないコードだった
  • マルウェア作者が関数名をexfiltrateCredentialsのように露骨に付けていたのは笑える
    デバッガ検知まで入れておきながら、肝心のコード難読化はしていなかったのが皮肉だ

    • 実際にはコードは難読化されており、作者がデモ用に復元したバージョンを公開したものだ
    • 27個のデバッグトラップをテストするには、かなりのテストカバレッジが必要だったはず
      マルウェアのテストですら、今や開発の一形態になった時代だ
  • 開発者が何も考えずにインストールする依存関係」という言葉が不気味だ

    • ほとんどの開発者はnpm installをそのまま実行する
      セキュリティポリシーが厳格な組織でなければ、現実的に防ぐのは難しい
      結局のところ、解決策はnpmをあまり使わないことだけかもしれない
    • Dockerイメージも同じだ
      タグ指定にするといつでもサプライチェーン攻撃にさらされうる
      業界は思っている以上に多くの盲目的な信頼の上で回っている
      自動デプロイシステムには「二度考える」余裕すらない
    • 恐ろしいが、ほとんどの開発者にとって現実そのもの
    • 少し誇張も入っていると思う
  • JavaScriptにもApache Commonsのような信頼できる大規模ライブラリがあればいいのにと思う
    Apache Commonsの紹介

    • とはいえ、どれほど大きなライブラリでもWhatsApp APIは含まれないだろう
  • lotusbailパッケージは、WhatsApp Web APIを装った悪意あるnpmパッケージだ
    6か月間配布され、認証情報の窃取・メッセージ傍受・バックドア設置など多様な攻撃を行った

  • JSエコシステムに依存する開発者には、現実的にリスク緩和戦略が必要だ
    DockerやVMを活用する方法が言及されている

    • 前の職場でDevOpsとセキュリティを担当していた
      すべての開発環境をコンテナ化し、依存関係は固定バージョンでロックした
      グローバルインストール禁止、自動更新禁止、手動検証必須
      機密性の高いプロジェクトには専用ワークステーションを用意し、定期的に初期化していた
      面倒だが、それが現実的なセキュリティだ
      あるいはJSエコシステムを離れるのも一つの方法だ
    • ただし今回のケースは、ユーザーが意図的にインストールしたパッケージなので、こうした対策では防ぎにくい
      OSやDockerのレベルでネットワーク接続の許可可否を確認できるべきだ
    • 私はIncus OSを使って、プロジェクトごとに新しいコンテナを立ち上げて開発している
      カーネルは共有するが、JSエコシステムの攻撃を防ぐには十分だ
      npmでコンテナ脱出攻撃が出てきたら、その時点でVMへ移るつもりだ
      最初は過剰防衛だと思っていたが、今では速度も速く安定している
    • こうしたパッケージを配布すると、リスクは開発者だけでなくすべてのユーザーに波及する
    • 一部の企業では、npmパッケージは数か月以上経過したものだけ許可している
      その間に悪性かどうかが判明するからだ
  • このパッケージは最初からセキュリティ上の失敗だった
    公式APIではないクライアント認証の再実装を使い、ユーザー秘密鍵を第三者が扱っていた
    ユーザーも注意すべきだったが、完全に責めるのは難しい

    • 実際、WhatsAppには公開APIがない
      「WhatsApp Business Platform」に登録してはじめてAPIアクセスが可能になる
      本当のAPIがあれば、こうしたことは起きなかったはずだ
    • 公式APIの機能が不足しているなら、再実装それ自体は問題ではない
      ただし認証時に秘密鍵を第三者へ渡すのは危険だ
      普通は自分のアカウントを自動化したくて、こうしたパッケージをインストールする
  • 最近はLLMが生成したブログ記事であふれている
    品質は低いがコストが0なので、マーケター目線では効率的だ
    従来の文章執筆は今やレガシーになってしまった

    • でもこのコメント自体もLLMが書いたように感じられて笑える
  • サプライチェーン攻撃が増えているように思う。開発者はどう対処すべきだろうか?

    • 緩和するには、適当なパッケージの利用をやめて、根本的にはnpmのようなエコシステムを離れるしかない
    • サーバーURLが難読化・暗号化されているパッケージは警告サインだ
      自動スキャンでこうしたパターンを検出し、検証手順を強化すべきだ
    • 1999年のように依存関係を自分でレビューしてvendor化すべきだ
    • 今は依存関係が多すぎて、誰もコードを見ていない
      コンテナ化、依存関係ロック、セキュリティスキャン、更新の遅延適用が必須だ
      npmのグローバルインストールは最悪の選択だ
    • どうしても実行しなければならないなら、可能な限り隔離された環境で動かすべきだ
      rootless podmanのようなコンテナやVMを活用してリスクを最小化すべきだ