64 位应用程序是否比 32 位应用程序具有任何安全优势?

信息安全 记忆 aslr
2021-09-07 19:32:50

来自 arstechnica.com的一篇特定文章说明了这一点。

其中一项保护措施称为地址空间布局随机化 (ASLR),它通过将 DLL 和应用程序内存移动到每个 32 位应用程序可用的 4GB 内不可预测的位置来工作。这使得利用更加困难,但在 32 位系统上,保护是有限的。只有 4GB 的空间,没有那么多随机位置可供选择。例如,DLL 仍然需要相对紧密地打包在一起,以确保有大量可用空间可供应用程序存储自己的数据。

这是否有任何技术优势,或者我应该将其归档为通常的废话非以安全为重点的网站提出的?

1个回答

ASLR是一个捉迷藏游戏:如果攻击者成功溢出缓冲区并覆盖指针,操作系统会在随机位置加载应用程序代码(主要可执行文件及其 DLL),以使攻击者更难实际击中一个有意义的位置。通过施工,当操场更大时,它会更好地工作。64 位模式下的扩展地址空间一个更大的游乐场。

量化一下:在 32 位模式下,地址空间最多为 32 位宽(当内核不知道 64 位模式时,实际上是 31 位)。DLL 加载器必须尊重页面对齐,并且在 x86 上页面为 4 kB。这在 ASLR 的随机化中最多提供 20 位的熵,但实际上低于此值,因为将 DLL 分布在整个地址空间会导致更高的碎片(阻止应用程序分配,例如,1 GB 的连续缓冲区,这在编辑图片或电影时很常见)。这就是您引用的文字所暗示的内容。例如,假设 DLL 加载仅发生在地址空间的八分之一内,即 29 位;通过对齐,这意味着 17 位熵,即任何给定 DLL 的 131072 个可能位置。任何状况之下,

在 64 位模式下,地址空间扩展到 48 位,在 Windows 上降低到 44 位,因为它们没有费心去超越。这增加了 12 位熵;换句话说,它乘以 4096 攻击者的努力(以防攻击者依赖运气)。

因此,确实在某种程度上,64 位模式的扩展地址空间增加了安全性。当然,ASLR只有当一个缓冲区溢出任何影响已经发生,在这种情况下,你已经是大麻烦。