サイバーセキュリティ

Google、Pixel 10のモデムにRustを統合し、セルラー接続基盤のセキュリティを強化

Googleは、Pixel 10シリーズが、セルラーモデムのソフトウェア内部にメモリ安全な言語Rustを統合する初のPixel端末になると発表した。DNSパーサーをRustで記述されたコンポーネントに置き換えることで実現する。同社によれば、この取り組みはメモリ安全性の脆弱性に伴うリスクの一つのカテゴリー全体を減らす一方、コンポーネントによってソフトウェアイメージのサイズは約371キロバイト増加する。

2026-04-10
1 分で読めます
510 閲覧数
certi.news Editorial Team
Google、Pixel 10のモデムにRustを統合し、セルラー接続基盤のセキュリティを強化

Google Security Blogの投稿によると、Pixel 10シリーズは、セルラーモデムのソフトウェア内部にメモリ安全なRustで記述されたコンポーネントを統合する初のPixel端末となる。この取り組みでは、Rustで構築されたドメインネームシステム(DNS)パーサーをモデムのファームウェアに導入し、信頼できないデータを扱う部分におけるメモリ安全性に関連する脆弱性のリスクを減らすことを目指している。

この取り組みは、セルラー通信モデムの悪用に対する防御を強化するGoogleの取り組みの一環だ。同社はPixel 9に複数のメモリ安全性脆弱性への緩和策を導入したが、モデムのファームウェアは複雑で攻撃対象領域も広いため、さらに積極的な対策が必要だと考えている。Googleによれば、Project Zeroは以前、インターネット経由でPixelのモデム上にリモートコード実行を達成できた。また、Pixelのモデムには数十メガバイトの実行可能コードが含まれている。

なぜGoogleはDNSパーサーを選んだのか

DNSは、ブラウザーがウェブサイトを見つけるのを助けるためだけに使われるわけではない。現代のセルラー通信がデジタルデータネットワークへ移行するなか、通話の転送などの基本的な処理もDNSサービスに依存している。この複雑なプロトコルは、信頼できない可能性のあるデータを解析する必要があるため、メモリ保護を欠く言語で実装された場合には重要な攻撃ポイントとなる。投稿によれば、これはCVE-2024-27227の脆弱性にも関連する種類のリスクだ。

Googleは、RustでDNSを実装する複数のオープンソースパッケージを評価し、保守状況、75%を超えるテストカバレッジ、Rustコミュニティでの普及度を基準に、hickory-protoライブラリを選択した。当初、このライブラリには、リソースが限られた環境やオペレーティングシステムなしで動作する環境に必要なno_stdのサポートがなかった。そのためGoogleは、このライブラリと一部の依存関係に同サポートを追加した。この作業により、rust-urlプロジェクトのURLパーサーにもno_stdサポートがもたらされた。

サイズのコストと既存ソフトウェアとの統合

サイズ調査では、Rustで記述された中間コンポーネントが4キロバイト、core、alloc、compiler_builtinsの各コンポーネントが17キロバイト、hickory-protoライブラリとその依存関係が350キロバイトを消費し、合計は371キロバイトとなった。Googleは、Pixelのモデムメモリのサイズに厳しい制約はないと考えており、現段階ではサイズの最適化よりもコミュニティによるサポートとコード品質を優先した。ただし、この増加分は他の組み込みシステムにとって障壁になる可能性があり、将来的には不要な機能を除外するコンパイルオプションによって削減できると指摘している。

既存のCおよびC++で記述されたコードベースにRustを統合するため、チームは基本的な算術処理、動的メモリ割り当て、言語間の接続インターフェースを検証するユニットテストを使用した。また、Cargoを通じて別個の静的ライブラリを作成するのではなく、Rustのコンパイル手順を既存のビルドシステムに直接統合する方式を選択した。この方法は、Rustコンポーネントを追加する際の拡張が容易で、シンボルが衝突する可能性を減らせるためだ。

基本的なビルドシステムにはPigweedを使用し、ファームウェアに存在するメモリ割り当てシステムをRustのallocコンポーネントに接続するため、またRustとC/C++間でパニック処理を統一するために、FFIインターフェースを使用した。リンク時には、modem向けに最適化されたmemsetおよびmemcpyの実装がcompiler_builtins由来の実装に置き換わったことで、性能と電力消費に関する問題が発生した。チームは、リンク段階の前に静的ライブラリからcompiler_builtinsのファイルを削除することで問題に対処した。

DNSインターフェースと次の段階

GoogleはDNS応答を処理するC言語のAPIを定義し、それをRustで実装した。応答の解析後、コンポーネントは既存のC関数を呼び出し、元のプログラムで使用されるデータ構造を更新する。データ型間の複雑な変換に必要な接続コードの生成には、bindgenツールを使用した。

Googleによれば、Pixel 10シリーズは、メモリ安全な言語をモデム内部に統合する初のPixel端末であり、重要な節目となる。この目標は単一のパーサーを置き換えることにとどまらない。同社は、このプロジェクトが、将来的にメモリ安全な言語で記述された他のパーサーやコンポーネントをセルラー通信基盤のコードベースへ導入するための基盤になると考えている。

ニュースの出典
Google Security Blog
原文を開く ↗
c
著者

certi.news Editorial Team

知っておくべきこと

Pixel 10シリーズは初めて、メモリ安全性の脆弱性リスクを低減することを目的に、DNSパーサーを置き換える形で、セルラーモデムソフトウェアにRustで記述されたコンポーネントを組み込みました。このコンポーネントによりソフトウェアイメージは約371キロバイト増加し、統合にはFFIインターフェースと既存のビルドシステムが活用されました。

  • Pixel 10は、セルラーモデムソフトウェアにRustを組み込んだ初のPixelデバイスです。
  • GoogleはRust製のDNSパーサーを構築するため、hickory-protoライブラリを採用しました。
  • Googleはhickory-protoと一部の依存関係にno_stdのサポートを追加し、rust-urlにも同様のサポートを追加しました。
  • ソフトウェアのサイズは合計で約371キロバイト増加しました。
  • Rustを既存のCおよびC++コードベースに接続するため、FFIインターフェースとbindgenツールが使用されました。
  • Googleは、このプロジェクトが、メモリ安全性の高い言語で記述された他のパーサーやコンポーネントをセルラー通信コードベースに追加するための土台になるとしています。

よくある質問

GoogleがDNSパーサーを選んだ理由は何ですか?

DNSは信頼できない可能性のあるデータを扱い、主要なセルラー処理で使用されるため、メモリ保護のない言語で実装する場合に重要なポイントとなるからです。

Rustコンポーネントによる増加量はどの程度ですか?

合計で約371キロバイト増加し、そのうち350キロバイトはhickory-protoライブラリとその依存関係によるものです。

GoogleはRustを既存のソフトウェアにどのように接続しましたか?

C言語のAPI、FFIインターフェース、bindgenツールを使用し、RustとCおよびC++コードで使われるデータ型の間の接続コードを生成しました。

このストーリーを探る

関連トピックとエンティティ

同じカテゴリー

おすすめ記事

すべてのニュースを見る