缓冲区溢出仍然存在?

Max*_* S. 2 c linux security buffer-overflow

我正在观看有关缓冲区溢出的大学讲座,教授最后说道

即使我们能够使用漏洞利用代码填充缓冲区并跳转到该代码,我们仍然无法执行它.

他提到的原因是:

  1. 程序员避免使用导致溢出的函数.

  2. 随机堆栈偏移:在程序开始时,在堆栈上分配随机的空间量,使得难以预测插入代码的开始.

  3. 使用技术来检测堆栈损坏.

  4. 不可执行的代码段:仅允许代码从内存的"文本"部分执行.

现在我想知道,现在缓冲区溢出攻击是否仍然存在?或者它已经过时了.

详细解答将非常感谢!

Mic*_*kis 9

  1. 不是我们所有人.每天都有一群新的程序员.我们的strcpy坏集体知识是否神奇地传播给他们?我不这么认为.

  2. 很难,是的.不可能,没有.任何可以变成任意读取的漏洞都可以轻而易举地破坏这种保护.

  3. 实际上,我们可以在某些情况下检测堆栈损坏.例如,Canaries可能会被覆盖,它们的值依赖于编译器,并且它们可能无法防止各种堆栈损坏(例如GCC -fstack-protector-strong防止EIP覆盖,但不防止其他类型的溢出)

  4. W ^ X内存是现实,但有多少操作系统已经将它用于堆栈?这对你周末来说是一个有趣的小研究项目.:)此外,如果你研究返回导向编程(ROP)技术(返回libc是它的一个应用程序),你会发现它也可以被绕过.

  • 4.具有适当内核配置的Linux和启用了DEP的Windows(至少自Wimdows 7起默认).所以几乎所有的现代操作系统.返回libc/ROP已经存在了很长时间才能解决它.我认为OS X在这方面远远落后,但我不确定 (2认同)