GoogleもRustに賭け、Chromiumへの組み込みを発表

Chromium

Rust も Chromium に到着しました

Googleは最近、Chromiumプロジェクトのコードで使用可能な言語の中にRustプログラミング言語を追加したことを発表しました。

Chromiumコードベースへの統合を希望するサードパーティのRustライブラリには、組み入れのための要件が​​いくつかあることが述べられています。例えば、そのライブラリは速度、メモリ消費量、安定性において他のライブラリよりも優れているか、特定の技術の唯一の実装である必要があります。

Rust ライブラリは、特権プロセスで機能を実行できる場合、またはライブラリを使用することで他のライブラリや C++ コードと比較してバグのリスクが軽減される場合にも受け入れられます。 どのライブラリを Chromium に含めることができるかはまだ決定されていません。

この決定は、 Chromeのコードベースにメモリエラーが発生するのを防ぐための取り組みの一環として行われた。2年前に提供された統計によると、Chromiumにおける重大かつ危険なセキュリティ問題の70%はメモリエラーが原因となっている。

安全なメモリ管理に重点を置き、自動的なメモリ管理を提供するRust言語を使用することで、解放されたメモリ領域へのアクセスやバッファオーバーフローといった問題によって引き起こされる脆弱性のリスクを軽減できます。

Rust では、参照チェック、オブジェクトの所有権とオブジェクトの有効期間 (スコープ) の追跡、およびコード実行中のメモリ アクセスの正確性の評価によって、コンパイル時に安全なメモリ処理が提供されます。 Rust はまた、整数オーバーフロー保護を提供し、使用前に変数値の強制的な初期化を要求し、標準ライブラリでエラーをより適切に処理し、デフォルトで不変の参照と変数の概念を強制し、論理エラーを最小限に抑えるための強力な静的型付けを提供します。

Rust を使用すると、Google がコード ベースを安全に保つために使用する「do の規則」を適用することがより簡単かつ安全になります。

この規則によれば、追加するコードは、検証されていない入力を処理する、安全でないプログラミング言語 (C/C++) を使用する、および昇格された特権で実行するという XNUMX つの条件のうち XNUMX つ以上を満たすことはできません。 この規則から、外部データを処理するためのコードは、最小限の特権に減らす (分離する) か、安全なプログラミング言語で記述する必要があることがわかります。

もともとブラウザを念頭に置いて開発された Rust の場合、既存のコードとの統合は IPC を使用せずに行うことができ、複雑さを軽減してメモリ エラー保護を調整できます。これにより、開発プロセスが高速化されます (必要なコードが少なくなります)。および簡単なレビュー)、セキュリティ関連のバグの数を減らします。

Rust コードを既存の C++ コードと簡単に統合し、統合に伴うリスクや制約を回避するために、一方向の相互作用を制限することにしました。つまり、API 関数を介して C++ から Rust を呼び出すこと(つまり、Rust コードは C++ コードからのみ呼び出すこと)はできますが、C++ コードと混在させないようにすることで、依存関係ツリーを管理しやすくします。

XNUMX つ目の制限は、Chromium に関連付けられておらず、タスク指向の API を持つ個別のコンポーネントの形式で提供されるサードパーティ ライブラリのみをサポートすることです。

Chrome 102 のリリース以降、Rust を使用してメモリの解放後使用の脆弱性のエクスプロイトをブロックすることに加えて、C++ コードは代わりに MiraclePtr (raw_ptr) 型を使用するようになりました。そのようなアクセスが見つかった場合、メモリ領域とブロック。

パフォーマンスとメモリ消費に対する新しい保護方法の影響は、無視できると推定されます。

最後に、既存のコードをRustで書き直す計画はまだありませんが、今後はRustで書かれたサードパーティライブラリをコードベースに統合することは可能になります。

ビルド システムには、Rust コードのコンパイル、テストの実行、および Rust コンポーネントと C++ コードの統合のためのツールが既に追加されています。 Rust コードは、来年の Chrome リリースの一部として登場する予定です。

出典:https://security.googleblog.com


Googleで優先ソースとして追加する