它使攻击像 返回libc (或者在后两种情况下返回用户提供的数据缓冲区)要困难得多。是的,它可以在Linux,BSD和Mac OS中使用。正如您所料,详细信息因操作系统而异。请参阅Wikipedia 一个介绍 。
通过随机化堆栈,你可以像使用香草缓冲区溢出攻击一样 Aleph One砸碎堆栈以获得乐趣 不可能。之所以是因为攻击依赖于放置一小部分可执行代码 的shellcode 进入记忆中的可预测位置。函数堆栈框架已损坏,其返回地址将被攻击者选择的值覆盖。当损坏的函数返回时,执行流程转移到攻击者的shellcode。传统上,这个内存地址是如此可预测,以至于它在运行相同版本软件的所有机器上都是相同的。
尽管在Windows 7上实现了高级内存保护,但仍然可以执行远程代码。最近在CanSecWest,一台运行Windows 7和IE 8的机器在几秒钟内被黑了。这里有一个 技术说明 使用悬空指针和堆溢出的现代内存损坏攻击。
它通过难以预测内存中的某些内容来提高安全性。相当多的缓冲区溢出漏洞通过将(例如)已知例程的地址放在堆栈上然后返回到它来工作。在不知道相关例程的地址的情况下,这样做要困难得多。
据我所知,OpenBSD是第一个这样做的,至少在众所周知的PC操作系统中。