关于DEP、ASLR的兼容性问题分析

本文分析了DEP(数据执行保护)和ASLR(地址空间布局随机化)在硬件、内核及功能层面带来的兼容性问题。DEP在32位系统中遇到硬件限制和可能导致软件兼容性问题;ASLR在32位和64位系统中的实现差异以及在某些硬件上可能因内存管理单元的漏洞而失效。2017年前的硬件可能难以有效防御此类攻击,需要硬件层面的改进。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


DEP带来的兼容性问题


一、硬件方面

不具有DEP技术支持的CPU将无法从硬件层面对内存页进行保护从而应用DEP,在此情况下,软件支持的DEP并不能直接阻止在数据页上执行代码。

二、内核方面

32位系统只能通过引导至PAE模式来支持DEP,并不能通过PTE的高双字的最高bit即bit63来实现(PTE的第63位控制着页的可执行属性)。

即这个位置为0,表示此页不可执行;没有置为0,表示此页可以执行。

而32位系统的页目录和页表项只有32个bit,所以不可能提供DEP的这个保护位,因此DEP只有在64bit的PTE上才能实现。

而只有cr4的bit5即PAE启用的时候,PTE才为64bit。

三、功能方面

用于将内存位置标记为不可执行的DEP,会导致32位软件出现兼容性问题。

这是因为DEP阻止了某些程序的运行,可能会导致这些应用程序被挂起而产生无法运行的错误。


ASLR带来的兼容性问题


一、内核方面

在Windows的32位系统与64位系统中,其地址随机化的位数与方式均是不同的。

在32位系统中,Windows只尝试随机化32位地址中的8位,这些是位从16到23,只影响地址的页目录条目和页表条目部分。

原因是操作系统不能简单地将地址的任意位随机化,在页面部分(0到11位)中随机分配偏移量将打破程序对数据对齐的假设。

页面目录指针(位30和31)也不能被更改,因为第31位是为内核保留的;而第30位被物理地址扩展用作存储体交换技术,以寻址2 GB以上的RAM,这使得32位地址中的14位不能被随机化。

而在64位系统中,Windows对64位程序的基地址随机化程度会更高,从而使攻击64位程序的难度比攻击完全相同程序的32位版本的难度高上数百倍。

故将32位代码重新编译为64位会大大增加可供地址空间布局随机化选择的基本地址数量,也可以大大提高其抗攻击能力。

二、硬件方面

ASLR无法在部分较落后的硬件上保障其保护能力。

首先,处理器有个称为内存管理单元(MMU)的部件,负责映射计算机在内存中存储程序的地址。为跟踪这些地址,MMU频繁查询名为页表的目录。

VUSec攻击(disclosed in 2017)的关键,在于设备通常将页表存储在处理器缓存中——让最常访问的信息随时可被计算核调用的一小块内存。这种做法可以提升芯片处理速度和效率。

但是,网页上运行的一段恶意JavaScript代码,同样可以写入那块缓存。最关键的是,它还能同时查看MMU的工作速度。

通过密切监视MMU,JavaScript代码可以找出其自身地址——攻击代码会复写缓存,一次一个单元,直到看到MMU降速,MMU要执行4次单独的页表查询,才能找到任给代码段的物理地址。

因此,该攻击会重写缓存4次,搜出缓存中存放页表的4个地方。每一次,恶意程序都会记下MMU降速的时刻。

MMU走到该降速时刻的耗时,就成为了恶意代码自身在缓存中地址的提示信息,当设备将攻击代码从缓存中拷贝到RAM中时,ASLR想隐藏起来的代码内存地址就暴露无遗了。

因此,若要彻底的防范ASLR攻击,完全修复该硬件漏洞最终将需要更换硬件,而非软件。设备将需要建立在重新设计的新架构之上的新芯片——MMU与处理器缓存中的页表相互隔离。

三、后注

该漏洞于2017年初被阿姆斯特丹自由大学的研究员Ben Gras和他的同事Kaveh Razavi披露,使得ASLR在不同硬件设备上的表现能力产生差异(至少2017年以前生产的硬件均无法较好地防御该漏洞)。

而此后较为完善的ASLR保护机制很可能无法作用于这些较为老旧的芯片。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值