Linuxのカーネルモジュールは現在、そのほとんどがC言語を用いて開発されているが、最近新たに「Rust」を主要言語の1つとして追加するという提案が出されていた。そして米国時間6月17日、この提案を後押しする形となる発表が、無料の証明書発行サービス「Let's Encrypt」を運営しているInternet Security Research Group(ISRG)とGoogleによってなされた。
Linuxカーネルの開発言語としてRustを採用することを目指すイニシアチブの主な目的は、カーネル内からメモリー関連のセキュリティ脆弱性を一掃するというものだ。Linuxカーネルはインターネットのインフラを支える重要なパーツであり、サーバーからエッジデバイス、スマートフォンに至るまでさまざまな機器上で実行されている。
カーネルを構成する主なLinuxドライバーは現在に至るまでC言語で記述されているが、C言語はRustとは異なり、必ずしもメモリー安全性を保証できない。Microsoftは以前、過去12年間に提供された同社の製品のセキュリティ更新プログラムで修正された脆弱性のうち、70%がメモリー安全性の問題だったとしていた。
Linuxカーネルの開発者は主に、3000万行以上の大部分がC言語で書かれているカーネル全体を書き直すのではなく、新たなコードをRustで記述することを模索している。
Googleは4月、Linuxカーネルの開発言語にRustを追加するというイニシアチブを支援する考えを明らかにした。このイニシアチブはMiguel Ojeda氏によって進められている。Ojeda氏はこの提案をRFC(Request For Comments)として公開した。
これまでOjeda氏は、メモリー安全性を向上させるためのISRGの取り組み「Prossimo」プロジェクトの契約開発者として作業に従事してきた。Prossimoは初期段階でGoogleの資金援助を受けている。ISRGは今回、Ojeda氏がこのプロジェクトにフルタイムで取り組めるようにすることを明らかにした。
Googleのソフトウェアエンジニアとして「Google Cloud Platform」(GCP)を支えるインフラを担当するかたわら、「Rust for Linux」プロジェクトの調整作業を支援してきたDan Lorenc氏は、「セキュリティに関する問題すべてを解決するという大規模な取り組みは、大規模な投資として最も効果的だということをGoogleは何度も実感してきた」と述べている。
「私たちは、Linuxカーネルのように広範に利用されている重要なものに取り組む作業が時間を要することを理解しているが、ISRGがカーネルのメモリー安全性を向上させることに専念するMiguel Ojeda氏の作業を支援できるようになることを嬉しく思っている」(Lorenc氏)
Lorenc氏が示唆しているように、Linuxカーネルの開発に2つ目のプログラミング言語を持ち込むというのは気軽にできる決断ではない。Linuxの生みの親であるLinus Torvalds氏はOjeda氏のRFCに対していくつかの点から異議を唱えている。しかし、Googleが後ろ盾となることで、状況が変わっていく可能性もある。
ISRGのエグゼクティブディレクターであるJosh Aas氏は、Linuxカーネルがサーバーからクライアントのデバイスに至るまで、モダンなインターネットの中核に位置していると述べ、ネットワークデータやその他の入力を処理する最前線に位置している点を指摘した。このように、Linuxカーネルの脆弱性は広範な影響を及ぼし、組織、デバイス、人々のセキュリティとプライバシーをリスクにさらす可能性があると述べている。
「Linuxカーネルは主にメモリー安全性が担保されていないC言語で書かれているため、バッファオーバーフロー、解放済メモリーの使用といったメモリー安全性の脆弱性は常に懸念されている。メモリーセーフなRustでLinuxカーネルの一部を書くことができるようにすることで、私たちはメモリー安全性の脆弱性をドライバーなどの特定のコンポーネントから完全に取り除くことができる」(Aas氏)
Googleは、ウェブサーバーソフトウェアの「Apache HTTP Server」向けのモジュールをRustによるモジュールで置き換えるというISRGのプロジェクトも支援している。こういったモジュールは、幅広く使用されているApacheウェブサーバーがHTTPS接続を暗号学的にセキュアなものにするための要となっているため、インターネットインフラを支えるもう1つの重要なパーツといえる。
この記事は海外Red Ventures発の記事を朝日インタラクティブが日本向けに編集したものです。