ハードウェアセキュリティの最新動向
IntelのCET(制御フロー強制技術)などで採用されているハードウェアのシャドウスタックの説明として、正しいものはどれか。
- Aスタックの内容を一定の時間ごとに不揮発性のメモリに保存しておき、プログラムが異常終了したときに、その内容から実行を再開する
- B関数の局所変数を、通常のスタックとは別の高速なメモリに置き、キャッシュのミスを減らして関数の呼び出しを速くする
- C関数を呼ぶときに戻りアドレスの複製を、通常の書き込みでは変えられない別のスタックにも置き、戻るときに両者を比べる
答えと解説を見る
正解:C. 関数を呼ぶときに戻りアドレスの複製を、通常の書き込みでは変えられない別のスタックにも置き、戻るときに両者を比べる
スタックのバッファオーバーフローなどで戻りアドレスが書き換えられると、関数から戻るときに、攻撃者が選んだ場所に実行が移ってしまいます。シャドウスタックでは、call命令が戻りアドレスを通常のスタックとシャドウスタックの両方に積み、ret命令が両者を比べます。シャドウスタックのページは通常のストア命令では書き込めない特別な種類のページなので、通常のスタックを書き換えた攻撃者も複製までは変えられず、一致しなければ例外が起きて実行が止まります。
- A. 異常終了から復旧するための仕組みではありません。
- B. 局所変数を移して速くする仕組みではなく、戻りアドレスを守る仕組みです。
- C. 正しい。戻りアドレスの改ざんを、戻る直前に見つけます。