シャドウスタックとは

しゃどうすたっく

関数を呼ぶときに戻りアドレスの複製を、通常の書き込みでは変更できない別のスタックにも置き、関数から戻るときに通常のスタックの値と比べて、戻りアドレスの改ざんを見つける仕組み。一致しなければ例外を起こして実行を止める。IntelのCET(制御フロー強制技術)などでハードウェアが支え、スタックのバッファオーバーフローを使うROPのような攻撃を難しくする。

「シャドウスタック」は、1分野の2問の練習問題に出てきます(ハードウェアセキュリティの最新動向など)。

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

シャドウスタックの練習問題に挑戦

IntelのCET(制御フロー強制技術)などで採用されているハードウェアのシャドウスタックの説明として、正しいものはどれか。

  1. Aスタックの内容を一定の時間ごとに不揮発性のメモリに保存しておき、プログラムが異常終了したときに、その内容から実行を再開する
  2. B関数の局所変数を、通常のスタックとは別の高速なメモリに置き、キャッシュのミスを減らして関数の呼び出しを速くする
  3. C関数を呼ぶときに戻りアドレスの複製を、通常の書き込みでは変えられない別のスタックにも置き、戻るときに両者を比べる
答えと解説を見る

正解:C. 関数を呼ぶときに戻りアドレスの複製を、通常の書き込みでは変えられない別のスタックにも置き、戻るときに両者を比べる

スタックのバッファオーバーフローなどで戻りアドレスが書き換えられると、関数から戻るときに、攻撃者が選んだ場所に実行が移ってしまいます。シャドウスタックでは、call命令が戻りアドレスを通常のスタックとシャドウスタックの両方に積み、ret命令が両者を比べます。シャドウスタックのページは通常のストア命令では書き込めない特別な種類のページなので、通常のスタックを書き換えた攻撃者も複製までは変えられず、一致しなければ例外が起きて実行が止まります。

解説の中の「シャドウスタック」

「シャドウスタック」が出てくる問題(2問)

  1. IntelのCET(制御フロー強制技術)などで採用されているハードウェアのシャドウスタックの説明として、正しいものはどれか。
  2. 制御フロー完全性をハードウェアで支える機能について、関数からの戻りを守るものと、関数ポインタなどによる間接的な呼び出しやジャンプを守るものの組み合わせとして、正しいものはどれか。

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

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

関連する用語

バッファオーバーフロー 制御フロー完全性 関数ポインタ ポインタ認証(PAC) KPTI Meltdown IOMMU DMA(ダイレクトメモリアクセス) Arm CCA HBOM(ハードウェア部品表)

用語集の一覧へ