地址空间配置随机加载(Address space layout randomization,缩写ASLR,又称地址空间配置随机化、地址空间布局随机化)是一种防范内存损坏漏洞被利用的计算机安全技术。详细一点,就是地址空间配置随机加载是一种针对缓冲区溢出的安全保护技术,通过对堆、栈、共享库映射等线性区布局的随机化,通过增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的目的的一种技术。
所以对于攻击者来说,绕过地址空间布局随机化的防御体系是他们执行所有内存攻击漏洞的先决条件。这意味着,关于攻破地址空间布局随机化的研究话题也是一个比较热门的领域。另外根据我的推测,对地址空间布局的攻击将来也会变得异常复杂。
本文会介绍有关地址空间布局的一些基本事实,重点是Windows实现。除了介绍地址空间布局在改善安全状况方面所做的贡献之外,我们还旨在为防御者提供有关如何改善其程序安全性的建议,并为研究人员提供更多有关地址空间布局的工作原理和调查其局限性的想法的见解。
当程序错误地将攻击者控制的数据写入目标内存区域或目标内存范围之外时,就会发生内存损坏漏洞(Memory corruption vulnerability)。奇热这可能会使程序崩溃,更糟糕的是,攻击者可以完全控制系统。尽管苹果,谷歌和微软等大型公司都努力在缓解内存破坏漏洞,但数十年来这个攻击一直在困扰着它们。
由于这些漏洞很难被发现,而且一旦发生就会危及整个操作系统,所以安全专业人员设计了一种漏洞安全保护机制,以阻止程序被利用。另外使用这种漏洞安全保护机制,如果发生内存损坏漏洞时,就可以限制所造成的损害。本文将介绍一种被称为“silver bullet”的方法,防护人员使用这种方法可以让漏洞利用变得非常困难,该防护机制可以将错误的代码留在原处,从而为开发人员提供了用内存安全的语言修复或重写代码所需的时间。不幸的是,没有什么防护方法是完美的,但是地址空间布局随机化是可用的最佳缓解措施之一。
地址空间布局随机化的工作方式打破了开发人员在运行时对程序和库位于内存中的位置所做的假设,一个常见的示例是面向返回的编程(ROP)中使用的小工具的位置,该位置通常用于抵御数据执行保护(DEP)的防御。地址空间布局随机化混合了易受攻击进程的地址空间(主程序、其动态库、堆栈和堆、内存映射文件等),因此必须针对受害进