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

影子栈

影子栈 是什么?

影子栈影子栈是一条独立且受保护的栈,用于保存返回地址副本,使 CPU 能在正常栈被篡改时检测并阻止 ROP 攻击。


影子栈与传统调用栈并行运行:每次函数调用都会将返回地址同时压入两条栈,返回时比较两者是否一致,不一致则触发陷阱并终止进程,以避免使用被篡改的返回地址。该机制由 CFI 研究论文推广,如今在硬件中分别由 Intel CET 影子栈和 Arm v8.5-A Guarded Control Stack(GCS)实现。也存在纯软件实现(LLVM SafeStack、clang -fsanitize=safe-stack),但性能与隔离成本较高。影子栈解决了 CFI 的后向边问题,前向边的间接调用仍需 CFI/IBT 等机制配合。

示例

  1. 01

    Windows 11 在支持 CET 的 CPU 上强制启用用户态影子栈。

  2. 02

    Arm GCS 检测到栈缓冲区溢出篡改了保存的 LR。

常见问题

影子栈 是什么?

影子栈是一条独立且受保护的栈,用于保存返回地址副本,使 CPU 能在正常栈被篡改时检测并阻止 ROP 攻击。 它属于网络安全的 应用安全 分类。

影子栈 是什么意思?

影子栈是一条独立且受保护的栈,用于保存返回地址副本,使 CPU 能在正常栈被篡改时检测并阻止 ROP 攻击。

影子栈 是如何工作的?

影子栈与传统调用栈并行运行:每次函数调用都会将返回地址同时压入两条栈,返回时比较两者是否一致,不一致则触发陷阱并终止进程,以避免使用被篡改的返回地址。该机制由 CFI 研究论文推广,如今在硬件中分别由 Intel CET 影子栈和 Arm v8.5-A Guarded Control Stack(GCS)实现。也存在纯软件实现(LLVM SafeStack、clang -fsanitize=safe-stack),但性能与隔离成本较高。影子栈解决了 CFI 的后向边问题,前向边的间接调用仍需 CFI/IBT 等机制配合。

如何防御 影子栈?

针对 影子栈 的防御通常结合技术控制与运营实践,详见上方完整定义。

影子栈 还有哪些其他名称?

常见的别称包括: 返回栈, 安全栈, GCS。

相关术语