コントロールフロー整合性(CFI)
コントロールフロー整合性(CFI) とは何ですか?
コントロールフロー整合性(CFI)CFI はプログラムの間接呼び出しと戻りを事前計算した正当な遷移先集合に制限し、ROP や JOP による制御フロー奪取を阻止します。
CFI は Abadi、Budiu、Erlingsson、Ligatti が 2005 年に定式化した防御モデルです。コンパイラがプログラムの制御フローグラフを構築し、各間接呼び出し箇所に許可される遷移先集合を割り当て、呼び出しと戻り箇所に実行時チェックを挿入します。実装例は LLVM CFI(型ベースのバケット ID で前方エッジを保護)、Microsoft Control Flow Guard、Linux カーネル CFI(kCFI)、そして Intel CET-IBT や Arm BTI(間接分岐)とシャドースタック(戻り)などのハードウェア支援機構です。ROP/JOP のガジェットチェーンは正当なエッジ集合に違反するため CFI に阻止されます。主な限界は C/C++ における等価クラスの肥大化と非互換インタフェースとの相互運用性です。
● 例
- 01
Microsoft Control Flow Guard が Edge 内で破壊された vtable 経由の間接呼び出しを拒否する。
- 02
Linux 6.x カーネルの kCFI がドライバ脆弱性の ROP チェーンを阻止する。
● よくある質問
コントロールフロー整合性(CFI) とは何ですか?
CFI はプログラムの間接呼び出しと戻りを事前計算した正当な遷移先集合に制限し、ROP や JOP による制御フロー奪取を阻止します。 サイバーセキュリティの アプリケーションセキュリティ カテゴリに属します。
コントロールフロー整合性(CFI) とはどういう意味ですか?
CFI はプログラムの間接呼び出しと戻りを事前計算した正当な遷移先集合に制限し、ROP や JOP による制御フロー奪取を阻止します。
コントロールフロー整合性(CFI) はどのように機能しますか?
CFI は Abadi、Budiu、Erlingsson、Ligatti が 2005 年に定式化した防御モデルです。コンパイラがプログラムの制御フローグラフを構築し、各間接呼び出し箇所に許可される遷移先集合を割り当て、呼び出しと戻り箇所に実行時チェックを挿入します。実装例は LLVM CFI(型ベースのバケット ID で前方エッジを保護)、Microsoft Control Flow Guard、Linux カーネル CFI(kCFI)、そして Intel CET-IBT や Arm BTI(間接分岐)とシャドースタック(戻り)などのハードウェア支援機構です。ROP/JOP のガジェットチェーンは正当なエッジ集合に違反するため CFI に阻止されます。主な限界は C/C++ における等価クラスの肥大化と非互換インタフェースとの相互運用性です。
コントロールフロー整合性(CFI) からどのように防御しますか?
コントロールフロー整合性(CFI) に対する防御は通常、上記の定義で述べたとおり、技術的統制と運用上の実践を組み合わせます。
コントロールフロー整合性(CFI) の別名は何ですか?
一般的な別名: CFI, Control Flow Guard, kCFI。
● 関連用語
- appsec№ 1028
シャドースタック
シャドースタックは戻りアドレスの控えを保持する独立した保護スタックで、通常スタックの改ざんを CPU が検出して ROP 攻撃を阻止します。
- appsec№ 545
Intel CET
Intel CET(制御フロー強制技術)は、ハードウェアシャドースタックと間接分岐追跡(IBT)を組み合わせ、ROP/JOP/COP の悪用を阻止する CPU 機能です。
- appsec№ 925
リターン指向プログラミング(ROP)
ROP は、RET で終わる短い命令列(ガジェット)を連結して、新しいコードを注入することなく任意の計算を実現するコード再利用型のエクスプロイト手法です。
- appsec№ 064
ASLR
ASLR はコード、スタック、ヒープ、ライブラリの配置アドレスを実行ごとに乱数化し、攻撃者がエクスプロイトに使う目標アドレスを予測できないようにする緩和策です。
- appsec№ 303
DEP(データ実行防止)
DEP(NX ビット、W^X)はメモリページを実行不可と印付けし、スタックやヒープに注入されたシェルコードの実行を阻止します。
- appsec№ 670
メモリ安全性
メモリ安全性とは、プログラムが正当に確保していないメモリを読み書きしたり実行したりしないという性質で、脆弱性のクラスをまとめて排除できます。
● 関連項目
- № 569ジャンプ指向プログラミング(JOP)
- № 1095スタックカナリア
- № 581KASLR
- № 1058SMEP / SMAP
- № 671メモリ安全言語
- № 953Rust のセキュリティ特性