目录
[2、推测屏障Speculation Barriers](#2、推测屏障Speculation Barriers)
[9、特权不可访问(Privileged Access Never (PAN))](#9、特权不可访问(Privileged Access Never (PAN)))
软件很少是完美的,而且防御性编程的原则并不总是应用于数百万行代码的所有部分。为了应对这一点,现代编译器和处理器必须在执行点防御漏洞,减少重新编码的需要。Arm 架构包括帮助防御控制流攻击、数据访问攻击以及缓解侧信道攻击的技术。
1、侧信道攻击威胁
攻击者可以利用现代处理器中乱序执行(out-of-order execution)和推测执行(speculative execution)的不良副作用。此攻击可用于破坏操作系统和进程之间的分离,以及进程之间的分离以窃取数据。
2、推测屏障Speculation Barriers
屏障指令可以阻止预测执行,从而缓解缓存推测侧信道攻击(cache-speculation side-channel attacks),例如 Spectre 和 Meltdown。
3、栈溢出攻击威胁
当软件由于实现错误而容易受到攻击时,可以提高抵抗攻击的能力。这可以通过重新编译现有软件,以在支持安全增强的指令集架构上运行,并使用了解这些指令集架构增强的编译器来实现。
防御技术,如仅执行内存(XOM)和代码签名,已导致攻击者使用了越来越多的攻击手段,如 JOP、ROP 和使用后释放(use-after-free)。
4、指针认证PAC
攻击经常试图颠覆软件的控制流程。PAC 是在 Armv8.3-A 中引入的一项功能,用于阻止这些类型的攻击。指针的高位用于存储 PAC,即对指针值和一些额外指定的上下文的加密签名。引入了特殊的指令,可以:
- 给指针添加 PAC
- 验证经过身份验证的指针的 PAC
- 恢复原始指针值
这使得系统可以对某些指针是否被攻击者篡改做出具有密码学强度的保证,从而极大地提高了应用程序的安全性。
5、分支目标识别BTI
在发现可利用的漏洞后,攻击者的下一个目标是执行代码以控制所访问的机器。修改控制流的技术包括 ROP 和 JOP 攻击。这些技术寻找易受攻击程序的小工具(称为 gadgets),可以将它们链接在一起以实现攻击者的目标。
Armv8.5-A 引入了 BTI。支持 BTI 的系统确保间接分支只能target到可接受指令开始的代码位置。这降低了攻击者执行任意代码的能力。
这个特性与 PAC 一起工作,显著减少了攻击者可用的 gadgets 数量。
6、内存安全违规威胁
当对象被访问超出其真实边界时,空间安全性就会被违反。例如,当栈上的缓冲区溢出时。这可能被利用来覆盖函数的返回地址,这可以成为几种类型攻击的基础。
当对对象的引用在作用域外被使用时,通常是在对象的内存被重新分配后。例如,当包含某种函数指针的类型被恶意数据覆盖时,也可能会形成几种类型的攻击的基础。
MTE 提供了一种机制来检测内存安全违规的两个类别。通过增加测试和模糊测试的效果,MTE 在部署前有助于检测潜在的漏洞。在部署后,MTE 还有助于规模化地检测漏洞。
7、内存标记扩展MTE
内存标记使开发人员能够识别程序中的空间和时间内存安全违规。它旨在快速检测内存安全违规,并提供针对试图颠覆代码的攻击的强大防护。内存安全缺陷占被利用的安全漏洞的很大比例,而 MTE 实现了对内存的锁与钥匙访问。如果钥匙匹配锁,则允许内存访问;否则,访问可能会被记录或出现故障。通过这种方式,难以捕捉的内存安全错误可以更容易地被检测和消除,从而提高可靠性并改善产品安全性。
8、加强数据保护
标准的权限模型是,具有更高权限的实体可以访问属于较低权限实体的任何内容。例如,操作系统(OS)可以查看分配给应用程序的所有资源。但这并不总是理想的。恶意应用程序可能会尝试欺骗操作系统代表应用程序访问数据,而应用程序本不应该看到这些数据。
9、特权不可访问(Privileged Access Never (PAN))
PAN 是一项 Arm 安全功能,有助于防止操作系统内核(或虚拟机监控程序)中的漏洞被利用,以错误地访问分配给用户模式的内存。即使内核被欺骗去访问由用户模式攻击者控制的页面,PAN 也会阻止访问。
更多详情请参考该博客:ARM PAC/BTI/MTE三剑客精讲与实战