MTE(メモリタギング拡張)とは

えむてぃーいー

ArmのMemory Tagging Extensionの略。Armv8.5-Aで追加された。メモリの16バイトごとに4ビットのタグを付け、ポインタの上位のビットにも4ビットのタグを入れて、アクセスのたびに両者が一致するかをCPUが確かめる。解放した後のメモリの使用や範囲外のアクセスを、少ない負担で確率的に見つけられる。

「MTE(メモリタギング拡張)」は、1分野の1問の練習問題に出てきます(ハードウェアセキュリティの最新動向など)。

この用語の分野: ハードウェアセキュリティの最新動向

タグを比べる仕組み

メモリを割り当てるとき、割り当てのライブラリは領域の16バイトごとにメモリの側のタグを設定し、同じ値をポインタの上位のビット(アドレスの変換に使わない部分)に入れて返します。CPUはロードやストアのたびに、ポインタのタグとアクセス先のメモリのタグを比べ、違っていれば誤りとして扱います。領域を解放するときにタグを付け替えれば、古いポインタで解放済みの領域にアクセスする誤りを見つけられます。メモリの側のタグは、データとは別の場所に保存されます。

確率的な検出

タグは4ビットなので16通りしかなく、ランダムに選んだタグが偶然一致する確率は 1/16 です。つまり1回の誤ったアクセスを見逃す確率は約6%で、約94%は見つけられます。隣り合う領域には必ず違うタグを付けるといった割り当ての工夫で、隣へのはみ出しは確実に見つけるようにできます。タグを保存するために、メモリの容量の 4/128 = 3.125% 程度が余分に必要です。

検査のモード

誤りを見つけたときにすぐ例外を起こす同期のモードは、どの命令で誤ったかが分かるので開発や重要な処理に向いていますが、負担がやや大きくなります。誤りを記録しておき後でまとめて知らせる非同期のモードは負担が小さく、多くの機器で動かしながら誤りを集めるのに向いています。用途に応じて、開発中の検査と、出荷後の機器での攻撃の防止の両方に使われます。

MTE(メモリタギング拡張)の練習問題に挑戦

ArmのMTE(メモリタギング拡張)では、メモリの16バイトごとに4ビットのタグを付け、ポインタの上位のビットにも4ビットのタグを入れて、アクセスのたびに両者が一致するかをCPUが確かめる。解放した領域を指す古いポインタで、その領域にアクセスする誤りを考える。領域を割り当て直したときの新しいタグが16通りから一様にランダムに選ばれるとすると、タグが偶然一致して誤りを見逃す確率はどれか。

  1. A1/16(約6.3%)
  2. B1/4(25%)
  3. C15/16(約93.8%)
答えと解説を見る

正解:A. 1/16(約6.3%)

タグは4ビットなので、とりうる値は 2⁴ = 16 通りです。新しいタグが16通りから一様に選ばれるなら、古いポインタのタグと偶然一致する確率は 1/16 = 6.25%(約6.3%)で、残りの 15/16 の場合は不一致として検出されます。1回のアクセスでも約94%の確率で見つかるので、多くの機器で動かしながら誤りを見つけたり、攻撃を難しくしたりできます。割り当ての際に、隣り合う領域には必ず違うタグを付けるようにすれば、隣へのはみ出しは確実に検出できます。

よくある質問

MTEはどこで使われていますか?

2020年代半ば時点で、一部のスマートフォンのSoCなどが対応しており、OSやメモリ割り当てのライブラリで、開発用の検査や、攻撃を難しくするための有効化が進められています。対応したハードウェアとソフトウェアの両方が必要です。

MTEがあれば、メモリの誤りによる攻撃は防げますか?

多くの誤りを見つけて攻撃を難しくしますが、タグが偶然一致する可能性があり、タグの値を推測されたり漏らされたりすると効果が下がります。検出は確率的なので、決定的な保証が必要な場合は、CHERIのような仕組みや、メモリ安全な言語の使用と組み合わせます。

「MTE(メモリタギング拡張)」が出てくる問題(1問)

  1. ArmのMTE(メモリタギング拡張)では、メモリの16バイトごとに4ビットのタグを付け、ポインタの上位のビットにも4ビットのタグを入れて、アクセスのたびに両者が一致するかをCPUが確かめる。解放した領域を指す古いポインタで、その領域にアクセスする誤りを考える。領域を割り当て直したときの新しいタグが16通りから一様にランダムに選ばれるとすると、タグが偶然一致して誤りを見逃す確率はどれか。

ハードウェアセキュリティの最新動向の参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

関連する用語

ポインタ Arm CCA HBOM(ハードウェア部品表) 過渡的実行攻撃 機密コンピューティング シャドウスタック 数論変換 制御フロー完全性 DICE(Device Identifier Composition Engine) CHERI

用語集の一覧へ