缓冲区溢出仍然存在?

时间:2014-02-15 18:52:46

标签: c linux security buffer-overflow

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

  

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

他提到的原因是:

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

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

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

  4. 非可执行代码段:仅允许代码从内存的“文本”部分执行。

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

    详细解答将非常感谢!

1 个答案:

答案 0 :(得分:8)

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

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

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

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