【问题标题】:does buffer overflow still exist?缓冲区溢出是否仍然存在?
【发布时间】:2014-02-15 18:52:46
【问题描述】:

我正在看一个关于缓冲区溢出的大学讲座,结果教授说

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

他提到的原因是:

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

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

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

  4. 不可执行的代码段:只允许代码从内存的“文本”段执行。

现在我想知道,现在还存在缓冲区溢出攻击吗?或者它已经过时了。

非常感谢详细的回答!

【问题讨论】:

  • 问题会一直存在。
  • 1 显然是错误的。他们应该,但不是所有应该。 2、3 和 4 取决于操作系统和架构。
  • 利用起来比较困难,但是问题是存在的。只是因为它是一个老问题,它不会随着时间的推移神奇地消失。
  • (3) 在大多数实现中非常不可靠。 (4) 是不完整的:这个想法是内存部分要么是可执行的,要么是可写的,但绝不是两者兼而有之。
  • 不可执行的堆栈并不能拯救你。请参阅返回到 libc/ROP 样式的技术。随机库地址有助于缓解这种情况,但通常有足够多的人在触发堆栈或基于堆的缓冲区溢出之前找到使用不同漏洞预测这些地址的方法

标签: c linux security buffer-overflow


【解决方案1】:
  1. 不是我们所有人。每天都有很多新程序员。我们关于strcpy 不好的集体知识会神奇地传播给他们吗?我不这么认为。

  2. 困难,是的。不可能,不。任何可以转化为任意读取的漏洞都可以轻而易举地破坏此类保护。

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

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

【讨论】:

  • 4.具有正确内核配置的 Linux 和启用了 DEP 的 Windows(至少从 Wimdows 7 开始默认)。所以几乎所有现代操作系统。 Return-to-libc/ROP 已经存在很长时间来解决它。我认为 OS X 在这方面远远落后,但我不确定
  • 更准确地说,硬件 NX 在 Linux 中得到支持,因为它可用并且 exec shield、pax 等可以模拟它,即使硬件不支持它(例如在 32 位 Intel 上)跨度>
猜你喜欢
  • 2013-08-31
  • 2011-02-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-16
  • 1970-01-01
  • 2010-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多