Pixel 8・Pixel 8 ProでMTEを有効にする方法
![](https://image.news.livedoor.com/newsimage/stf/b/7/b774c_88_c858832c51abb09f8b3fefd57b1a5bc2.jpg)
各メモリの割り当て・割り当て解除時に追加のメタデータをタグ付けし、脆弱(ぜいじゃく)性のユーズ・アフター・フリーやバッファオーバーフローを検出できるようにする「Memory Tagging 拡張機能(MTE)」がArmv9に搭載されています。このMTEを初めて有効化できるスマートフォン「Pixel 8/8 Pro」を有効にする方法について、Googleのセキュリティチーム「Project Zero」のマーク・ブランド氏が解説しました。
https://googleprojectzero.blogspot.com/2023/11/first-handset-with-mte-on-market.html
Pixel 8またはPixel 8 Proの開発者向けオプションには「MTE」を有効化するためのオプションが用意されています。これはアプリ開発者がMTEを使用してアプリをテストすることを想定して用意されたオプション。MTEの動作モードには「同期モード(SYNC)」と「非同期モード(ASYNC)」「非対称モード(ASYMM)」の3つがありますが、アプリやネイティブ・ユーザー・モードのバイナリをデフォルトの同期モードに設定することが可能です。
![](https://image.news.livedoor.com/newsimage/stf/b/3/b3fff_88_61ee3aa68c5cdfbe73dbfc52b04cdc77.png)
同期モードでMTEを有効にするには、ブートローダーがタグを保存するためにデバイスのメモリの一部を確保する必要があるので、まずブートローダーを設定してMTEを有効にし、次にアプリケーションでMTEを使用するようにシステムを設定する必要があります。
手順としては、開発者オプションからUSBデバッグを有効にし、Androidデバッグ・ツールがインストールされているコンピューターにスマートフォンを接続。シェルを起動した後、以下の3つのコマンドを実行してから再起動します。
setprop arm64.memtag.bootctl memtag
setprop persist.arm64.memtag.default sync
setprop persist.arm64.memtag.app_default sync
上記コマンドで、ブート時にMTEを有効にするようにブートローダーを設定し、デバイス上で動作するネイティブ実行可能ファイルのデフォルトのMTEモードを設定して、アプリのデフォルトのMTEモードを設定することが可能。
記事作成時点では実験的なMTEサポートのみが提供されていて、root化されていないAndroidデバイスでは/data/local/tmp内のファイルからコマンドラインフラグを読み込むようにChromeを設定する必要があるなどの注意事項があります。
ブートローダでMTEが有効になっていることを確認するだけなら、Dynamic Toolsチームが作成したアプリがGoogle Playにあるので、それを使うことも可能。この時点で開発者設定に戻り、USBデバッグを無効にしてもOKですが、開発者モードのトグルはオンのままにしておく必要があります。これを無効にすると、次の再起動時にMTEが完全にオフになってしまいます。
![](https://image.news.livedoor.com/newsimage/stf/7/3/7333a_88_b90389ab33381593ae0440a43df56601.png)
この方法でMTEを有効すると、少なくともいくつかのアプリケーションがクラッシュしたり、MTEで正しく実行できないといった問題が発生する可能性が高いそうですが、ブランド氏は1カ月間有効状態にしているにもかかわらず、何の問題も発生していないとのこと。さらに、ブランド氏によると、同期モードのMTEを有効にしたPixel 8は、少なくとも主観的には、以前よりもパフォーマンスとバッテリー寿命がアップグレードしているとのことです。