このサイクルを何度も繰り返すことで、クラッシュそのものを“制御フローのステップ”として利用できるようになります。
従来の攻撃(Return‑Oriented Programmingなど)は、関数のリターンアドレスを書き換えて既存コードをつなぎ合わせます。
Intel CETは、CPUレベルで制御フローの整合性を守るための仕組みです。
主に以下のような攻撃を防ぐ目的があります。
CETは次のような仕組みで保護を行います。
しかしCETが想定しているのは、プログラム内部の不正な制御フロー遷移です。
SFOPはそこを回避し、OSが正当に行うシグナル処理を利用するという別ルートを使います。
SFOPの核心は、シグナル配送そのものが合法的な制御フロー遷移であるという点です。
攻撃の大まかな流れは以下の通りです。
これにより
という連鎖が作られます。
つまり各シグナルハンドラが攻撃チェーンの1ステップになるわけです。
Linuxでは、プログラムがクラッシュした際にSIGSEGVハンドラを登録しておくことで、次のような処理を行えます。
SFOPはこの仕組みを逆手に取り、
というループを作ります。
研究では、この攻撃に対抗するためにいくつかの対策が議論されています。
一つの方向性は、Linuxカーネル側でシグナル処理の挙動を強化することです。
もう一つの提案が、PLaTypusという研究段階の防御レイヤーです。
PLaTypusは次のような対策を行います。
SFOPは、現代のセキュリティ設計に重要な教訓を示しています。
それは、
**「ハードウェア防御だけでは不十分で、OSの挙動も含めたシステム全体を守る必要がある」**という点です。
CETのような高度な防御があっても、攻撃者は
といった別のレイヤーを足がかりにします。
こうした研究は、CPU・OS・アプリケーションを含むスタック全体の防御設計を見直すきっかけになると考えられています。
Comments
0 comments