ARM PAC指针认证的侧信道攻击——PACMAN安全漏洞

目录

Q1. PACMAN论文的内容是什么?

Q2. Arm处理器是否存在漏洞?

Q3. 受Arm合作伙伴架构许可设计的处理器实现是否受到影响?

Q4. Cortex-M85受到影响吗?

Q5. Cortex-R82受到影响吗?

Q6. 指针认证如何保护软件?

Q7. PACMAN的详细工作原理是什么?

Q8. PACMAN的局限性是什么?

Q9. 用户是否应对PACMAN感到担忧?

Q10. 是否有可用于缓解PACMAN的方法?


Arm最近得知PACMAN漏洞的存在(详见https://pacmanattack.com/),本文解答了有关该漏洞的问题。本文涉及以下10个问题:

  1. PACMAN论文的主题是什么?

  2. Arm的CPU是否受到影响?

  3. 由Arm的合作伙伴根据架构许可设计的处理器实现是否会受到影响?

  4. Cortex-M85是否受到影响?

  5. Cortex-R82是否受到影响?

  6. 指针认证如何保护软件?

  7. PACMAN的详细工作原理是什么?

  8. PACMAN有哪些局限性?

  9. 用户是否应对PACMAN感到担忧?

  10. 是否有可用于缓解PACMAN的方法?

如果您是Arm被许可方,并有其他问题,请联系您的客户团队以获取更多信息。

Q1. PACMAN论文的内容是什么?

麻省理工学院的研究人员发表了一篇描述PACMAN技术的论文。该方法利用恶意软件对指针认证代码(PAC)进行暴力破解。这种技术使用speculation(推测、投机)来创建一个“oracle”以确定这些代码。这允许攻击者利用这些代码来降低指针认证提供的保护,以对抗面向返回编程(ROP)和面向跳转编程(JOP)攻击。ROP和JOP将现有例程的片段链接在一起形成gadgets“小工具”,然后可以利用这些小工具构建更大的功能序列,用于进一步的攻击。

有关详细信息,请查阅发布在https://pacmanattack.com/上的论文。

Q2. Arm处理器是否存在漏洞?

是的。一些支持指针认证功能(FEAT_PAuth或FEAT_PAuth2)的Cortex-A、Neoverse处理器和其他Arm处理器实现容易受到PACMAN攻击。

指针认证功能是在Arm架构版本Armv8.3-A中引入的。在Arm架构的后续版本中,指针认证功能已经得到增强,引入了一个故障特性(FEAT_FPAC),允许在指针认证尝试失败时引发故障。这个故障特性在本文末尾的Q10中所解释的缓解措施中是必要的。

【注意】对于Cortex-A和Neoverse CPU, ID_AA64ISAR1_EL1寄存器中的API位表示该CPU上是否可用指针身份验证或故障特性(FEAT_FPAC)。相关寄存器功能查询请参考http://hehezhou.cn/

c4448da05c8548a093cce197a270788e.png

下表提供了支持指针认证的已发布处理器是否受到影响的信息:“漏洞状态”为“受影响”表示列出的CPU容易受到PACMAN攻击。

c02519e50a52407a9669cd348174f765.png

Q3. 受Arm合作伙伴架构许可设计的处理器实现是否受到影响?

Arm无法对合作伙伴的实现进行评论。请直接联系这些合作伙伴。

Q4. Cortex-M85受到影响吗?

不受影响。Cortex-M85实现了PAC的M-class版本,但并不容易受到攻击。A类和M类PAC架构之间存在区别,避免了这种攻击。M类认证指令在对错误的PAC进行认证时会生成同步故障,而不是修改寄存器结果(这可能允许通过其他侧信道推测性地检测和泄漏认证状态)

a085e9b6b18f4d6dbd6ab17afdd855ef.png

还请注意,M类的PAC是一个完整的32位值,因为它保存在一个单独的寄存器中(而不是存储在指针的高16位地址位中)。这意味着在M类CPU上,任何可能的PAC空间都会比A类CPU上的空间大得多。此外,指针本身在M类设备上不会被修改,因此在推测地执行无效的认证步骤时,内存访问模式不会发生变化。

最后,这些类型的攻击通常需要一个开放的软件堆栈或用户可以将恶意代码加载到系统上的其他方法。通常,Cortex-M设备的使用模型是使用闭源软件堆栈

Q5. Cortex-R82受到影响吗?

Cortex-R82实现了故障特性(FEAT_FPAC),但并不容易受到攻击。当在执行对PAC进行认证的指令时,Cortex-R82在推测性执行时表现与易受攻击的A类CPU不同,该行为不允许攻击软件创建“oracle”。

Q6. 指针认证如何保护软件?

攻击者可以利用内存破坏漏洞来更改存储在内存中的指针或返回地址,然后劫持程序的控制流。遵循这一模式的攻击包括面向返回编程(ROP)和面向跳转编程(JOP),其中攻击者将指向执行所需任务的代码片段(称为“小工具”)的指针链接在一起。

指针认证通过在地址的未使用高位插入指针验证码(PAC),保护内存中的指针免受恶意篡改。这个代码充当签名,它在对指针进行解引用(在间接分支或内存访问时)之前进行验证。如果指针被篡改,认证很可能会失败,CPU将引发故障,从而抵御攻击。

有关更多信息,请参阅《ARM安全架构——为复杂软件提供保护》文档。

Q7. PACMAN的详细工作原理是什么?

PACMAN是一种技术,允许攻击者通过滥用推测执行来暴力破解PAC。需要强调的是,只有在攻击者已经具备破坏内存中受保护指针的能力的情况下,PACMAN才能发挥作用。由于指针认证的存在,为了修改受保护的指针,攻击者需要找到有效的PAC。

在受影响的CPU上,失败的AUT指令会以一种使得解引用导致翻译故障的方式修改指针。执行路径(通过和认证失败的路径)之间的差异可能会转化为不同的微架构副作用,如果被观察到,就会创建一个“推测性oracle”。

微架构副作用的经典例子包括TLB和缓存分配,可以通过时间测量观察到。具体而言,PACMAN论文依赖于TLBs。错误指令永远不会retire,因为错误预测的分支会刷新pipeline,错误不会发生,攻击者可以重复,直到找到有效的PAC。

ce0646c9f98248dfaadd284168280152.png

PACMAN的主要思想是,攻击者可以通过在推测执行下触发AUT指令的执行(例如,通过错误预测的分支,类似于Spectre攻击),调用这个“oracle”并使用不同的PAC值(每次触发内存破坏时)直到找到有效的PAC为止。在这一点上,攻击者将通过创建具有有效PAC的恶意指针来继续攻击。 

Q8. PACMAN的局限性是什么?

正如上文所述,PACMAN有几个要求和限制:

  1. 能够破坏受害者内存中的指针。
  2. 找到一个合适的"小工具",即能够控制目标AUT指令在推测执行下执行。
  3. 支持PAC的易受攻击CPU在推测执行下执行AUT指令时产生不同的微架构副作用。
  4. 能够观察到这些通常比较杂乱的微架构副作用(例如,TLB分配)。
  5. PAC keys预计会根据执行上下文的变化而变化;在一个上下文中有效的PAC在不同的上下文中可能会失效。
  6. 推测窗口的持续时间设定了可以执行和链式执行的"小工具"数量的上限。此外,每个"小工具"的微架构副作用必须能够被攻击者区分。

需要注意的是,这些要求使得远程攻击变得极不可能,因此攻击者必须能够加载和运行恶意软件或脚本到系统中。然而,在类似JavaScript的JIT环境中,这可能会变得更容易。

Q9. 用户是否应对PACMAN感到担忧?

Arm已经审查了PACMAN论文,虽然它提出了一种新颖且有趣的推测侧信道变体,但Arm认为指针认证仍然在防范ROP和JOP等攻击方面提供了相当大的价值。

用户应该意识到,没有使用指针认证构建的软件已经容易受到ROP/JOP的攻击,因此在该软件上执行这些攻击并不需要PACMAN。

此外,考虑到PACMAN的局限性和推测攻击的历史,我们认为在实际应用中不太可能使用PACMAN来破解指针认证。

Q10. 是否有可用于缓解PACMAN的方法?

对于通用软件,Arm建议继续使用标准的保护机制(在上文Q6中讨论,并在《ARM安全架构——为复杂软件提供保护》文档中有详细介绍),因为它们可以防范ROP和JOP攻击。

可以通过以下代码序列进一步缓解PACMAN。然而,这需要提前了解运行代码序列的CPU的具体实现,并且带有额外的性能影响。

对于实现故障特性(FEAT_FPAC)的CPU,使用XPAC指令(见下图)在每个AUT指令之后显式清除PAC字段将阻止PACMAN攻击创建“oracle”的能力。然而,这意味着不能使用组合认证和分支或认证和加载指令。

3f7c09337bc94b49a5866fdca5e1640a.png

27636d27407348fabcee797e5790712f.png

【注意】

上图的方法依赖于故障的AUT指令不会stalling younger指令,这在Arm实现中是成立的。一个替代且性能更好的序列,可以避免这种限制,但需要牺牲一个额外的寄存器(在下面的示例中为X3),是将上图中的以下代码序列进行转换:

LDR X0, [X1]
AUT X0
XPAC X0
LDR X2, [X0]into:LDR X0, [X1]
MOV X3, X0
XPAC X0
AUT X3
LDR X2, [X0]

【警告】

上述缓解方法不应在未实现故障特性(FEAT_FPAC)的CPU实现上使用,因为这实际上会禁用PAC提供的保护。ID_AA64ISAR1_EL1寄存器中的API位指示在给定的Cortex-A或Neoverse CPU上是否可用指针认证或故障特性(FEAT_FPAC)。

在无法实际使用XPAC指令或CPU未实现故障特性(FEAT_FPAC)的情况下,用户可以在AUT指令之后添加推测barriers。然而,Arm认为在所有可能的情况下使用推测barriers将对性能产生严重的影响。

无论CPU是否支持故障特性(FEAT_FPAC),Arm仍然强烈建议在当前Arm CPU中使用指针认证来缓解ROP/JOP风格的攻击。如果没有指针认证来防范ROP/JOP攻击,攻击者可能会迅速且轻松地创建ROP/JOP小工具。

参考

https://developer.arm.com/documentation/ka005109/latest/

http://hehezhou.cn/

ARM安全架构——为复杂软件提供保护

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/452940.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

配置visualsvn提交后自动邮件通知

参考: https://blog.csdn.net/wiker_yong/article/details/10334967 # -*- coding: utf-8 -*- import sys import os import smtplib from email.mime.text import MIMEText from email.header import Headermail_host smtp.163.com #发送邮件的smtp地址 mail_us…

Swift Vapor 教程(查询数据、插入数据)

上一篇简单写了 怎么创建 Swift Vapor 项目以及在开发过程中使用到的软件。 这一篇写一个怎么在创建的项目中创建一个简单的查询数据和插入数据。 注:数据库配置比较重要 先将本地的Docker启动起来,用Docker管理数据库 将项目自己创建的Todo相关的都删掉…

小程序中封装下拉选择框

小程序中没有现成的下拉选择组件&#xff0c;有个picker组件&#xff0c;但是是底部弹出的&#xff0c;不满足我的需求&#xff0c;所以重新封装了一个。 封装的下拉组件 html部分&#xff1a; <view class"select_all_view"><!-- 内容说明&#xff0c;可…

es6中标签模板

之所以写这篇文章&#xff0c;是因为标签模板是一个很容易让人忽略的知识点 首先我们已经非常熟悉模板字符串的使用方法 const name "诸葛亮" const templateString hello, My name is ${name}标签模板介绍 这里的标签模板其实不是模板&#xff0c;而是函数调用…

简单的JavaScript去下载转换为Base64的PDF文件

新建一个文件&#xff0c;内容填写如下&#xff0c;然后保存为 .html 类型的文件 再用浏览器打开&#xff0c;就会是下面这样子&#xff1a; 图一红色textarea里面&#xff0c;可以将PDF文件转换成BASE64位后的内容贴进去&#xff0c;点击下载时&#xff0c;就可以直接下载成PD…

腾讯云幻兽帕鲁Palworld服务器价格表,2024年2月最新

腾讯云幻兽帕鲁服务器价格32元起&#xff0c;4核16G12M配置32元1个月、96元3个月、156元6个月、312元一年&#xff0c;支持4-8个玩家&#xff1b;8核32G22M幻兽帕鲁服务器115元1个月、345元3个月&#xff0c;支持10到20人在线开黑。腾讯云百科txybk.com分享更多4核8G12M、16核6…

使用SPM_batch进行批量跑脚本(matlab.m)

软件&#xff1a;spm8matlab2023bwin11 数据格式&#xff1a; F:\ASL\HC\CBF\HC_caishaoqing\CBF.nii F:\ASL\HC\CBF\HC_caishaoqing\T1.nii F:\ASL\HC\CBF\HC_wangdonga\CBF.nii F:\ASL\HC\CBF\HC_wangdonga\T1.nii clear spmdirD:\AnalysisApps\spm8; datadirF:\ASL\HC\CBF…

MySQL如何实时同步数据到ES?试试阿里开源的Canal

前言 前几天在网上冲浪的时候发现了一个比较成熟的开源中间件—— Canal 。在了解了它的工作原理和使用场景后&#xff0c;顿时产生了浓厚的兴趣。今天&#xff0c;就让我们跟随我的脚步&#xff0c;一起来揭开它神秘的面纱吧。 目录 前言 简介 工作原理 MySQL主备复制…

深度学习在智能交互中的应用:人与机器的和谐共生

深度学习与人类的智能交互是当前人工智能领域研究的热点之一。深度学习作为机器学习的一个重要分支&#xff0c;具有强大的特征学习和模式识别能力&#xff0c;可以模拟人脑的神经网络进行数据分析和预测。而人类的智能交互则是指人类与机器之间的信息交流和操作互动&#xff0…

ShardingSphere 5.x 系列【5】Spring Boot 3.1 集成Sharding Sphere-JDBC并实现读写分离

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Spring Boot 版本 3.1.0 本系列ShardingSphere 版本 5.4.0 源码地址&#xff1a;https://gitee.com/pearl-organization/study-sharding-sphere-demo 文章目录 1. 概述2. 使用限制3. 案例演示3.…

适合大型企业的云计算服务器有哪些?

随着云计算技术的不断发展&#xff0c;越来越多的企业开始采用云计算服务来降低成本、提高效率。对于大型企业而言&#xff0c;选择适合的云计算服务器非常重要&#xff0c;因为它将直接影响企业的业务运营和数据安全。本文将介绍适合大型企业的云计算服务器类型&#xff0c;以…

git常用一些操作

1. git status // 查看当前目录更新 2. git checkout -b <NEW_BRANCH> // 新切一个分支&#xff08;只在第一次操作的时候做&#xff0c;后面就不用做了&#xff09; 3. git pull origin <BRANCH_NAME> …