26-2

讲讲 Linux 平台的漏洞缓解机制

1. 堆栈保护(Stack Smashing Protection, SSP)

这是最基础,也是最重要的堆栈溢出缓解机制

  • 原理: 在函数调用时,编译器会在栈上的局部变量和返回地址之间插入一个随机的“金丝雀值”(Canary Value)
  • 工作方式:
    • 函数进入时,金丝雀值被推入栈中
    • 函数返回前,程序会检查这个金丝雀值是否被改变
    • 如果金丝雀值被修改,说明发生了缓冲区溢出,程序会立即终止(通常会调用 __stack_chk_fail 函数),而不是让攻击者控制程序流
  • 局限性: 攻击者可以通过覆盖低地址的变量或利用其他漏洞(如格式化字符串漏洞)来泄露金丝雀值,从而绕过此保护