最近, 谷歌工程师宣布 有关被标识为严重漏洞的详细信息 CVE-2024 - 56161。 受洗归入 入口标志, 这个失败 允许逃避数字签名验证机制 在使用前四代 Zen 微架构的 AMD 处理器上进行微代码更新期间。
入口标志 影响多种处理器, 允许攻击者绕过确保微代码完整性的安全控制,可能为恶意修改硬件行为打开大门。
关于漏洞
此漏洞的根源在于使用 AES-CMAC 算法 在数字签名验证过程中,而不是使用受信任的哈希函数。 AMD 使用该算法对微码进行签名,使用私有 RSA 密钥并将公钥添加到补丁中。
验证过程 涉及处理器将制造过程中嵌入的公钥的哈希值与补丁中指定的密钥的哈希值进行比较。然而, 因为使用了 CMAC,它实际上不是一个哈希函数,而是一个认证码 消息传输时,出现了安全漏洞。
CMAC基于AES算法 并使用 XOR 运算来组合数据块,但由于它不是为抗碰撞而设计的,因此它允许知道加密密钥的攻击者计算出补偿输入变化的中间值,而操作结果则保持不变。
英特尔和 AMD 都设计了独特的基于 RISC 的微码指令集,虽然都没有记录,但在概念上与其他 RISC 指令集(如 ARM 或 RISC-V)类似。与软件一样,正确实现复杂的硬件是一项挑战;从历史上看,这导致了多个众所周知的错误,例如 1994 年英特尔奔腾处理器中的 FDIV 错误。
AMD 提供单一加密密钥 对于 AES-CMAC 从 Zen 1 到 Zen 4 的所有处理器,这意味着如果有人从一个 CPU 中提取出这个密钥,他们就可以将其应用于所有其他 CPU。事实上,研究人员发现这些处理器使用已知密钥,取自 NIST SP 800-38B 指南中的一个示例。
从理论上讲,这允许生成虚假补丁 通过将补丁的公钥替换为产生相同哈希值的公钥, 并选择数字签名的碰撞。 这种碰撞是通过在微代码中添加额外的看似随机的数据块来实现的,以便修改后的补丁保留 AMD 的原始数字签名。
为了解决这个问题为了探索操纵 AMD 处理器微代码的新方法,谷歌工程师 他们开发了 Zentool,用于微码补丁检查的组合工具集合,包括有限的反汇编、使用有限量的逆向工程汇编创建微码补丁。
Zentool 的设计目的是为了方便分析和修改微代码,提供一系列命令,允许从编辑参数和替换指令到将修改后的微码加载到CPU并纠正补丁的数字签名。
例如,“zentool edit”命令可以编辑微码文件中的参数,而“zentool print”显示有关微码内部结构的详细信息。此外,“zentool load”会将微代码加载到 CPU 中,“zentool resign”会重新计算数字签名,并考虑到所做的更改。此外,该软件包还包括 mcas 和 mcop 等实用程序,它们提供汇编器和反汇编器功能,可直接处理微码。
的能力 Zentool 允许开发人员准备和应用自己的补丁 在 AMD Zen 处理器上。作为说明性示例,已准备好一个补丁来修改 RDRAND 指令的逻辑。应用此补丁后,RDRAND 指令停止生成伪随机序列并开始持续返回数字 4,从而展示了修改微代码和改变处理器预期行为的强大功能。
值得一提的是 Zentool 附带详细指南 有关 AMD 微码中使用的 RISC86 微架构,以及解释如何创建自定义微码的指导说明。该指南展示了如何设计新的处理器指令、修改现有指令的行为以及将这些更改直接加载到 CPU 中。
最后,如果您有兴趣了解更多,可以查阅详情 以下链接。