0

我正在研究各种缓冲区/堆/堆栈保护技术,例如 PAX、DEP、NX、CANARIES 等

还有一个新的 SMEP - http://vulnfactory.org/blog/2011/06/05/smep-what-is-it-and-how-to-beat-it-on-linux/

假设我在最新的主流处理器上使用最新的内核假设我使用各种编译器保护重新编译所有应用程序假设我运行良好的 DEP、ASLR NX 位任何保护

可以说大多数缓冲区溢出攻击都会失败吗?这已经为未来的系统解决了吗?

作为推论,是否可以说当前实施的 Win7 系统极易受到 ROT 和其他技术的攻击,尤其是在 32 位应用程序上?

ps 我故意不在这里讨论“托管代码是安全的”参数

[免责声明] 我不提倡草率的编码。我意识到还有许多其他攻击。我知道现有系统的数量远远超过“理想化”的安全配置

4

2 回答 2

1

不,缓冲区溢出不是一个已解决的问题,至少在非托管代码中是这样。

您列出的所有技术(DEP/NX、ASLR、Canaries、SMEP)的基本问题是它们发生在事实之后:它们无法解决缓冲区溢出问题,因为它们不能防止根本原因 - 缓冲区溢出和内存损坏已经发生了

所有这些方案都是简单的“好”但不可靠的启发式方法,试图在损坏发生之后但在它成为有效利用之前检测故障,或者只是让设计一个可靠的有效利用变得太难。

例如,Windows Vista 和 7 上的 DEP、ASLR 和金丝雀可以通过 ROT 和其他技术绕过,因此只会提高创建有效漏洞利用的难度。但是,难度增加是相当显着的。这就是技术的重点。

如果您有兴趣通过防止原始缓冲区损坏从根本上解决问题,我认为这将是最有成效的,但它可能会让我们回到托管代码的讨论......

于 2011-07-19T04:32:57.210 回答
0

如果所有这些技术都启用并且强大的编译器检查到位,那么绕过当前保护的大多数方法都将被禁用,但正如那篇 smep 文章指出的那样,它只会提高攻击的门槛,而新的攻击将需要额外的检查和复杂性。对于您所需的“大多数”条件,最好的选择是最终漏洞利用所需的复杂性将无法适应可用空间,因为越来越多的区域和空间受到保护,但我们还没有。

于 2011-07-18T10:58:27.547 回答