CET & Shadow Stack

HackTricksのサポート

Control Flow Enforcement Technology (CET)

CETはハードウェアレベルで実装されたセキュリティ機能であり、**Return-Oriented Programming (ROP)Jump-Oriented Programming (JOP)**などの一般的な制御フローのハイジャック攻撃を防ぐよう設計されています。これらの攻撃タイプは、プログラムの実行フローを操作して悪意のあるコードを実行したり、悪意のないコードの断片を連結して悪意のあるアクションを実行することを目的としています。

CETにはIndirect Branch Tracking (IBT)とShadow Stackという2つの主要な機能が導入されています。

  • IBTは、間接的なジャンプやコールが有効なターゲットに行われることを確認し、間接的なブランチのための有効な宛先として明示的にマークされたものにのみジャンプできるようにします。これは、有効なターゲットをマークする新しい命令セットを使用して達成され、攻撃者が制御フローを任意の場所に逸らすのを防ぎます。

  • Shadow Stackは、リターンアドレスの整合性を提供するメカニズムです。通常のコールスタックから別個に保護された、隠されたリターンアドレスのコピーを保持します。関数がリターンするとき、リターンアドレスはシャドウスタックと照合され、攻撃者がコントロールフローをハイジャックするためにスタック上のリターンアドレスを上書きするのを防ぎます。

Shadow Stack

シャドウスタックは、リターンアドレスを保存するためだけに使用される専用スタックです。通常のスタックと一緒に動作しますが、通常のプログラムの実行から保護され、隠されているため、攻撃者が不正に干渉するのが難しくなります。シャドウスタックの主な目的は、通常のスタック上のリターンアドレスへの変更が使用される前に検出されることを確認し、効果的にROP攻撃を緩和することです。

CETとShadow Stackが攻撃を防ぐ方法

ROPおよびJOP攻撃は、アプリケーションの制御フローをハイジャックする能力に依存しており、ポインタやスタック上のリターンアドレスを上書きすることを可能にする脆弱性を利用しています。既存のコードガジェットやリターン指向プログラミングガジェットのシーケンスにフローを誘導することで、攻撃者は任意のコードを実行できます。

  • CETのIBT機能により、これらの攻撃は間接的なブランチが明示的に有効なターゲットにのみジャンプできるようになるため、大幅に困難になります。これにより、攻撃者がバイナリ全体にわたって任意のガジェットを実行することが不可能になります。

  • 一方、シャドウスタックは、攻撃者が通常のスタック上のリターンアドレスを上書きできたとしても、関数から戻る際にシャドウスタックに保存されたセキュアコピーと照合することで不整合が検出されます。アドレスが一致しない場合、プログラムは終了したり他のセキュリティ対策を取ったりして、攻撃が成功しないようにします。

HackTricksのサポート

Last updated