6 ポイント 投稿者 GN⁺ 2026-01-29 | 1件のコメント | WhatsAppで共有
  • WhatsApp は、30億人以上のユーザーを抱えるサービスとして、Rustベースのセキュリティ層を導入し、マルウェア脅威への防御力を強化した
  • メディア整合性ライブラリを Rustで再実装 し、数十億台のデバイスとブラウザに展開して、グローバル規模での実運用検証を完了した
  • 既存の C++ コード16万行を Rust 9万行 に置き換え、性能とメモリ効率の両方が改善された
  • 2015年の Stagefright脆弱性 以降、メディアファイル処理の安全性を高めるため、Rustのような メモリ安全言語 の導入を進めてきた
  • この変化は、WhatsApp・Messenger・Instagram全体のセキュリティ戦略において、メモリ安全言語の比重を拡大する転換点となる

WhatsAppのメディア処理戦略

  • WhatsAppは、30億人以上が利用する エンドツーエンド暗号化メッセージングサービス であり、継続的なセキュリティ脅威への対応のために戦略を進化させてきた
    • ユーザーが画像・動画などのメディアを共有する際、マルウェアが含まれている可能性がある
    • 一部のファイルは、OSやアプリの 未修正の脆弱性 を悪用できる可能性がある
  • これを防ぐため、メディア共有機能に Rust言語 を導入し、メモリ安全性を確保した
    • これは世界的に見ても最大規模の Rustベースのライブラリ展開事例 とされる

2015年のAndroid Stagefright脆弱性と対応

  • 2015年の Android の Stagefright脆弱性 は、OSレベルのメディア処理ライブラリに存在しており、アプリ側では修正できなかった
  • WhatsAppは自社の C++ ライブラリ 「wamedia」 を修正し、MP4標準に従わないファイルを検出 できるよう改善した
    • これにより、OSアップデートがなくてもユーザーを保護できた
  • しかし、wamedia が 信頼できない入力を自動処理 するという性質から、メモリ安全言語への移行の必要性が提起された

Rustへの移行: 大規模な再実装と成果

  • WhatsAppは、既存の C++ 版と並行して Rust版の wamedia を開発した
    • 差分ファジング(differential fuzzing)、統合テスト、単体テストによって、両実装間の互換性を検証した
  • 当初は Rust 標準ライブラリによる バイナリサイズの増加ビルドシステムとの互換性 の問題があったが、長期的な支援体制を構築した
  • 結果として C++ 16万行 → Rust 9万行 に置き換えられ、性能とメモリ使用効率の両方が改善された
  • Android、iOS、Mac、Web、ウェアラブルなど すべてのプラットフォームで Rust版の完全展開 を完了した
  • その後 「Kaleidoscope」システム を導入し、PDF、実行ファイルなどの危険なファイル種別を検出し、拡張子の偽装や MIME スプーフィングを識別している

WhatsAppのセキュリティアプローチ

  • WhatsAppは エンドツーエンド暗号化暗号化バックアップ鍵の透明性通話保護機能 など、多様なセキュリティ層を運用している
  • CVE公開社内外のセキュリティ監査ファジングと静的解析サプライチェーン管理攻撃面分析 を通じてリスクを特定している
  • Bug Bountyプログラム を拡張し、研究者が WhatsApp のネットワークプロトコルを分析できる Research Proxy を提供している
  • 主要な脆弱性の多くが C/C++ のメモリ安全性の問題 に起因することを確認し、3つの戦略を並行して進めている
    1. 不要な攻撃面の最小化
    2. 残存する C/C++ コードのセキュリティ保証を強化
    3. 新規コードの基本言語を メモリ安全言語 に切り替え

Rust導入の加速と今後の方向性

  • Rustは、WhatsAppの 高性能・クロスプラットフォームなセキュリティライブラリ 開発を可能にした
  • この変化は、ユーザーには見えない追加のセキュリティ層 を提供するものであり、多層防御(defense-in-depth) 戦略の一環である
  • WhatsAppとMetaのセキュリティチームは、Rustの高効果な適用領域 を拡大しており、今後 Rust採用を加速 する計画だ

