与 execstack 链接的 fstack-protector 是否可以防止缓冲区溢出攻击?

Does fstack-protector linked with execstack protect against a buffer overflow attack?

我无法理解这两个到底是做什么的。以及打开时的阻止。

谢谢

fstack-protector 是一种保护,它会在 return 您的函数调用地址

之前放置一些称为 stack canary 的随机内容

在return之前会检查随机内容是否与return之前相同,否则退出。

因为缓冲区溢出攻击是试图覆盖函数的return地址,所以它必须覆盖堆栈金丝雀。

但是stack canary是随机生成的,所以可以用来防止覆盖return地址。

缓冲区溢出攻击也带有shell代码。

覆盖 return 地址并指向您的 shell 代码,然后生成 shell。

Execstack 是一种防止这种情况发生的保护措施。

输入缓冲区在堆栈上,您的shell代码也在堆栈上。

但是 execstack 使堆栈的内存区域不可执行。

当程序return到shell代码时,会发现此内存区域不可执行。

会造成分段错误