数億行のC++コードに空間安全性を後付けする
「空間メモリ安全性の脆弱性は、コードが意図しないメモリ領域にアクセスすることによって発生し、重大なセキュリティリスクとなり、攻撃者によってシステムや機密データを危険にさらすために利用されてきた。GoogleのProject Zeroによると、これらの脆弱性は過去10年間に発生したメモリ安全性の脆弱性の40%を占めている。対策として、Googleは新しいコードにメモリ安全な言語を使用し、既存のC++コードベースにセキュアな設計原則を適用するなど、包括的なメモリ安全性のアプローチを取っている。重要な戦略の1つは、共通のデータ構造に対する境界チェックを実装することであり、C++標準ライブラリ(libc++)の強化から始めている。強化されたlibc++は、実稼働環境で脆弱性を検出するためのセキュリティチェックを導入する。Googleは、強化されたlibc++をサーバーサイドの実稼働システムでデフォルトに設定し、サービス全体の空間メモリ安全性を向上させた。変更のパフォーマンスへの影響は意外にも低く、サービス全体で平均0.30%の影響しかなかった。強化されたlibc++を有効にすることで、すでに脆弱性の利用を防ぎ、クラッシュを減らし、コードの正確性を向上させ、1,000以上のバグを発見し、セグメンテーションフォールトを30%削減した。Googleは、他のライブラリにも境界チェックを拡張し、コードをSafe Buffersに移行することを目指しており、すべてのアクセスが境界チェックされることを要求している。同社は、C++を使用する他の組織に、標準ライブラリの強化モードをデフォルトで有効にすることを推奨している。