
系统安全机制与相关攻击汇总
内核空间粗粒度KASLR
- 防护层次:操作系统
- 防护目标:防止攻击者获取准确的操作系统内核代码地址映射
- 防护原理:操作系统启动时将内核镜像起始地址添加固定偏移量
- 微架构攻击:(1)Prefetch;(2)TLB;(3)BTB;(4)页表;(5)Spectre;(6)AVX;(7)EntryBleed。这类攻击的本质均与TLB有关,只是利用TLB的手段存在差异
用户空间粗粒度ASLR
- 防护层次:操作系统
- 防护目标:防止攻击者获取准确的目标应用程序的代码段、堆栈数据的地址映射
- 防护原理:操作系统在程序运行时将程序每个模块的起始地址添加固定偏移量
- 微架构攻击:(1)BTB;(2)AVX
保护栈溢出的Stack Canary
- 编译器
- 防护目标:防止攻击者通过缓冲区溢出恶意修改返回地址实现ROP攻击
- 防护原理:在返回地址之前写入canary随机数,通过判断随机数是否修改来判断返回地址是否改写
- 微架构攻击:SpecHammer(绕过防护)
用于防护ROP的Intel CET
- 防护层次:处理器+操作系统
- 防护目标:防止攻击者通过缓冲区溢出恶意修改返回地址实现ROP攻击
- 防护原理:在内存中开辟只读的“影子栈”存放返回地址副本,ret指令执行时进行返回地址的比对
- 微架构攻击:暂无,根据英特尔文档描述:return address on stack == return address on RSB才会出现推测执行
用于防护COP/JOP间接分支劫持的Intel IBT
- 防护层次:处理器+操作系统
- 防护目标:防止攻击者构造COP/JOP类型的控制流攻击
- 防护原理:通过编译时在函数开始与结尾/跳转开始与结尾添加特定标记指令,利用有限状态机(2个状态),确保攻击者即使修改间接跳转地址,也无法构造控制流劫持
- 微架构攻击:InSpectre Gadget
防护ROP/JOP控制流劫持的ARM PAC
- 防护层次:处理器+操作系统
- 防护目标:防止攻击者构造恶意指针实现ROP和JOP利用链
- 防护原理:利用64位地址的高16位作为指针认证码(哈希),通过验证48位地址是否有效来判断控制流是否被攻击者恶意控制
- 微架构攻击:PACMAN(绕过防护),已有后续的防护对策XPAC指令
防护缓冲区溢出和Use-After-Free的ARM MTE
- 防护层次:处理器+操作系统
- 防护目标:防止攻击者利用缓冲区溢出和Use-After-Free越界读写内存
- 防护原理:一张专门存储MTE标记的硬件表,4位存储MTE标记,并将不同的内存分配区域设定不同的标记,通过判断标记来判断访问的内存是否合法
- 微架构攻击:(1)TikTag v1(绕过防护);(2)TikTag v2(绕过防护)。ARM没有给出新的防护对策
针对KASLR的EntryBleed攻击(绕过防护)
(1)主要创新点:
提出EntryBleed攻击,一种普适的基于微架构侧信道的KASLR(内核地址空间布局随机化)绕过技术,可在启用KPTI(内核页表隔离)机制的现代Linux系统上实现。EntryBleed利用KPTI的设计缺陷和预取(prefetch)指令的时间侧信道特性,快速泄漏内核基地址。
(2)技术路线:
KPTI的设计缺陷:KPTI隔离用户态与内核态页表以应对Meltdown攻击,但为了处理系统调用、异常和中断,内核页表在用户态中保留了部分地址映射,称为“跳板区域”(trampoline region)。跳板区域的地址可以通过预取指令的时间特性泄漏,进而推导整个内核地址布局。
1)KPTI隔离切换页表时通常会刷新TLB,但跳板区域的页表映射带有“全局位”(global bit),可避免被刷新。因此,用户态执行系统调用时,TLB会缓存跳板区域的页表映射。返回用户态后,这些缓存仍然保留。
2)预取指令可以对用户态无权限访问的地址执行操作而不会触发异常。通过测量预取指令的延迟,攻击者可以区分内核地址是否被映射到TLB中。因此,攻击者能够通过遍历所有可能的跳板地址范围,并使用预取指令测量每个地址的访问时间。
3)Linux内核的地址随机化范围有限,因此攻击只需尝试有限的候选地址。由于跳板区域的地址是内核地址空间的一部分,且相对于内核基地址有固定偏移。通过定位跳板地址,攻击者即可推导出内核基地址,从而完全破坏KASLR。
针对Stack Canary的SpecHammer攻击(绕过防护)
(1)主要创新点:
1)结合Spectre和Rowhammer攻击提出SpecHammer技术,通过Rowhammer诱导内存位翻转(bit-flip),扩大Spectre攻击的适用范围。这种攻击绕过Spectre的关键限制,使得攻击者无需直接控制变量即可触发漏洞。
2)扩展攻击小工具(gadgets)数量,通过使用Rowhammer修改受害者变量,释放了Spectre的限制,从而将Linux内核中可用的Spectre攻击工具从约100个增加到约20,000个。
3)利用“双重工具”(double gadget)泄漏敏感信息,如堆栈保护值(stack canary);利用“三重工具”(triple gadget)实现对内存地址的任意读取。
4)改进Rowhammer技术,提高位翻转率,将现有方法的翻转率提高了248~525倍(DDR3)和16倍(DDR4),使攻击在现代DRAM设备上更加实际。
(2)技术路线:
双重工具攻击(Double Gadget Attack):使用Rowhammer翻转数组索引变量的比特位,使其指向敏感数据(如stack canary)。在推测执行窗口内,利用Spectre漏洞访问受保护数据,通过缓存侧信道(Flush+Reload)泄漏信息。
三重工具攻击(Triple Gadget Attack):使用三重嵌套数组访问,允许攻击者通过控制数据指针(array offset)读取任意内存地址,包括内核内存。
具体实施中,通过Rowhammer测试找到可利用的物理地址,并确保目标内存页包含所需的位翻转。将目标变量放置在可翻转的内存页上。对于用户态和内核态分别开发了针对堆栈的调整技术。然后,通过训练分支预测器使其错误预测,诱导CPU进入推测路径,并利用翻转后的变量访问敏感数据。最后,通过Flush+Reload或Prime+Probe测量缓存命中,恢复内存中的敏感数据。
针对堆栈保护的攻击通过Rowhammer翻转数组索引,将访问范围推到数组边界之外。然后在堆栈区域泄漏stack canary(通常为64位),从而绕过基于堆栈保护的缓冲区溢出防御。
针对ARM PAC的PACMAN攻击(绕过防护)
(1)主要创新点:
1)PACMAN利用推测执行结合微架构侧信道攻击,绕过ARM指针认证(Pointer Authentication, PA),从而实现控制流劫持。PACMAN攻击的核心是在不引发崩溃的情况下区分正确和错误的PAC(Pointer Authentication Code)。
2)证明PACMAN可从用户态攻击内核态,通过侧信道泄漏跨权限级别的PAC验证结果,并且首次针对Apple M1 SoC发起推测性侧信道攻击。
(2)技术路线:
PACMAN攻击利用“PACMAN小工具”(PACMAN Gadgets)执行两步操作:1)验证操作,在推测路径中调用指针验证指令(如AUT),判断猜测的PAC是否正确;2)传输操作,使用内存加载或分支指令将验证结果通过侧信道传输,泄漏给攻击者。由于整个过程在推测路径上执行,即使PAC验证失败也不会引发程序崩溃。PACMAN通过使用Prime+Probe攻击TLB观察验证结果的微架构影响,能够通过内存加载和分支指令泄漏验证结果。
在ARM系统中,PAC长度通常为16位(部分情况下可能更长),测试一个PAC值平均耗时2.69毫秒,16位PAC的全部暴力破解平均耗时2.94分钟。同时,本文还实现了针对PAC保护的内核模块的控制流劫持攻击。攻击通过缓冲区溢出修改PAC保护的指针,并使用PACMAN暴力破解PAC,从而绕过保护并成功执行内核中的恶意代码。
针对ARM MTE的TikTag攻击(绕过防护)
(1)主要创新点:
1)提出了两种名为TikTag-v1和TikTag-v2的新型攻击,能够泄漏ARM Memory Tagging Extension (MTE)中的标签值。证明了即使在启用MTE的情况下,利用推测执行可以有效绕过其内存保护机制,从而进行内存损坏漏洞利用。
2)展示了如何利用泄漏的MTE标签绕过随机标记分配机制并实现漏洞利用。TikTag攻击能够成功应用于真实世界场景,包括Google Chrome浏览器和Linux内核。
3)系统分析了攻击的根源,包括推测执行中分支预测和存储到加载(store-to-load)转发行为的缺陷。提出了硬件和软件层面的缓解措施。
(2)技术路线:
TikTag-v1 攻击原理:利用一个分支指令错误预测,触发后续的CHECK和TEST阶段在推测路径中执行。在标签检查(CHECK)阶段,通过多个内存加载指令触发标签检查(tag check),将攻击者猜测的标签(Tg)与目标内存标签(Tm)比较。在测试阶段(TEST)阶段,访问一个测试指针(test_ptr),其缓存状态(cache hit/miss)取决于CHECK中的标签检查结果。在ARM Cortex-X3处理器(Pixel 8设备)上,TikTag-v1可以以95%以上的成功率在4秒内泄漏任意内存地址的MTE标签。
TikTag-v2 攻击原理:利用了存储到加载转发行为(store-to-load forwarding)中的时间差异。在CHECK阶段存储一个值到guess_ptr,并随后从同一地址加载值。如果标签匹配(Tg == Tm),存储到加载转发会成功,TEST阶段对test_ptr的访问会填充缓存。如果标签不匹配,转发被阻止,test_ptr的缓存不会填充。TikTag-v2能够成功在ARM Cortex-A715处理器有效发起,成功率达95%,平均耗时不到3秒。攻击还可以被用作“地址探测工具”,进一步破坏地址空间布局随机化(ASLR)。
(3)实验结果与实际应用:
1)Google Chrome浏览器攻击:在V8 JavaScript引擎中构造了TikTag-v2攻击,并利用其泄漏分配器中的MTE标签值。成功利用泄漏的标签值实现对线性溢出和Use-After-Free(UAF)漏洞的攻击,成功率超过97%。
2)Linux内核攻击:在Linux内核中发现了TikTag-v1小工具,位于snd_timer_user_read函数。攻击利用悬空指针(dangling pointer)泄漏MTE标签。能够以97%的成功率实现UAF漏洞利用,耗时约6.86秒。
利用绕过KASLR的BlindSide攻击(软件攻击增强)
(1)主要创新点:
1)提出“Speculative Probing”技术,借助推测执行的特性,利用单一的内存破坏漏洞,绕过现代操作系统中强大的地址空间随机化(ASLR)和Spectre漏洞缓解机制。这种攻击通过微架构侧信道泄漏信息,不引发崩溃,攻击可以隐蔽地探测内存布局。
2)提出“BlindSide”攻击框架,将传统软件漏洞利用(如缓冲区溢出)与推测执行攻击相结合,开创了通过推测路径控制流劫持和数据泄漏的新方法,从而实现在启用最新缓解措施的Linux内核上的攻击。
3)实现了多个端到端攻击,包括“推测性数据泄漏”和“Just-in-Time代码重用”攻击,最终获取系统权限。
(2)技术路线:
利用条件分支预测错误,通过内存破坏漏洞修改函数指针,在推测执行路径上劫持控制流至目标内存位置。然后通过缓存侧信道(如Flush+Reload或Prime+Probe),探测被访问的内存区域。能够绕过随机化和缓解措施:首先,绕过粗粒度KASLR,通过代码区域探测推导内核基地址;其次,针对启用了细粒度随机化(如FG-KASLR)的系统,能够利用推测路径上的Spectre小工具进行进一步的内存泄漏;此外,在代码只读(XoM)机制下,还能够通过推测路径直接读取受保护的代码。
针对KASLR/ASLR的AVX攻击(微架构攻击增强)
(1)主要创新点:
1)通过利用AVX指令集中的“掩码加载/存储”指令的异常抑制和执行时间差异特性,提出了一种能够破坏地址空间布局随机化(ASLR)的时间侧信道攻击。这种攻击能够在不产生异常的情况下推断页面映射和权限信息。
2)攻击不仅可以在用户态和内核态ASLR上实现,还可以在云计算环境(如Amazon EC2、Google GCE、Microsoft Azure)以及SGX enclave(安全保护区)中打破ASLR。
3)除了破坏ASLR,研究人员还发现该攻击可以检测用户行为,例如蓝牙事件和鼠标移动。
(2)技术路线:
本文研究首先发现AVX掩码加载/存储指令可以在访问无效或不可访问的页面时抑制异常,从而通过时间差异泄漏页面的状态(映射或未映射)。然后基于时间差异来区分映射页面和未映射页面。通过区分TLB命中和未命中状态,攻击者可以:1)监控内核模块的访问状态,从而推断用户行为;2)基于时间差异来识别页面权限,区分可读、可写页面权限。
作者在多种CPU上测试,包括Intel和AMD平台,并在启用了KASLR(内核地址空间布局随机化)的系统上成功实施攻击。在Intel i5-12400F上,该攻击在0.28毫秒内成功识别内核的基地址,准确率达到99.6%;在AMD Ryzen 5 5600X上也成功识别了内核基地址,准确率达到99.48%。此外,在SGX enclave中利用该攻击实现了精细粒度的ASLR突破。
参考文献
[1] Liu W, Ravichandran J, Yan M. EntryBleed: A Universal KASLR Bypass against KPTI on Linux[C]//Proceedings of the 12th International Workshop on Hardware and Architectural Support for Security and Privacy. 2023: 10-18.
[2] Tobah Y, Kwong A, Kang I, et al. Spechammer: Combining spectre and rowhammer for new speculative attacks[C]//2022 IEEE Symposium on Security and Privacy (SP). IEEE, 2022: 681-698.
[3] Ravichandran J, Na W T, Lang J, et al. PACMAN: attacking ARM pointer authentication with speculative execution[C]//Proceedings of the 49th Annual International Symposium on Computer Architecture. 2022: 685-698.
[4] Kim J, Park J, Roh S, et al. TikTag: Breaking ARM’s Memory Tagging Extension with Speculative Execution (to appear)}}[C]//Proceedings of the 46th IEEE Symposium on Security and Privacy (Oakland). 2025.
[5] Göktas E, Razavi K, Portokalidis G, et al. Speculative probing: Hacking blind in the Spectre era[C]//Proceedings of the 2020 ACM SIGSAC Conference on Computer and Communications Security. 2020: 1871-1885.
[6] Choi H, Kim S, Shin S. AVX Timing Side-Channel Attacks against Address Space Layout Randomization[C]//2023 60th ACM/IEEE Design Automation Conference (DAC). IEEE, 2023: 1-6.