本文翻译自 https://community.arm.com/developer/ip-products/processors/b/processors-ip-blog/posts/arm-a-profile-architecture-2018-developments-armv85a
原作者:Matthew Gretton-Dann 2018年9月17日
译者: Zenon Xiu
Arm和arm构架授权客户,生态伙伴一起,将arm构架持续演进,开发新的构架功能以满足新的和现存的市场需求。
这篇博客讨论在2018年增加的A-profile构架关键功能,也就是Armv8.5-A.
完整的指令集和系统寄存器信息可以在我们的技术网站上找到。完整的包含Armv8.5-A和更早功能的arm构架参考手册(ArmARM)会在2019年第一季度末公布。(译者:这篇翻译发布时,ArmARM已经包含了Armv8.5-A扩展,https://developer.arm.com/products/architecture/cpu-architecture/a-profile)
其他更早的A-Profile构架的详细信息可以在这里找到Armv8.1-A, Armv8.2-A, Armv8.3-A, and Armv8.4-A.
在讨论这些功能时,我们也在做相关开源软件项目,以便在新的硬件可用时,这些软件对这些必要的构架支持已经准备好了.
在过去的12个月里,Spectre和Meltdown的发现占据了安全相关的主要议题。 但是,它们不是我们当前面临的仅有的安全挑战,arm一直和合作伙伴一起开发硬件工具以帮助软件抵御攻击。
许多常见的软件漏洞是由缓冲区溢出(buffer overrun)和 释放后使用(use-after-free)编程错误导致的。buffer overrun指一个程序试图访问超过其本来边界的内存。use-after-free发生在一个程序访问和重用它已经释放的内存时。通常,这些错误是情景相关的,需要特定的环境才会发生。非常有名的发生在1988年的Morris的蠕虫是有记载的第一个使用buffer overrun来制造病毒的。
Armv8.5-A引进一个叫Memory Tagging 的新功能。 当使用Memory Tagging时,每个内存分配(memory allocation)都会分配一个标签(tag). 所有内存必须通过有正确标签的指针来访问。 错误的标签会被注意到,操作系统可以选择马上汇报这个问题给用户,或是通知进程发生过这个问题,以便后面去研究。
比如,在下面的图中,对0x8000的内存访问没有问题,因为用来访问的指针有和被访问的内存有相同的标签(用颜色来表示)。但是,对0x9000的访问会失败,因为指针和被访问的内存用不同标签。
内存标签技术可以用在很多场合。在开发阶段,它可以在测试环境中用来检测内存错误问题。在产品量产阶段,它可以在线检测问题,并将反馈提供给开发者。一旦受到反馈,可以分析这个漏洞,并在它被攻击者发现之前修复它。
一旦攻击者发现可以利用的漏洞,他们下一步的目标就是能执行代码来获取机器的控制权。攻击者可以使用ROP和JOP(Return- and Jump-Oriented Programming)的工具方式,这些技术通过发现有漏洞程序中一个个小段代码片段(叫做gadgets),并将它们连接起来形成攻击者想要的代码运行。这种方式可以被利用,因为构架没有限制跳转指令可以跳转的地址,也没有限制代码可以从哪里跳转过来。这使攻击者可以使用这些代码片段,做他们想做的事情。
在Armv8.3-A中,我们引入了指针鉴权(Pointer Authentication)功能,我们可以用这个功能保证函数返回到程序期望的地址。
在Armv8.5-A中,我们引入了Branch Target Indicators (BTI). 支持BTI的系统可以强制非直接跳转只能跳到一小部分允许的指令上(译者:BTI指令,和一些PAC Signing指令). 这可以减少攻击者执行任意代码的能力。
指针鉴权和BTI功能一起使用,可以显著减少攻击者能用的gadget的数量。剩下可用的gadget的代码大小就比较大,这使攻击者想去使用这些gadget更加困难,即使他们发现了一个可以获得机器控制的漏洞。
Armv8.5-A也包含一些小功能:
这篇博客提供了简要的Armv8.5-A构架功能介绍。更多的信息可以在我们的开发者网站找到。下一步是和我们包括Linaro的生态伙伴一起,保证使能开源软件项目,以便当硬件可用时软件可以使用这些功能。更多的细节我们会在2018年9月17-21日的Linaro Connect in Vancouver 大会做演讲。(译者:该slide和video可以在https://connect.linaro.org/resources/yvr18/sessions/yvr18-104/ 浏览和下载)
大佬,关于Pointer Authentication解密失败的异常。看您之前翻译的8.1说A核会报同步异常或Translation异常,在8.6架构中则针对PAC实现了FPAC相关的标志(同步异常)。
1、这两种异常现在还都会产生吗?
2、8.6之前的架构PAC同步异常异常标志是什么呢?
期待大佬的回复,感谢!