メモリ安全性の脆弱性の根本原因を取り除く
逆説的な結果
- メモリ安全ではない言語で書かれたコードベースが増加している場合でも、新機能をメモリ安全な言語へ移行すると、メモリ安全性の脆弱性は大幅に減少する
- これは脆弱性が時間の経過とともに指数関数的に減少するためである
数学的な説明
- 脆弱性の寿命は指数分布に従う
- 脆弱性は主に新しいコードで発生し、時間の経過とともにコードは安全になっていく
- 5年経過したコードの脆弱性密度は、新しいコードより3.4倍から7.4倍低い
Androidでの実際の事例
- 2019年からAndroidチームは新規開発をメモリ安全な言語へ移行し始めた
- 2024年時点で、メモリ安全性の脆弱性の割合は76%から24%へ減少した
- メモリ安全性の脆弱性が減少するにつれて、全体的なセキュリティリスクも低下した
メモリ安全戦略の進化
- 第1世代: 事後的パッチ - 脆弱性を発見して修正する方式
- 第2世代: 予防的緩和 - 脆弱性の悪用を困難にする方式
- 第3世代: 予防的脆弱性発見 - 脆弱性を事前に見つけ出す方式
- 第4世代: 高信頼の予防 - メモリ安全な言語へ移行することで、脆弱性そのものの発生を防ぐ方式
高信頼の予防の利点
- 防御側と攻撃側の終わりのない競争を断ち切る
- メモリ安全言語によって安全性を高め、コストを削減する
- コードの正確性と開発者の生産性を高める
教訓から実践へ
- 既存のメモリ安全ではないコードをすべて捨てたり書き直したりする必要はない
- 相互運用性を改善して、メモリ安全な言語への移行を加速する
- RustとC++、RustとKotlinの相互運用性を改善するツールを開発する
以前の世代の役割
- 予防的緩和と検出を選択的に活用する
- メモリ安全なコードへの移行が進むにつれて、緩和と検出の必要性は減っていく
結論
- 新しいコードでメモリ安全な言語を使うことで、脆弱性は指数関数的に減少する
- Androidにおける6年以上にわたる一貫した結果によって、このアプローチの有効性が実証されている
GN⁺のまとめ
- メモリ安全性の脆弱性を減らすには、メモリ安全な言語への移行が重要である
- Androidチームの事例では、メモリ安全性の脆弱性が大幅に減少したことが確認できる
- 既存コードを完全に書き直すのではなく、相互運用性を改善することが実用的である
- Rustのようなメモリ安全言語を使うことで、安全性と生産性を同時に高められる
1件のコメント
Hacker Newsのコメント