Rust in Android: move fast and fix things
#Rust #Android #メモリ安全性 #セキュリティ #Google
出典: Google Security Blog (2025年11月)
概要
AndroidにおけるRust採用の成果を2025年データで分析
メモリ安全性の向上だけでなく、開発速度と品質の劇的な改善を実証
セキュリティと生産性のトレードオフという従来の常識を覆す結果
主要な成果データ
メモリ安全性脆弱性
2025年初めて全体の20%以下に低下
Rustコードの脆弱性密度: 0.2件/100万行
C/C++コードの脆弱性密度: 約1,000件/100万行
→ **1000倍以上の改善**
開発効率の向上
ロールバック率: C++比で**4分の1**
コードレビュー時間: **25%短縮**
コード修正回数: 同規模の変更で**20%減**
コード量の推移
新規Rustコード量がC++に匹敵
C++は緩やかに減少傾向
※システムプログラミング言語(C/C++/Rust)のみの比較
なぜRustが効率的なのか
ロールバックの低さが鍵
ロールバックは組織全体に影響
ビルドの再実行
ポストモーテムの実施
他チームのブロック
新たな安全対策の追加
Rustの安定性がこれらのコストを削減
コードレビューの効率化
2022年のエンジニア調査結果
Rustはレビューが容易
正しいコードである可能性が高い
2023→2024の改善はRust習熟度の向上が要因
DORA指標での評価
4つの主要指標を使用
デプロイ頻度
変更のリードタイム
変更失敗率
復旧時間
重要な事例: 初のRust脆弱性(未出荷)
CrabbyAVIFでの線形バッファオーバーフロー
CVE-2025-48530として追跡
リリース前に発見・修正(near-miss)
防御層が機能
Scudo hardened allocatorが決定的な役割
ガードページにより脆弱性を非悪用可能に
静かなメモリ破壊→明確なクラッシュに変換
クラッシュレポートのギャップを発見・改善
学びと改善
OSレベルではunsafeコードが必要
Comprehensive Rust trainingに新モジュール追加
unsafe Rustの安全な使い方
soundnessと未定義動作の理解
安全コメントとカプセル化のベストプラクティス
unsafe Rustに関する誤解
「unsafeがあるなら意味がないのでは?」への回答
データが示す真実
Android Rustコードの約4%がunsafe{}
それでも脆弱性密度は圧倒的に低い
unsafeなRustがC/C++と同じバグ率という保守的な仮定すら実態を過大評価
unsafeが安全な理由の仮説
Rustの安全抽象化への明確な境界
unsafeコードのスコープが限定的
unsafeブロックへの注意深い scrutiny
型システムと借用チェッカーの恩恵
コンパイラによる未定義動作の検出
従来のアプローチとの違い
旧: Move fast, then fix the mess
静的解析、ランタイム保護、サンドボックス、パッチ対応に多大な投資
パフォーマンスと生産性のコスト大
それでも不十分な保証
新: Move faster while fixing things
より安全な道がより効率的
セキュリティのためのトレードオフが不要に
将来的にはパフォーマンスの取り戻しも可能
今後の展開
Android system servicesとlibrariesでのRustサポートは成熟
セキュリティと生産性の利点を他領域にも展開
メモリ安全言語は包括的戦略の一部
多層防御アプローチを継続
技術的示唆
メモリ安全性脆弱性の密度低減がもたらす効果
単なるバグ数削減ではない
セキュリティアーキテクチャ全体の有効性向上
脆弱性チェーンによる防御回避を困難に
言語選択の考え方
Java/Kotlinは補完的な役割
Rustはシステムプログラミング言語としてC/C++の代替
低レベル制御と予測可能性を維持しながらリスク削減
関連概念
DORA framework
DevOps Research and Assessment
memory safety strategy
vulnerability density
rollback rate
code review efficiency
unsafe Rust
Scudo allocator
guard pages
FFI
soundness
undefined behavior
考察
「セキュリティvs生産性」の二項対立を超えた事例
1000倍の脆弱性密度改善
4倍低いロールバック率
25%短縮されたレビュー時間
これらが同時に達成されている
unsafe Rustの実態
理論的リスク ≠ 実際のリスク
言語設計による安全性の境界明確化が効果的
4%のunsafeコードが全体の安全性を損なわない
組織的な学習と改善
2023→2024のレビュー時間改善は習熟度向上
初の脆弱性からの学び→トレーニング強化
継続的な改善サイクルの実践
他の開発組織への示唆
メモリ安全言語への移行は投資対効果が高い
初期の学習コストを超えると生産性が向上
セキュリティ改善と効率化は両立可能
データ分析期間
2025年のデータ(年末の2ヶ月前に公開)
Android標準の90日パッチウィンドウにより最終値に近い
ファーストパーティ+サードパーティコードを含む