最近,我遇到了一篇关于Windows 7的新的“防御性增强”的微软文章。
文章接着说,“这些防御系统的...some位于核心操作系统中,而MicrosoftVisualC++编译器提供了其他的”,但没有解释这些策略如何真正提高安全性。
如果有的话,谁知道为什么内存随机化会增加安全性呢?其他平台和编译器是否采用类似的策略?
发布于 2010-04-21 19:34:32
它增加了安全性,因为它很难预测内存中的东西在哪里。相当多的缓冲区溢出利用了工作,例如,将已知例程的地址放入堆栈,然后返回到它。如果不知道相关例程的地址,就很难做到这一点。
据我所知,OpenBSD是第一个这么做的,至少在相当知名的个人电脑OSes中是如此。
发布于 2010-04-21 19:33:06
这使得像返回libc这样的攻击(或者在后两种情况下返回到用户提供的数据缓冲区)更加困难。是的,它可以在Linux、BSD和Mac中使用。正如您所预期的,操作系统的细节各不相同。有关导论,请参阅维基百科。
发布于 2010-04-21 20:14:23
通过随机化堆栈,可以使普通的缓冲区溢出攻击(如Aleph One为了好玩而捣毁了那堆东西 )成为不可能的。之所以如此,是因为攻击依赖于将少量可执行代码放入内存中可预测的位置,将壳代码放入可预测的位置。函数堆栈帧已损坏,其返回地址被攻击者选择的值覆盖。当损坏的函数返回时,执行流会移动到攻击者的外壳代码。传统上,这个内存地址是如此可预测,以至于在所有运行相同版本软件的机器上都是相同的。
尽管在Windows 7上实现了高级内存保护,但仍然可以执行远程代码。最近在CanSecWest,一台运行Windows7和IE8的机器在几秒钟内被黑客入侵。下面是一个现代内存损坏攻击的技术描述,它利用一个悬挂的指针和一个堆溢出。
https://stackoverflow.com/questions/2685977
复制相似问题