Skip to content
Vol. 1 · Ed. 2026
CyberGlossary
Entry № 217

控制流完整性(CFI)

控制流完整性(CFI) 是什么?

控制流完整性(CFI)控制流完整性(CFI)将程序的间接调用和返回限制在预先计算的合法目标集合内,阻断 ROP 与 JOP 等控制流劫持利用。


CFI 由 Abadi、Budiu、Erlingsson 与 Ligatti 在 2005 年正式提出。编译器构建程序的控制流图,为每个间接调用站点分配允许的目标集合,并在调用与返回处插入运行时检查。常见实现包括 LLVM CFI(基于类型分桶的前向边)、Microsoft Control Flow Guard、Linux 内核 CFI(kCFI),以及硬件辅助方案如 Intel CET-IBT 与 Arm BTI(间接分支)并配合影子栈处理返回。CFI 让 ROP/JOP 的 gadget 链违反合法边集而被拦截。当前主要限制在于 C/C++ 中等价类过大及与不兼容接口的互操作问题。

示例

  1. 01

    Microsoft Control Flow Guard 在 Edge 中拦截了通过损坏 vtable 进行的间接调用。

  2. 02

    Linux 6.x 内核的 kCFI 阻止了驱动漏洞中的 ROP 链。

常见问题

控制流完整性(CFI) 是什么?

控制流完整性(CFI)将程序的间接调用和返回限制在预先计算的合法目标集合内,阻断 ROP 与 JOP 等控制流劫持利用。 它属于网络安全的 应用安全 分类。

控制流完整性(CFI) 是什么意思?

控制流完整性(CFI)将程序的间接调用和返回限制在预先计算的合法目标集合内,阻断 ROP 与 JOP 等控制流劫持利用。

控制流完整性(CFI) 是如何工作的?

CFI 由 Abadi、Budiu、Erlingsson 与 Ligatti 在 2005 年正式提出。编译器构建程序的控制流图,为每个间接调用站点分配允许的目标集合,并在调用与返回处插入运行时检查。常见实现包括 LLVM CFI(基于类型分桶的前向边)、Microsoft Control Flow Guard、Linux 内核 CFI(kCFI),以及硬件辅助方案如 Intel CET-IBT 与 Arm BTI(间接分支)并配合影子栈处理返回。CFI 让 ROP/JOP 的 gadget 链违反合法边集而被拦截。当前主要限制在于 C/C++ 中等价类过大及与不兼容接口的互操作问题。

如何防御 控制流完整性(CFI)?

针对 控制流完整性(CFI) 的防御通常结合技术控制与运营实践,详见上方完整定义。

控制流完整性(CFI) 还有哪些其他名称?

常见的别称包括: CFI, Control Flow Guard, kCFI。

相关术语

参见