位址空间配置随机载入

科技工作者之家 2020-11-17

在计算机科学中,地址空间配置随机加载(英语:Address space layout randomization,缩写ASLR,又称地址空间配置随机化地址空间布局随机化)是一种防范内存损坏漏洞被利用的计算机安全技术。ASLR通过随机放置进程关键数据区域的地址空间来防止攻击者能可靠地跳转到内存的特定位置来利用函数。现代操作系统一般都加设这一机制,以防范恶意程序对已知地址进行Return-to-libc攻击。

历史Linux PaX项目首先创造了术语“ASLR”,并于2001年7月发布了ASLR的第一个设计和实现,作为Linux内核的补丁。它被视为一个完整的实现,自2002年10月以来也提供了内核堆栈随机化的补丁。

默认情况下支持ASLR的第一个主流操作系统是2003年的OpenBSD版本3.4,其次是2005年的Linux。

优点地址空间随机化通过使攻击者更难以预测目标地址来阻碍某些类型的安全攻击。例如,试图执行返回libc攻击的攻击者必须找到要执行的代码,而尝试执行堆栈注入的shellcode的其他攻击者必须首先找到堆栈。在这两种情况下,系统都会掩盖来自攻击者的相关内存地址。必须猜测这些值,并且由于应用程序崩溃,通常无法恢复错误的猜测。

效用地址空间布局随机化基于攻击者猜测随机放置区域的位置的低机会。通过增加搜索空间来增加安全性。因此,当随机偏移中存在更多熵时,地址空间随机化更有效。通过增加随机化发生的虚拟存储区空间量或减少随机化发生的时间来增加熵。该周期通常尽可能小,因此大多数系统必须增加VMA空间随机化。

为了打败随机化,攻击者必须成功猜出他们想要攻击的所有区域的位置。对于堆栈和堆等数据区域,可以加载自定义代码或有用数据,可以使用NOP幻灯片代码或重复复制数据来攻击多个状态。如果该区域被随机化为少数几个值中的一个,则允许攻击成功。相反,需要准确发现诸如库库和主可执行文件之类的代码区域。这些区域通常是混合的,例如堆栈框架被注入堆栈并返回库。

作用地址空间配置随机加载利用随机方式配置数据地址空间,使某些敏感数据(例如操作系统内核)配置到一个恶意程序无法事先获知的地址,令攻击者难以进行攻击。

实现大部分主流的操作系统已经实现了ASLR。

OpenBSDOpenBSD作为一个主流的操作系统,已在ASLR推出2年后支持,并在默认情况下是打开的。

LinuxLinux已在内核版本2.6.12中添加ASLR。自2005年6月发布的内核版本2.6.12以来,Linux内核默认启用弱形式的ASLR。Linux内核的PaX和Exec Shield补丁集提供了更完整的实现。 Linux的Exec Shield补丁在16字节的周期内提供19位堆栈熵,在1页4096字节的周期内提供8位mmap基本随机化。这将堆栈基础放置在8 MB宽的区域中,包含524 288个可能的位置,mmap基础在1 MB宽的区域中,包含256个可能的位置。

与位置无关的可执行文件(PIE)实现了主可执行二进制文件的随机基址,并且自2003年以来一直存在。它为主可执行文件提供与用于共享库相同的地址随机性。 PIE功能仅用于面向守护进程的网络- PIE功能不能与同一可执行文件的预链接功能一起使用。预链接工具在预链接时而不是运行时实现随机化,因为通过设计prelink旨在处理动态链接器之前重定位库,这允许重定位在程序的多次运行中发生一次。结果,真正的地址空间随机化将破坏预链接的目的。

内核地址空间布局随机化(KASLR),通过随机化内核代码在引导时放置的位置,支持地址空间随机化以运行Linux内核映像被合并到内核版本3.14中的Linux内核主线上,发布于30 2014年3月。编译时,可以通过将nokaslr指定为内核的引导参数之一来在引导时禁用它。

x86处理器中存在一些可能泄漏内核地址的旁路攻击。在2017年底,开发了内核页表隔离(KPTI aka KAISER)来抵御这些攻击。

WindowsWindows Server 2008,Windows 7,Windows Vista,Windows Server 2008 R2,默认情况下启用ASLR,但它仅适用于动态链接库和可执行文件。

Mac OS XApple在Mac OS X Leopard 10.5(2007年十月发行)中某些库导入了随机地址偏移,但其实现并没有提供ASLR所定义的完整保护能力。而Mac OS X Lion 10.7则对所有的应用程序均提供了ASLR支持。Apple宣称为应用程序改善了这项技术的支持,能让32及64位的应用程序避开更多此类攻击。从OS X Mountain Lion 10.8开始,核心及核心扩充(kext)与zones在系统启动时也会随机配置1。

iOSApple在iOS 4.3内导入了ASLR。

在Mac OS X Leopard 10.5(2007年10月发布)中,Apple为系统库引入了随机化。

在Mac OS X Lion 10.7(2011年7月发布)中,Apple将其实现扩展到涵盖所有应用程序,并声明“地址空间布局随机化(ASLR)已针对所有应用程序进行了改进。现在可用于32位应用程序(如堆 内存保护),使64位和32位应用程序更能抵御攻击。

从OS X Mountain Lion 10.8(2012年7月发布)及之后,整个系统(包括内核以及kexts和zone)在系统启动期间随机重新定位。

AndroidAndroid 4.0提供地址空间配置随机加载(ASLR),以帮助保护系统和第三方应用程序免受由于内存管理问题的攻击,在Android 4.1中加入地址无关代码(position-independent code)的支持。Android 4.0 Ice Cream Sandwich提供地址空间布局随机化(ASLR),以帮助保护系统和第三方应用程序免受内存管理问题的攻击。 Android 4.1中添加了与位置无关的可执行支持。Android 5.0放弃了非PIE支持,并要求所有动态链接的二进制文件与位置无关。2015年10月26日,Android开源项目接受了库加载顺序随机化,并包含在Android 7.0版本中。

开发利用分支目标缓冲区的侧通道攻击被证明可以绕过ASLR保护。2017年,一场名为“ASLR⊕Cache”的攻击被证明可以在使用JavaScript的网络浏览器中击败ASLR。

本词条内容贡献者为:

曹慧慧 - 副教授 - 中国矿业大学

科技工作者之家

科技工作者之家APP是专注科技人才,知识分享与人才交流的服务平台。