我最近看到了一篇微软文章,宣传Windows 7的新“防御增强”功能,具体包括:
- 地址空间布局随机化(ASLR)
- 堆随机化
- 栈随机化
文章继续说:“...其中一些防御措施位于核心操作系统中,而Microsoft Visual C++编译器提供其他防御措施”,但没有解释这些策略如何实际增加安全性。
有人知道为什么内存随机化会增加安全性吗?其他平台和编译器是否采用类似的策略?
我最近看到了一篇微软文章,宣传Windows 7的新“防御增强”功能,具体包括:
文章继续说:“...其中一些防御措施位于核心操作系统中,而Microsoft Visual C++编译器提供其他防御措施”,但没有解释这些策略如何实际增加安全性。
有人知道为什么内存随机化会增加安全性吗?其他平台和编译器是否采用类似的策略?
它通过使内存中的位置难以预测来增加安全性。相当多的缓冲区溢出利用是将(例如)已知例程的地址放在堆栈上,然后返回该地址。如果不知道相关例程的地址,这样做就更加困难。
据我所知,在PC的众所周知操作系统中,OpenBSD是最早采用这种技术的之一。