MTE 設定

MTE は、Android カーネル内および Android システム内の任意のプロセス内で独立して有効にすることができます。 Google は特定の構成を強制せず、デバイスビルダーに最大限の柔軟性を提供することを目指しています。

このドキュメントでは、Android ユーザーにとって常時オンの脆弱性軽減策としてセキュリティとコストの間で適切なトレードオフを提供すると考えられる MTE 設定と範囲について説明します。

カーネル

カーネルの MTE はコマンド ラインを通じて設定されます。デフォルトは同期モードでオンです。これは、いくつかの理由により将来変更される可能性があります。

  • これはパフォーマンスに大きな影響を与えることがわかっており、最適化作業が必要です。
  • カーネル コードの品質は、MTE を強制 (つまり、障害時パニック) モードで出荷するには不十分であると広く認識されています。

現在の推奨事項は、実稼働デバイスでカーネル MTE を無効にすることです。これを行うには、カーネル コマンド ラインにkasan=offを追加します。

ユーザースペース

Google は、MTE で保護されるユーザー空間バイナリのデフォルトのリストを提供しています。このリストは Android セキュリティからの入力を使用して構成されており、特権を持つコンポーネントや信頼できない入力を処理するコンポーネントが含まれています。 MTE で推奨されるネイティブ バイナリの最新リストは、Android ビルド システムのmemtag-common.mkファイルにあります。さらに、現在、Nfc、Bluetooth、SecureElement などのいくつかのシステム アプリケーションも含まれています。これらのバイナリとアプリケーションは、デフォルトで非同期モードで有効になっています。

現在の推奨事項は、デフォルトのターゲット リストを使用することです (変更は必要ありません)。さらに、コア システムへの BSP および OEM の追加を評価し、セキュリティに敏感なシステムで MTE を有効にすることをお勧めします。

アプリケーション

現時点で MTE を使用しているのは、上記の 3 つのシステム アプリケーションだけです。サードパーティ アプリケーションで MTE を有効にするには、そのAndroidManifest.xmlandroid:memtagMode off以外の値で指定する必要があります。したがって、Geekbench や AnTuTu などの一般的なベンチマーク スイートは MTE では実行できません。カーネル MTE も無効になっている場合 (上記のkasan=offを参照)、ベンチマークのパフォーマンスへの影響は、たとえあったとしても非常に限定的であると予想されます。

他のアプリに関しては、Chrome での MTE サポートの開発が活発に行われています。 Chrome の現在の Play ストア バージョンには、マニフェストにmemtagMode=async設定が含まれています。また、Android エコシステム内のセキュリティを重視した多くのアプリ (銀行アプリなど) も、最終的には同じことを行うだろうと私たちは予想しています。一方で、ゲームなどの最高の CPU パフォーマンスを要求する一部のアプリケーションでは、MTE を無効のままにすることを選択することが予想されます。

その他のモード

上記の手順では、どこでも非同期 MTE モードのみを使用します。ハードウェアによっては、他のモードでもほぼ同じ速度、またはまったく同じ速度になる場合があります。また、より優れた診断と、ある程度強力な脆弱性軽減特性も提供します。

他の 1 つまたは 2 つの構成をテストして、パフォーマンス/電力要件に十分であるかどうかを確認することをお勧めします。 /sys/devices/system/cpu/cpu*/mte_tcf_preferredに書き込むことで、システム内の CPU コアごとに MTE モードを設定できます。たとえば、 sync (またはasymm ) を書き込むと、非同期モードを要求したユーザー空間プロセスは、そのコアで実行中にサイレントに Sync (または Asymm ) に自動アップグレードされます。このセットアップは、デバイスの起動時に .rc ファイルで実行できます。

他の 1 つまたは 2 つの構成を測定して、パフォーマンスと電力要件を満たしているかどうかを確認することをお勧めします。検討すべきいくつかの興味深い構成:

  • すべてのコアで非対称
  • 大きなコアでは非対称、他のコアでは同期

プロセスが非同期モード (自動アップグレードの可能性あり) を要求していることを確認するには、次の行にPR_MTE_TCF_SYNCPR_MTE_TCF_ASYNCの両方が含まれていることを確認します。

  debuggerd  | head -30 | grep tagged_addr

残念ながら、プロセスの効果的なモードを確認する簡単な方法はありません。ただし、上記の両方の値を示すプロセスは自動アップグレード動作の対象になります。