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

栈金丝雀

栈金丝雀 是什么?

栈金丝雀栈金丝雀是函数局部缓冲区与保存的返回地址之间放置的秘密值,用于在攻击者劫持控制流之前检测栈溢出。


栈金丝雀由 Crispin Cowan 等人在 1998 年的 StackGuard 中提出,是在函数栈帧中位于局部变量与保存的返回地址之间的随机值。编译器在函数入口插入设置金丝雀的代码,出口处插入验证代码;一旦发现被篡改,程序立即终止,避免使用已损坏的返回地址。现代工具链分别以 -fstack-protector 或 /GS 提供该特性,通常使用进程级随机值并添加终止字节(常为 0x00)以阻止包含金丝雀的溢出 payload。金丝雀是 ASLR、DEP、CFI 和内存安全语言的补充而非替代。

示例

  1. 01

    GCC 的 -fstack-protector-strong 为含数组的函数插入金丝雀。

  2. 02

    MSVC 的 /GS 选项检测基于 strcpy 的溢出。

常见问题

栈金丝雀 是什么?

栈金丝雀是函数局部缓冲区与保存的返回地址之间放置的秘密值,用于在攻击者劫持控制流之前检测栈溢出。 它属于网络安全的 应用安全 分类。

栈金丝雀 是什么意思?

栈金丝雀是函数局部缓冲区与保存的返回地址之间放置的秘密值,用于在攻击者劫持控制流之前检测栈溢出。

栈金丝雀 是如何工作的?

栈金丝雀由 Crispin Cowan 等人在 1998 年的 StackGuard 中提出,是在函数栈帧中位于局部变量与保存的返回地址之间的随机值。编译器在函数入口插入设置金丝雀的代码,出口处插入验证代码;一旦发现被篡改,程序立即终止,避免使用已损坏的返回地址。现代工具链分别以 -fstack-protector 或 /GS 提供该特性,通常使用进程级随机值并添加终止字节(常为 0x00)以阻止包含金丝雀的溢出 payload。金丝雀是 ASLR、DEP、CFI 和内存安全语言的补充而非替代。

如何防御 栈金丝雀?

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

栈金丝雀 还有哪些其他名称?

常见的别称包括: StackGuard, 栈饼干, GS cookie。

相关术语

参见