6年間でAndroidにおけるメモリ安全性の脆弱性を76%から24%まで低減 Googleが語る「Safe Coding」のアプローチと教訓とは:「メモリ安全でない既存のコードを全て書き直す必要はない」
Googleは公式ブログで、2019年から2024年までの6年間で、Androidにおけるメモリ安全性の脆弱性を76%から24%まで低減できたと明らかにした。Googleはソフトウェア開発における「Safe Coding」のアプローチの重要性やメリットを解説している。
Googleは2024年9月25日(米国時間)に公式ブログで、モバイルOS「Android」におけるメモリ安全性の脆弱(ぜいじゃく)性を排除する取り組みにより、2019年から2024年までの6年間で、メモリ安全性の脆弱性を76%から24%まで低減できたと明らかにした。
Googleは「メモリ安全性の脆弱性は、ソフトウェアセキュリティにおける大きな脅威であり続けている。この脆弱性を排除し、高度な信頼性を持つソフトウェアを構築するための道筋は、セキュリティ・バイ・デザインに基づいたアプローチである『Safe Coding』にある」と述べている。
AndroidにおけるSafe Codingの効果とは?
Androidオープンソースプロジェクト(AOSP)は、メモリ安全性の脆弱性を管理するコストや複雑さの増加を受け、2019年ごろからAndroidの新規開発をメモリ安全な言語に移行するSafe Codingのアプローチを開始した。
Androidの大部分のコードはメモリ安全でないものの、メモリ安全性の脆弱性は大幅かつ継続的に減少している。Googleによると、2019年時点で、メモリ安全性の脆弱性はAndroidにおける脆弱性の76%を占めていたが、2024年には24%となる見込みであり、業界平均の70%を大きく下回るという。
さらにGoogleはブログ記事で、2022年にUsenix Security誌で発表された「脆弱性の大部分が新しいコードや最近修正されたコードに存在する」とする論文を引用し、これは2021年時点でのGoogleの分析を裏付ける内容であり、一般化する内容であり、次の2つの重要な点が分かると指摘している。
- 問題は圧倒的に新しいコードにあり、ソフトウェア開発の方法を根本的に変える必要がある
- コードは時間とともに成熟し、指数関数的に安全になっていく。そのため、コードが古くなるにつれて書き直しなどの投資に対するリターンは次第に減少する
Safe Codingのメリット
Googleによると、Safe Codingは、言語機能、静的解析、API設計を通じて「セキュリティの不変条件」を開発プラットフォームに直接組み込むものであり、脆弱性を誤って導入してしまうリスクをなくし、コードベースの拡大にも継続的かつ確実に対応できるものだという。
「過去数十年間にわたって業界はメモリ安全性の脆弱性に取り組んできた。だが、従来のプロアクティブなパッチ適用やエクスプロイト緩和の取り組みはいずれも完全な解決策には至っていない。メモリ安全な言語への移行は、単なるテクノロジーの変化にとどまらず、セキュリティのアプローチを根本的に変えるものだ。この移行の基盤となるのがSafe Codingだ」と、Googleは述べている。
Googleは、Safe Codingに取り組むことで、次のようなメリットにもつながるとしている。
- 「軍拡競争」の打破:防御側が自らのコストを上げることで攻撃者側のコストも上げようとする果てしない競争の代わりに、Safe Codingは、安全なソフトウェアを最初から積極的に構築することで、このサイクルを打破できる
- メモリ安全性の一般化:各システムやアプリケーションのリスクに応じてセキュリティ対策を細かく調整し、そのリスクが変わるたびに再評価して別々の対策を実施する代わりに、Safe Codingはメモリ安全な言語を活用して、セキュリティの基本レベルを一律に高めることができる。これにより、脆弱性の数を全体的に低減できる。特にRustのような最新のメモリ安全な言語は、他の種類のバグ対策にも応用できる
- 生産性の向上:コードの正確性と開発者の生産性を向上させ、コードを保存する前にバグを見つけられるようになる。そのためバグの発生を早期に予防でき、緊急でコードを修正、取り消すロールバック回数も低減できる。Androidチームの場合、Rustでの変更によるロールバック率がC++と比較して半分以下であることを確認している
Safe Codingの教訓と今後の取り組み
Googleは、引用した論文やAndroidでの成果を踏まえ、「既存のメモリ安全でないコードを全て破棄したり、書き直したりする必要がないことは明らかである」とした上で、メモリ安全性を向上させるために、RustやC++、RustやKotlin間の相互運用性の向上に投資を集中させているという。
また、Safe Codingによりメモリ安全性の脆弱性が低減する中で、従来のエクスプロイト緩和機能やプロアクティブな検出の役割の変化を、次のように予測している。
- プロアクティブな緩和策のより選択的な使用:メモリ安全なコードへの移行に伴い、エクスプロイト緩和機能への依存度が下がり、より安全なソフトウェアになるだけでなく、より効率的なソフトウェアになるだろう
- プロアクティブ検知の使用頻度は減るが、効果は高まる:ファジングなどのプロアクティブな検出アプローチへの依存は減少する代わりに、より小さな、カプセル化されたコードスニペットに対して、包括的なカバレッジを達成することが容易になるため、有効性は向上するだろう
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- Google、「メモリ安全性」に関する見解と対策をまとめたホワイトペーパーを公開
Googleは、「セキュアバイデザイン:メモリ安全性に関するGoogleの見解」と題したホワイトペーパーを公開した。 - CrowdStrikeが引き起こした大規模障害の根本原因はメモリアクセス違反、Microsoftが確認
CrowdStrikeが提供するセキュリティプラットフォーム「Falcon」の構成ファイルの不具合により、世界中の多数のWindowsデバイスでブルースクリーン問題が発生した。これを受けてMicrosoftは、この障害の根本原因の技術的概要や、現在のセキュリティ製品がカーネルモードドライバを使用する理由について公式ブログで解説した。 - 米国国防総省のDARPA、CからRustへのコード変換を自動化する「TRACTOR」プログラムを開始
DARPAは、C言語コードからRust言語のコードへの変換を自動化することを目指す「TRACTOR」プログラムを開始した。