地址空间布局随机化(ASLR)

尽管苹果,谷歌和微软等大型公司努力消除内存破坏漏洞,但数十年来一直困扰着软件。本文介绍了有关ASLR的一些基本事实,重点是Windows实现。除了介绍ASLR在改善安全状况方面所做的工作之外,我们还旨在为防御者提供有关如何提高其软件安全性的建议,并使研究人员对ASLR的工作原理和研究其局限性的想法有更多的了解。

当程序错误地将攻击者控制的数据写入目标内存区域之外或目标内存范围之外时,就会发生内存损坏漏洞。这可能会使程序崩溃,或更糟糕的是,攻击者可以完全控制系统。由于很难找到这些错误,并且只有一个会危害系统,因此安全专家设计了故障保护机制,以阻止软件利用并限制如果利用了内存破坏错误时所造成的损害。不幸的是,没有什么是完美的,但是地址空间布局随机化(ASLR)是可用的最佳缓解措施之一。

ASLR打破了开发人员可以在运行时确定程序和库在内存中的位置的假设。一个常见的示例是面向返回的编程(ROP)中使用的小工具的位置,该位置通常用于抵御数据执行保护(DEP)的防御。ASLR混合了易受攻击进程的地址空间(主程序,其动态库,堆栈和堆,内存映射文件等),因此必须针对受害进程的地址空间唯一地定制利用有效负载当时的布局。