Hacker News 中文摘要

RSS订阅

利用极长中断的系统管理模式漏洞 -- Exploiting System Management Mode with a very long interrupt

文章摘要

该文章介绍了一种利用超长机器指令攻击x86 CPU系统管理模式(SMM)的方法。通过让一个核心执行长时间指令而无法响应SMM中断请求,破坏SMM要求所有核心同步进入或退出安全模式的安全模型,从而绕过系统保护机制。

文章总结

好的,这是根据您的要求,对原文主要内容进行的中文重述,保留了关键细节,并删减了与主题无关的冗余内容(如大量重复的等待图示和部分技术细节的过度展开)。


文章标题: 利用超长指令打破CPU系统管理模式(SMM)的安全屏障

核心发现: 研究人员发现,仅通过执行一条异常漫长的CPU指令,就能破坏x86处理器中名为SMM(系统管理模式)的安全执行环境。SMM是一个高度特权、对操作系统透明的后台运行环境。

攻击原理: SMM的安全模型要求所有CPU核心要么同时进入SMM,要么同时退出。当一个核心因系统管理中断(SMI)进入SMM时,它会强制所有其他核心也进入。攻击的关键在于,让其中一个核心因为执行一条超长指令而“忙得不可开交”,无法响应进入SMM的请求。

具体流程如下: 1. 核心0开始执行一条耗时极长的指令。 2. 核心1触发SMI,并邀请核心0加入SMM。 3. 核心1进入SMM,并等待核心0。 4. 由于核心0的指令尚未完成,它无法响应SMI。核心1在等待约1秒后超时,放弃等待。 5. 核心1独自执行SMM中的秘密代码,然后退出SMM。 6. 此时,核心0才完成指令,进入SMM。

关键点: 此时,核心1已退出SMM,而核心0仍在SMM中。这就打破了SMM的同步性,为核心1攻击核心0创造了条件。要实现这一点,需要一条耗时超过1秒的指令,因为x86固件在SMM入口处有一个约1秒的等待超时机制。

概念验证(PoC): 研究人员在Zen 3架构的Ryzen 7 5800H处理器上实现了PoC。他们利用一条从特定慢速MMIO(内存映射输入输出)地址(0xfcc68860)进行宽位加载的指令(vmovdqu)来制造延迟。

  • 受害者核心: 持续执行这条超慢的加载指令,使其无法响应SMI。
  • 攻击核心: 触发大量SMI,并监控每个核心的SMI计数器。如果计数器出现差异,就证明有核心在SMM执行期间仍在运行(即未进入SMM)。

安全影响: SMM的安全性依赖于“它运行时,其他任何代码都不能运行”的假设。此前存在大量SMM中的TOCTOU(检查时间与使用时间)漏洞,但由于攻击需要有一个外部核心在SMM执行期间修改共享内存,而SMM的同步机制阻止了这一点,因此这些漏洞被认为需要物理访问或恶意硬件才能利用。

SMI去同步化 技术移除了这个前提条件。现在,无需物理访问或特殊硬件,一个普通软件核心就可以在SMM执行期间运行,从而使得那些“休眠”的SMM漏洞变得可以从软件层面利用。

缓解措施: 目前没有明确的缓解方案。保持超时机制,同步性容易被打破;移除超时,一个卡住的核心会在首次SMI时导致系统挂起;增加超时,会严重影响多核平台的性能。因此,推荐的最佳“解决方案”是:不要执行任何超长指令。

移植到其他平台: PoC中的指令和地址是针对特定处理器(Zen 3 Ryzen 7 5800H)的。要在其他平台上复现,需要: 1. 使用工具(如mmiotic)找到平台上的慢速MMIO区域。 2. 尝试更宽的加载指令(如从xmm升级到ymmzmm),使延迟超过SMM超时时间。 3. 如果单条MMIO读取不够慢,需要寻找其他路径上耗时极长的指令。

作者: 该研究由Christopher Domas(@xoreaxeaxeax)完成。

评论总结

评论总结

主要观点与论据

1. 技术漏洞与攻击风险 - 评论指出SMM(系统管理模式)存在安全漏洞,通过超长指令可绕过1秒超时限制(评论2、6) - 攻击需内核权限,但可能被利用为拒绝服务攻击(评论11) - 关键引用: - "Unclear why there is a 1 second timeout at all... Presumably the patch for that will be to make it an infinity timeout."(评论2) - "If firmware can strictly bound SMM execution time, would that actually eliminate this class of attack, or just turn it into a crash/DoS instead?"(评论11)

2. 对SMM设计的批评 - 认为SMM是糟糕的设计,应使用独立管理核心(评论8) - 批评超时机制违背系统设计原则,可能导致更难调试的故障(评论10) - 关键引用: - "It's nice to see SMM is as terrible idea now as it was at moment of conception... All coz they can't be arsed to put a tiny management core separate from the rest"(评论8) - "Continuing after arbitrary timeouts usually violates invariants... Better for the system to hang so you can debug it"(评论10)

3. 用户控制权争议 - 认为SMM是用户无法控制的"邪恶"模式,可能用于DRM、后门等用户敌对目的(评论12) - 关键引用: - "Technically this is not a vulnerability because you need to be root. I would rather call it 'taking back control of your hardware'."(评论12) - "SMM is an evil thing because the user cannot control it or look into SMM memory region."(评论12)

4. 项目趣味性与背景 - 评论赞赏README的幽默风格和项目趣味性(评论1、5) - 提及相关项目"Assembly Hall of Shame"(评论7) - 关键引用: - "I'm amused at the lengths the readme goes to in order to drive home the fact that this needs to be a LOOOOOOOOOOOOOOOOOOOONG instruction"(评论1) - "The Assembly Hall of Shame takes the opposite approach: searching for the absolute floor of single-instruction performance."(评论7)

5. 项目突然爆红现象 - 有评论质疑该GitHub账号为何近期突然获得大量关注(评论9) - 关键引用: - "Almost nothing from this GitHub profile posted until the last four days... Why is this GitHub profile suddenly getting massive attention?"(评论9)

平衡性总结

  • 支持方:认为项目有趣、技术性强,展示了CPU架构的边界情况
  • 反对方:批评SMM设计缺陷,担忧安全风险,质疑用户控制权
  • 中立/技术性:讨论超时机制的技术细节,分析攻击可行性