Google の Rust プログラミングへの移行:Android のメモリ脆弱性が 68%も減少

Google’s Shift to Rust Programming Cuts Android Memory Vulnerabilities by 68%

2024/09/25 TheHackerNews — Google が Secure-By-Design のアプローチの一環として、メモリセーフ言語 Rust などへの移行が Google で推進された結果として、Android で発見されるメモリの安全性に関する脆弱性の割合が、6年間で 76%から 24%へと減少したという。セーフ・コーディングに重点を置いた新機能の開発により、コードベースのセキュリティ・リスク全体が低減されるだけではなく、スケーラブルで費用対効果の高い開発スタイルが達成されると、同社は述べている。

Google の Jeff Vander Stoep と Alex Rebert は、一定期間が経過すると、新たなメモリ・アンセーフ開発が減速し、メモリ・セーフな開発が主流となるため、最終的にはメモリ関連の脆弱性が減少することにつながると、The Hacker News に共有した投稿で 述べている。

その一方で、さらに興味深いことに、新たなメモリ・アンセーフなコード量が増加していても、メモリに関連する脆弱性の数が減少する可能性があるという。この逆説は、脆弱性が指数関数的に減衰するという事実により説明される。つまり、多くの脆弱性が、新たなコードや修正されたばかりのコードに存在することが、研究により明らかになっている。

Stoep と Rebert は、「問題が存在する場所は材、圧倒的に新しいコードである。コードの開発方法に、根本的な変化が必要だと考えている。時が経つにつれてコードは成熟し、指数関数的に安全になっていく。つまり、コードが古くなるにつれて、書き直しなどにおける投資収益率は徐々に高まっていく」と指摘する。

2021年4月の時点で Google は、Android で Rust プログラミング言語をサポートする計画を正式に発表しているが、新規の開発においては、2019年頃からメモ・セーフな言語への移行を優先し始めたと述べている。

その結果として、この OS で発見されたメモリ関連の脆弱性の数は、2019年の 223件から、2024年の 50件未満へと減少している。

Rust Programming

また、この種の脆弱性が大幅に減少した理由としては、それらに対処する方式の進歩があるだろう。たとえば、Clang Sanitizers のようなツールを用いる事後的なパッチ適用から、脆弱性や緩和策の事前的な発見へと移行したことも挙げられる。

さらに Google は、セキュリティを基盤に Secure-by-Design の原則を取り入れることで、高信頼性を優先するメモリ・セーフ戦略を、さらに進化させるべきだと指摘している。

Vander Stoep と Rebert は、「緩和策やファジングなどの介入策に重点を置くのではなく、また、過去の実績から将来のセキュリティを予測するのではない、新たなアプローチがある。つまり、Safe Coding というパワフルな発想によりコードの特性を把握し、その特性に基づいて、何が起こり得るか、起こり得ないかを考えていける」と述べている。

さらに Google は、コードの書き換えを行うだけではなく、Rust/C++/Kotlin 間での相互運用にも重点的に取り組んでいる最中だと述べている。それは、メモリ・セーフ言語を採用し、最終的に脆弱性全体を排除するための、“実用的で段階的なアプローチ” だとしている。

同社は、「新しいコードに Safe Coding を採用することで、パラダイムシフトが起こり、既存の大規模なシステムであっても、脆弱性の本質的な減少を有利に活用できるようになる。そのコンセプトはシンプルだ。新しい脆弱性の発生源を断てば、それらは指数関数的に減少する。すべてのコードがより安全になり、セキュリティ設計の有効性が高まり、既存のメモリ・セーフ戦略に関連するスケーラビリティの課題が緩和される。したがって、より効果的にターゲットを絞り込みながら適用できるようになる」と述べている。

この展開は、Arm における製品セキュリティおよび GPU エンジニアリング のチームとの連携を、Google が強化する中で進んでいる。そこでは、Android エコシステムにおける複数の脆弱性が指摘され、また、GPU や ファームウェアを取り込んだ、全体的なソフトウェア・スタックのセキュリティが強化されている。

最近の事例として挙げられるものとしては、Pixel のドライバー・コードのカスタマイズにおける、2つのメモリ脆弱性 CVE-2023-48409/CVE-2023-48421 の発見と、Arm Valhall GPU ファームウェアおよび、第5世代 GPU アーキテクチャ・ファームウェアの脆弱性 CVE-2024-0153 の発見などがある。

Google と Arm は、「プロアクティブなテストは、新しい脆弱性が悪用される前に、検知/解決を達成するための、より優れた衛生管理である」と述べている。

Practice:Developer Ecosystems for Software Safety (PDF)