操作系统的随机地址ASLR机制我们都了解,但是具体如何实现的,读了本片文章才了解到是通过基于基地址的随机偏移量完成的,而且在一个系统或进程启动周期内,可执行文件与共享库共享相同的偏移量。已知受 ASLR 保护的地址可能会被各种侧通道泄露,例如CPU 分支目标预测缓冲区 BTB或是MMU遍历页表泄露的信息。如果对如何获取ASLR偏移量技术感兴趣可以参考这篇文章ASLR simplified!
翻译Address Space Layout Randomization (ALSR) – It’s good, but it’s not good enough
参考Address space layout randomization
这是一个令人震惊的统计数据:80% 的成功网络攻击依赖于利用内存损坏漏洞。此类攻击包括缓冲区溢出、堆栈粉碎和面向返回的编程 (ROP) 攻击。这些都是旨在通过强制将黑客的数据或代码写入程序设计范围之外的意外内存区域来破坏分配的应用程序内存区域的不同方法。
坏消息是,如果您受到这些攻击之一的攻击,它可能会使应用程序崩溃,但它也可能使恶意黑客完全控制您的系统。然后,他们可以窃取数据或注入并运行他们自己的代码,而您完全不知道违规行为。好消息是,随着时间的推移,已经开发出各种可以用作第一道防线的对策。
ASLR机制
地址空间布局随机化 (ASLR) 是这些技术的主要示例。它通过混合程序的基本元素在内存布局中的位置来工作。这是通过为可执行文件、堆栈、堆和共享库的所有关键基内存地址位置随机分配偏移量来实现的。由于任何潜在的黑客最初都不知道这种随机偏移量
,因此它使发起攻击变得更加困难。他们必须在开始之前计算出偏移值。
FreeBSD 是 2003 年第一个支持 ASLR 的主流操作系统,随后是 2005 年的 Linux 和 2007 年的 Windows。今天,您选择的几乎任何主要操作系统都将内置成熟的 ASLR 实现并随时可用。最重要的是,没有额外费用。
到现在为止还挺好。如果这就是故事的结局,我们都会很安全,晚上睡得很好。
ASLR的有效性
地址空间布局随机化是基于攻击者猜测随机放置区域位置的可能性很小。通过增加搜索空间来提高安全性。因此,当随机偏移中存在更多熵时,地址空间随机化更有效。通过增加发生随机化的虚拟内存区域空间量或减少发生随机化的时间段来增加熵。该周期通常实现得尽可能小,因此大多数系统必须增加 VMA 空间随机化。
ASLR弱点
不幸的是。ASLR 已经存在将近 20 年了。黑客有足够的时间来解决这个问题。在制作现代内存损坏攻击时,破坏或规避 ASLR 只是每个黑客待办事项清单上的第一件事。
以下是一些主要的 ASLR 弱点:
- ASLR 分配的内存偏移量保持不变,直到系统重新启动或进程重新启动。这意味着一个坏演员通常有足够的时间来解决这个问题。一旦发现了神奇的数字,它就适用于一切。这是因为所有的库和函数都与标准内存地址共享相同的偏移量。
- 如果任何程序或进程设置为在崩溃后自动重新启动,它很容易成为暴力攻击的目标,可以进行无数次尝试和错误来猜测偏移量。
- 一些旨在提高性能的硬件功能也可以被操纵以避开 ASLR。例如,可以利用内置于 CPU 中的分支目标缓冲区 (BTB) 来引发侧通道内存泄漏。BTB 旨在改进预测执行功能,但已被证明可以在大约 60 毫秒内显示 ALSR 偏移。
- 在我之前的一篇 博客中,我展示了如何轻松利用 ROP 链和小工具来公开 ASLR 偏移量。
如何改进 ASLR 保护
我的观点是 ALSR 是抵御内存损坏攻击的有用第一道防线,尤其是在你没有更好的方法的情况下。但它并不完美,在现代环境中它不再足够好。
这就是我们设计 Polymorphing 技术以将您的网络安全保护提升到指数级更高水平的原因,所有这些都不会对性能或功能产生任何影响。
它的工作原理是通过高级多态编译器运行源代码,以随机化整个操作系统的低级机器代码。这意味着每个可执行文件、库和函数中的所有地址都是唯一的;所有库或可执行文件的指令集都被打乱;您将获得完整的独一无二的资源映射。更好的是,您的整个 Linux 环境可以每 24 小时重新加扰一次。
底线?Linux 的多态是改进 ASLR 并使内存损坏漏洞成为过去的最终方法。
如果您想了解更深入的信息,请查看 此处的技术白皮书。
网友评论