1件のコメント

 
GN⁺ 2026-01-29
Hacker Newsのコメント
  • WhatsAppは1日あたり30億人が使うメッセンジャー
    米国ではあまり使われていないが、世界的には基本的なコミュニケーションインフラとして定着している
    グローバル市場向けに製品を作りたいなら、こうしたユーザーの考え方や習慣を理解する必要がある

    • ヨーロッパ人として、私はいまだにWhatsAppのインストールを拒否している
      こういう独立した人間はまだ数十人はいる
      どうかWhatsAppをさらに避けられないものにすることには加担しないでほしい
    • 私の住むマラウイでは、WhatsAppは電子メールよりはるかに広く使われている
      ほとんどの人はメールをほぼ確認しない
      開発者コミュニティを運営しているが、グループ人数制限(1024人)にしょっちゅう引っかかる
      DiscordやSlackへ移そうとしても、結局またWhatsAppに戻ってしまう
      通信キャリアのデータバンドルのおかげで、WhatsAppが事実上無料だからだ
    • WhatsAppが定着している市場では、すでに広告やスパムが増えて品質が落ちている
      企業メッセージのスパムに関する記事がTechCrunchに何度も載っているが、実際にはほとんど何も変わっていない
      コミュニティ機能のUXも今ひとつだ
      結局、Facebookエコシステムへの依存が深まるのが問題だと思う
    • 正直、30億人という数字は誇張されている気がする
      私は10年間WhatsAppを使っておらず、友人や家族の大半もSignalへ移った
      ヨーロッパでは今でもViberが使われている地域もある
    • 北米や欧州のユーザーで実際に収益を生むのは2億人ほどではないかと思う
  • Rustで書かれたライブラリの中で最大規模のデプロイだと言っていたが、実際にはFontationsのほうが大きいかもしれない
    Chromiumに含まれており、その依存関係まで見ると、インストールベースはより広い可能性がある
    引用文を見る限り、WhatsAppはlibsignalを直接使っていないようだ

    • ちなみにWamediaはMetaの主要アプリ群に含まれており、iOS、Android、Desktop、Web全体にデプロイされている
    • Chromiumにはすでに複数のRustライブラリが含まれている
      例: image-png, CrabbyAvif, qr_code, icu4x
  • コードが16万行から9万行に減ったのも良いが、並行ロールアウト戦略のほうがさらに興味深い
    Rust版とC++版を同時に動かし、differential fuzzingで等価性を検証した点が現実的だ
    モバイルクライアントではバイナリサイズが重要だが、ビルドツール群に投資した点も印象的だ

    • no_stdを使ったのか、あるいは標準ライブラリを再構成したのか気になる
      nightlyビルドでしかできない最適化かもしれない
  • この手のリライトで最も難しい部分は、Rust実装そのものよりも既存パーサーのバグ互換性を維持すること
    実際のメディアファイルはフォーマットが壊れていることも多く、厳密に解析しすぎるとユーザーデータが壊れる
    differential fuzzingは事実上唯一の実用的アプローチだ

    • Wamediaは意図的にバグ互換性維持を目標にしていない設計に見える
    • これはひょっとするとAIが書いたコメントのようにも思える
  • WhatsAppがRustで最大のデプロイをしたというのは、Windows 11より多くの端末で動いているからだろう
    ただしWhatsAppがlibsignalを直接使っているのかは疑問だ

    • WhatsAppはlibsignalを使っていない
      Android自体がすでにRustベースのコードを多く含んでおり、組み込み機器でも広く使われている
    • Microsoft is Getting Rusty の動画を見ると、Rust導入は主にAzure側で進んでおり、
      Windowsは依然としてC/C++中心だ
  • Rust標準ライブラリの導入でバイナリサイズの増加があったと言うが、どう解決したのかは明記されていない

    • おそらく可能な箇所ではno_stdを使ったのだろう
      関連コミット: commit1, commit2
    • 約300KBほどのオーバーヘッドは受け入れた可能性が高い
      問題はサイズそのものより重複したRust依存関係
      C++とRustが混在するビルドでは、それぞれがlibstdを含むため、Bazelのような統合ビルドシステムが必要になる
    • 実際にはビルドシステム最適化に多く投資している
      当初は約200KiBのオーバーヘッドを受け入れていたが、Buck2への移行でサイズとビルド時間の両方を削減した
      最新のclang最適化とLTO改善のおかげだ
    • 参考としてmin-sized-rustのようなアプローチもある
    • 全体として、技術的詳細よりもPR色が強い記事に感じられた
  • Signalも似た試みをしているのか気になる
    libsignalはRustで実装されているが、それ以外の部分はよく分からない

  • 「30億人にデフォルトでエンドツーエンド暗号化を提供する」という文言があったが、実際にはメッセージを読めるというニュースもあった

    • 鍵になるのは「デフォルト(default)」という言葉なのだろう
      Skypeもデフォルトでは暗号化されていたが、サーバー設定次第で無効化できた
    • あらゆる暗号化は結局、誰がエンドポイントなのかによって変わる
      Metaがデータを覗き見しないと信頼できるかが問題だ
  • Metaはフィッシングやプリペイドカード詐欺は止めないのに、別のことには熱心なのが皮肉だ

  • Rust導入でバグが大幅に減った点が印象的だ

    • Rustの堅牢性は単にメモリエラー防止だけによるものではない
      C++には無数の未定義動作(UB) が存在するが、Rustはそれを構造的に防ぐ
      強力な型システムのおかげで信頼性が大きく向上する