ポインタ認証(PAC)とは

ぽいんたにんしょう

Armv8.3-Aで追加された仕組み。ポインタの値と文脈の値から、CPUの中の鍵で短い認証コード(PAC)を計算して、ポインタの使っていない上位のビットに入れ、使う直前に専用の命令で確かめる。合わなければ使えないアドレスに変えるので、戻りアドレスや関数ポインタを書き換える攻撃を難しくする。認証コードの長さは仮想アドレスの幅などの設定で決まる。

「ポインタ認証(PAC)」は、1分野の2問の練習問題に出てきます(ハードウェアセキュリティの最新動向など)。

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

ポインタ認証(PAC)の練習問題に挑戦

Armのポインタ認証(PAC)の仕組みとして、正しいものはどれか。

  1. Aポインタを使うたびに、OSにシステムコールで問い合わせて、そのポインタが正しい値かどうかを確かめてもらう
  2. Bポインタの値と文脈の値から、CPUの中の鍵で短い認証コードを計算してポインタの上位のビットに入れ、使う前に確かめる
  3. CポインタのすべてのビットをCPUの中の鍵で暗号化してからメモリに保存し、読み出すたびにCPUの中で復号してから使う
答えと解説を見る

正解:B. ポインタの値と文脈の値から、CPUの中の鍵で短い認証コードを計算してポインタの上位のビットに入れ、使う前に確かめる

64ビットのポインタのうち、仮想アドレスに使わない上位のビットに、ポインタの値と文脈の値(例えばスタックポインタ)からCPUの中の鍵で計算した認証コードを入れます。関数の戻りアドレスなどを使う直前に、専用の命令で計算し直して比べ、合わなければ使えないアドレスに変えるので、スタックの戻りアドレスを書き換える攻撃(ROPなど)が難しくなります。鍵はソフトウェアから読めないので、攻撃者は書き換えたポインタに合う認証コードを作れません。ただし、認証コードの長さは仮想アドレスの幅などの設定で決まり、多くの場合十数ビット以下と短いので、何度も推測できる状況では、偶然一致する確率を考える必要があります。

解説の中の「ポインタ認証(PAC)」

「ポインタ認証(PAC)」が出てくる問題(2問)

  1. Armのポインタ認証(PAC)の仕組みとして、正しいものはどれか。
  2. 制御フロー完全性をハードウェアで支える機能について、関数からの戻りを守るものと、関数ポインタなどによる間接的な呼び出しやジャンプを守るものの組み合わせとして、正しいものはどれか。

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

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

関連する用語

ポインタ スタックポインタ 制御フロー完全性 関数ポインタ シャドウスタック KPTI Meltdown IOMMU DMA(ダイレクトメモリアクセス) Arm CCA

用語集の一覧へ