White Houseは2月26日(現地時間)、「(PDF) BACK TO THE BUILDING BLOCKS: A PATH TOWARD SECURE AND MEASURABLE SOFTWARE」において、ソフトウェア開発者にメモリの安全性を考慮したプログラミング言語に切り替えることを推奨するレポートを発表した。プログラムの不正なメモリアクセスは脆弱性に直結する可能性が高く、脅威になるとして警告している。

  • BACK TO THE BUILDING BLOCKS: A PATH TOWARD SECURE AND MEASURABLE SOFTWARE - White House

    BACK TO THE BUILDING BLOCKS: A PATH TOWARD SECURE AND MEASURABLE SOFTWARE - White House

メモリの安全性が高いプログラミング言語とは

レポートでは、メモリの安全性にまつわる脆弱性を「メモリーが意図しない方法でアクセスされたり、書き込まれたり、割り当てられたり、割り当て解除されたりする脆弱性」と定義している。

この脆弱性の特徴を持ち普及率が高いプログラミング言語として、CおよびC++を挙げている。このような脆弱性を軽減するために、米国土安全保障省サイバーセキュリティ・インフラストラクチャーセキュリティ庁(CISA: Cybersecurity and Infrastructure Security Agency)は「CISA Open Source Software Security Roadmap | CISA」において、「はじめからメモリ安全なプログラミング言語」の使用を推奨している。レポートでは、その具体例としてメモリ安全性を備えていないプログラミング言語のCおよびC++を「Rust」へ移行することを促している。

宇宙関連システムの制約

宇宙関連システムのような高度な安全性が求められるソフトウェアのプログラミング言語については、他に考慮すべき制約が存在する。ソフトウェアおよびハードウェアの双方と対話できる言語でなければならない。さらに出力タイミングが一貫しており、「ガベージコレクタ」が存在せず、「オーバーライド」できてはならない。

これら要件を満たすプログラミング言語としてCおよびC++があるが、メモリの安全性に欠けている。要件を満たした安全なプログラミング言語の一つにRustが存在するが、宇宙関連システムに適用できるほど安全性は実証されていない。

そのため、このようなシステムに対し、レポートではメモリ安全性の達成にハードウェアによる補完的なアプローチを提案している。その一つとして、メモリ位置へのポインターの有効性を使用前に相互検証するメモリタグ付け拡張(MTE: Memory-Tagging Extension)が挙げられている。

この機能を使うと解放後の不正なメモリアクセスを検出することができる。しかしながら、これは包括的なソリューションとはならない。他のアプローチとしてRISCプロセッサの機能的ハードウェア拡張RISC命令(CHERI: Capability Hardware Enhanced RISC Instructions)を挙げている。ケンブリッジ大学が開発したこの機能は、きめ細かなメモリ保護が可能とされる。

結論

レポートでは、ソフトウェアから脆弱性を完全に排除することは緊急だが複雑な問題としている。しかしながら、ソフトウェアから脆弱性を積極的に排除し、脆弱性の影響を受けやすい人々への負担を軽減し、サイバーセキュリティ担当者への影響を改善することは全体の利益になるとして関係者全員に協力を求めている。また、この進歩には技術コミュニティーの協力が不可欠として、ソフトウェアとハードウェアの開発者にメモリ安全性を考慮したプログラミング言語への移行を推奨している。