RustはAndroidプラットフォーム開発の主要言語に含まれています

Googleは、Androidプラットフォームの開発に許可されている言語にRustプログラミング言語を含めることを発表しました。 Rust 言語コンパイラは 2019 年に Android ソース ツリーに含まれていましたが、この言語のサポートは実験段階のままでした。 Android 向けに計画されている最初の Rust コンポーネントの一部には、Binder プロセス間通信メカニズムと Bluetooth スタックの新しい実装が含まれています。

Rust の導入は、セキュリティを強化し、安全なプログラミング技術を促進し、Android でメモリを操作する際の問題の特定効率を高めるためのプロジェクトの一環として実施されました。 Android で特定されたすべての危険な脆弱性の約 70% は、メモリ操作時のエラーが原因であることが注目されています。 メモリの安全性と自動メモリ管理に重点を置いた Rust を使用すると、フリーアクセス後のアクセスやバッファ オーバーランなどのメモリ エラーによって引き起こされる脆弱性のリスクが軽減されます。

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

Android では、すでにサポートされている言語 Kotlin と Java でメモリ安全性が提供されていますが、オーバーヘッドが高いため、システム コンポーネントの開発には適していません。 Rust を使用すると、C および C++ 言語に近いパフォーマンスを実現できるため、プラットフォームの低レベル部分やハードウェアと対話するコンポーネントの開発に使用できます。

C および C++ コードのセキュリティを確保するために、Android ではサンドボックス分離、静的分析、ファジング テストが使用されます。 サンドボックス分離の機能は制限されており、その機能の限界に達しています (リソース消費の観点から、プロセスへのこれ以上の断片化は非現実的です)。 サンドボックスの使用には、IPC の使用に伴う追加の遅延だけでなく、新しいプロセスを生成する必要があることによる多額のオーバーヘッド コストやメモリ消費量の増加などの制限があります。

同時に、サンドボックスはコード内の脆弱性を排除するものではなく、リスクを軽減し、攻撃を複雑にするだけです。これは、悪用には XNUMX つではなく複数の脆弱性を特定する必要があるためです。 コードのテストに基づく方法には、エラーを特定するために問題が顕在化する条件を作成する必要があるという点で限界があります。 考えられるすべてのオプションをカバーすることは不可能であるため、多くのエラーが見過ごされます。

Android のシステム プロセスについては、Google は「XNUMX つのルール」を遵守しています。これによれば、追加されたコードは、検証されていない入力データの操作、安全でないプログラミング言語 (C/C++) の使用、および厳密なサンドボックス分離なしで実行されます (特権が昇格されています)。 このルールは、外部データを処理するコードを最小限の権限に減らす (分離する) か、安全なプログラミング言語で記述する必要があることを意味します。

Google は既存の C/C++ コードを Rust で書き直すことを目的としていませんが、この言語を使用して新しいコードを開発する予定です。 統計的に、ほとんどのバグは新しいコードまたは最近変更されたコードに現れるため、新しいコードに Rust を使用するのは理にかなっています。 特に、Android で検出されるメモリ エラーの約 50% は、XNUMX 年以内に書かれたコードで検出されます。

RustはAndroidプラットフォーム開発の主要言語に含まれています


出所: オープンネット.ru

コメントを追加します