Googleはすでに、さまざまなAndroidコンポーネントのRustへの移行に取り組んでいます。
ここ数ヶ月、 ニュースの一部をブログでもシェアさせていただきました これまでのサポートと受け入れについてのハイライト さまざまなプロジェクトや開発における錆び、 その多くは、Linux、Windows、さらには Android などのヘビー級です。
大手企業に広く受け入れられているにもかかわらず、Rust への変更は簡単ではありません。Linux カーネルの XNUMX 番目のプログラミング言語として受け入れられるだけでも、Linus Torvalds が試すにはかなりの多くのことを通過する必要があったからです。承認。
Google の場合も例外ではなく、数か月前から Google は多くのプロジェクトに Rust を導入しており、 Android もその XNUMX つであり、プラットフォームの重要なソフトウェア コンポーネントのセキュリティを強化する取り組みの一環として、かなり管理された移行段階が実行されています。 Googleは移行作業を完了したと発表した ファームウェアの 「Android Virtualization Framework の保護された VM (pVM)」を Rust に。
このファームウェア Android から pVM ハイパーバイザーによって起動される仮想マシンの操作を整理するために使用されます。。 以前は、ファームウェアは C で書かれ、U-Boot ブートローダー上に実装されていましたが、そのコードにはメモリの問題に起因する脆弱性が以前に発見されていました。
ハイパーバイザー pVM は起動の初期段階で制御を取得します y 仮想マシンのメモリをホスト環境から完全に分離します。 機密データを処理する保護された仮想マシンへのホスト システムからのアクセスを防止します。 pvmfm (保護された仮想マシン ファームウェア) ファームウェアは、仮想マシンの起動直後に制御を取得し、生成された環境を検証し、整合性の問題が検出された場合は起動の中止を決定し、信頼チェーンに問題がある場合はゲスト システムのブート証明書を生成します。
の書き換え Rust を使用すると、Google の「XNUMX つのルール」に準拠することがより簡単かつ安全になります。 Android システムコンポーネントを安全に保つため。 このルールによれば、追加されたコードは 70 つの条件のうち XNUMX つだけを満たさなければなりません: 未検証の入力データを扱うこと、安全でないプログラミング言語 (C/C++) を使用すること、昇格された特権で実行することです。 このルールは、外部データを処理するコードは最小限の権限に減らす (分離する) か、安全なプログラミング言語で記述する必要があることを意味します。 Google の統計によると、Android で特定されたすべての危険な脆弱性の約 XNUMX% は、メモリ操作時のエラーが原因です。
Rust言語でコントローラなどの低レベルコンポーネントを開発するプロセスで生じる困難の中で、Rustは言語内で割り当てられたメモリの使用を念頭に置いて作成されているため、アンセーフモードでポインタを操作する必要性が挙げられます。さび。
デメリットの中には、 また、強調する価値があります。 構造体フィールドと配列インデックスにアクセスするための構文を改善する必要がある 参照を作成せずに単純なポインタを使用するだけでなく、未定義の動作を引き起こす可能性がありコンパイラによってチェックできない安全でない操作に対する安全なリンクの作成に関する制限も含まれます。
新しいファームウェアがRustで書き直されたことは言及する価値があります。 Android 14に含まれる ファームウェア開発プロセス中に作成されたユニバーサル ライブラリはパッケージとしてパッケージ化され、Rust コミュニティに移植されます。 結果のコード サイズは、以前のバージョンの pVM ファームウェアが 220 KB を占めていたのに対し、新しいコードは 460 KB を占めますが、 書き直されたバージョンに追加された新機能、そのおかげで、起動中に使用される他のコンポーネントをいくつか削除することができました。
その結果、新旧のすべてのトランクコンポーネントの合計サイズは同等であることが判明しました。 パフォーマンスよりもサイズが重要な場合は、コンパイラで追加のサイズ最適化モードを有効にし、不要な依存関係を破棄し、文字列フォーマッタを使用しないことで、C 言語の結果と同等の結果を達成できることに注意してください。
最後に あなたがそれについてもっと知りたいなら、詳細はで確認できます 次のリンク。