什么是ASLR,它如何保护您的计算机安全?

地址空间布局随机化(ASLR)是操作系统中使用的一种安全技术,于2001年首次实施。所有主要操作系统(iOS、Android、Windows、MacOS和Linux)的当前版本都具有ASLR保护功能。但在过去一周的时间里,发现了一种绕过ASLR的新方法。那么,你应该担心吗?

对于那些没有低级编程背景的人来说,ASLR可能会令人困惑。要了解它,您必须首先了解虚拟内存。

什么是虚拟内存?

虚拟内存是一种具有许多优点的内存管理技术,但创建它主要是为了简化编程。假设您在一台内存为4 GB的计算机上打开了Google Chrome、Microsoft Word和其他几个程序。作为一个整体,这台计算机上的程序使用的RAM远远超过4 GB。然而,并不是所有的程序都将始终处于活动状态,或者需要同时访问该RAM。

操作系统将内存块分配给称为页面的程序。如果没有足够的RAM一次存储所有页面,则最不可能需要的页面将存储在速度较慢(但空间更大)的硬盘上。当需要存储的页面时,它们将交换当前RAM中不太需要的页面的空间。此过程称为分页,并将其名称借给Windows上的pagefile.sys文件。

虚拟内存使程序更容易管理自己的内存,也使它们更安全。程序不需要担心其他程序在哪里存储数据,或者还剩下多少RAM。他们可以根据需要向操作系统请求额外的内存(或返回未使用的内存)。程序看到的只是一个连续的内存地址块供其独占使用,称为虚拟地址。该程序不允许查看其他程序的内存。

当程序需要访问内存时,它会给操作系统一个虚拟地址。操作系统联系CPU的内存管理单元(MMU)。MMU在虚拟地址和物理地址之间进行转换,将该信息返回给操作系统。在任何时候,程序都不会直接与RAM交互。

什么是ASLR?

地址空间布局随机化(ASLR)主要用于防止缓冲区溢出攻击。在缓冲区溢出中,攻击者向函数提供其所能处理的尽可能多的垃圾数据,后跟恶意负载。有效负载将覆盖程序打算访问的数据。跳转到代码中的另一个点的指令是常见的有效负载。例如,著名的iOS4越狱方法JailBreak Me使用了缓冲区溢出攻击,促使苹果在iOS4.3中添加了ASLR。

缓冲区溢出要求攻击者知道程序的每个部分在内存中的位置。弄清楚这一点通常是一个艰难的试错过程。在确定之后,他们必须制作一个有效载荷,并找到一个合适的位置来注入它。如果攻击者不知道他们的目标代码位于何处,可能很难或不可能利用它。

ASLR与虚拟内存管理一起工作,将程序不同部分在内存中的位置随机化。每次运行程序时,组件(包括堆栈、堆和库)都会移动到虚拟内存中的不同地址。攻击者不能再通过试错知道他们的目标在哪里,因为每次的地址都会不同。通常情况下,应用程序需要支持ASLR,但这正在成为默认设置,甚至在Android 5.0及更高版本上也是必需的。

那么ASLR还在保护你吗?

上周二,纽约州立大学宾厄姆顿分校和加州大学河滨分校的研究人员发表了一篇名为“跳过ASLR:攻击分支预报器绕过ASLR”的论文。详细介绍了一种攻击分支目标缓冲区(BTB)的方法。BTB是处理器的一部分,它通过预测结果来加速IF语句。使用作者的方法,可以确定已知分支指令在运行程序中的位置。有问题的攻击是在配备英特尔Haswell处理器(2013年首次发布)的Linux计算机上进行的,但很可能适用于任何现代操作系统和处理器。

也就是说,你不一定要绝望。该白皮书提供了硬件和操作系统开发人员可以缓解此威胁的几种方法。较新的细粒度ASLR技术需要攻击者付出更多努力,并且增加熵值(随机性)会使跳跃攻击变得不可行。最有可能的是,较新的操作系统和处理器将不会受到这种攻击。

那么你还能做些什么呢?跳过旁路是新的,在野外还没有被发现。当攻击者利用该漏洞时,该漏洞将增加攻击者可能对您的设备造成的潜在损害。这种访问级别并不是史无前例的;微软和苹果只是在2007年及以后发布的操作系统中才实现了ASLR。即使这种攻击方式变得司空见惯,你也不会比回到Windows XP时代更糟糕。

请记住,攻击者仍然必须将他们的代码放到您的设备上才能造成任何危害。这个缺陷不会给他们提供任何感染您的额外途径。一如既往,您应该遵循安全最佳实践。使用杀毒软件,远离粗制滥造的网站和程序,让你的软件保持最新。通过遵循这些步骤并阻止恶意攻击者进入您的计算机,您将一如既往地安全。

图片来源:Steve/Flickr

相关文章