最近ベータ版がリリースされたAndroid Pは、今後のリリースでコンパイラーベースのセキュリティー対策を強化する予定であると、GoogleのエンジニアであるIvan Lozano氏は述べている。また、同氏によると、今後のリリースで、制御フローの完全性と整数オーバーフローのサニタイズも含まれるとのこと。
コンパイラベースの対策は、LLVM/Clangコンパイラによって一連の機能として提供される。対策の基本的なアイデアは、コンパイル時にランタイム操作を計測し、未定義の動作を引き起こす操作をキャッチし、安全に失敗させることである。LLVM/Clangは、ゼロ除算、NULL可能性違反、負の配列境界、制御フローの完全性を含む、いくつかのサニタイザをサポートする。
GoogleはAndroid Nougat(Android 7としてリリースされた)の時代にLLVM/Clangのサニタイズを利用し始めた。その後、Android O (Oreo、Android 8.0)で制御フローの完全性チェックを追加した。Android Pに対してGoogleは、メディアフレームワークやBluetooth、NFC、カーネルなどのセキュリティに不可欠な他のコンポーネントを含む、OSのさまざまなコンポーネントにわたって、サニタイザと制御フローの完全性の両方をサポートを拡大した、とLozano氏は述べている。
制御フローの完全性は、攻撃者が既存のコードを活用するコードリユース攻撃に対処する。たとえば、ret命令で終了する短いコードシーケンスを見つけ、それらを任意の順序で実行することによって実現される。これにより、攻撃者はコードを注入することなくスタックを制御でき、そのような攻撃を検出する複雑さが大幅に増加する。この種の攻撃に対処するために、制御フローの完全性は、コンパイル時に決定した、パスを限定したコールグラフに、プログラムの制御フローを限定することを目的としている。プログラムが予期しない呼び出し先に分岐しようとすると、安全な方法で中止される。制御フローの整合性には、コンパイル時と実行時の両方でコストがかかるが、AndroidでのGoogleのテストでは無視できることが分かったとLozano氏は述べている。
サニタイザに関して、Googleは、整数オーバーフローサニタイザの使用をlibui、libnlなどのライブラリにも広げた。整数オーバーフローは、攻撃者がプログラムの制御を奪う一般的な手段であり、以前のバージョンのAndroidに影響を与えたStagefright脆弱性の中心であった。Googleの貢献は、LLVM整数オーバーフローサニタイザを改善し、多くのケースで75%以上のオーバーヘッドを減らしたことである。
Pixel携帯電話や他のサポートされている端末を所有している場合は、Android P Betaプログラムに登録することでAndroid P betaにアクセスできる。
Rate this Article
- Editor Review
- Chief Editor Action