跳至内容
Free Software Fans Wiki
用户工具
注册
登录
站点工具
搜索
工具
显示页面
过去修订
导出 PDF
Export Page to HTML/PDF
反向链接
最近更改
媒体管理器
网站地图
注册
登录
>
最近更改
媒体管理器
网站地图
您的足迹:
微码研究
本页面只读。您可以查看源文件,但不能更改它。如果您觉得这是系统错误,请联系管理员。
本页面聚集了如何载入自定义微码的相关研究。学术界或日常环境里没有明确翻译的直接使用原文词汇,有时为了避免歧义与叙述上的简洁也可能直接使用原文词汇。欢迎发送邮件到 inquiry AT fsfans DOT club 提供改进意见,或申请加入FSFans 直接贡献本wiki! ====== AMD 微码自由软件化相关研究与工具 ====== 2025年上半叶,谷歌的安全团队博客po出了一篇文章:{{:zen_and_the_art_of_microcode_hacking_-_google_bug_hunters.pdf |Zen and the Art of Microcode Hacking}},公开了自定义微码的原理,载入方法,与使用EntrySign漏洞载入自定义微码的[[https://github.com/google/security-research/blob/master/pocs/cpus/entrysign/zentool/docs/intro.md|Zentool]] 工具,为现在(截至2025年3月)市面上流通的Zen1-Zen4架构AMD CPU提供了载入自由软件意义上的微码的可能性。 使用Zentools和理解此次微码补丁漏洞时可以参考的中文文章: [[https://www.wavecn.com/content.php?id=483| 自己改 CPU 微码:ZENTOOL,CVE-2024-56161 的后续 ]](wavecn.com [[https://www.wavecn.com/content.php?id=1|版权声明]] [[https://www.wavecn.com/content.php?id=2|免责声明]]) 下面部分 使用Mistral Small 3 (SaaSS)并辅以人工修正来翻译 Zen and the Art of Microcode Hacking(请注意,翻译的这一段因为原文协议不明,现暂时假定为谷歌版权所有,转载此段翻译时请遵循fair use law (以及中华人民共和国现行法律《中华人民共和国著作权法》第二十四条的规定) "微码补丁为CPU架构师在遇到新硬件漏洞并需要修复时提供了大量的灵活性。然而,英特尔和AMD利用加密防止补丁的逆向工程,并使用数字签名防止加载不可信的微码补丁,这同时防止了恶意软件开发者和研究人员运行自定义微码。AMD微码补丁的验证和加载过程包括如如下4个步骤: I) 微码补丁的构成:AMD生成一个新的微码补丁。该补丁以二进制块的形式交付给BIOS、操作系统和其他合作伙伴;该块中包含以下组件: * * 一个包含header的格式、其(作用)目标CPU的相关元数据、补丁创建日期和版本信息的header。 * 一个 2048-bit RSA [[https://wikiless.tiekoetter.com/wiki/%E5%85%AC%E9%92%A5%E5%AF%86%E7%A0%81%E5%AD%A6%E6%A0%87%E5%87%86|PKCS]] #1 签名。 * 一个 2048-bit RSA 公钥的模 (0x10001 被用作模幂运算中的幂). * 一个 2048-bit 的公钥的[[https://wikiless.tiekoetter.com/wiki/%E8%92%99%E5%93%A5%E9%A9%AC%E5%88%A9%E7%AE%97%E6%B3%95?lang=zh-cn|蒙哥马利算法]]下的模逆元(用来简化RSA的模运算)。 * 一个 bit 用来表示补丁剩下的部分是否是加密的。 * 一个由match registers和掩码值组成的数组,用于选择要修补的微码和指令。 * 一个micro-ops数组,按四个“四元组”捆绑,每个四元组配有一个sequence word,用于指示下一步执行的位置。 {{::microcode-patch_structure.png|}} II) 微码补丁的验证: AMD 使用其 RSA 私钥签署新的微码补丁,该私钥对应着嵌入在补丁中的公钥。稍后,在补丁验证过程中,CPU 将对 RSA 公钥进行散列值计算,并验证其是否与在制造过程中硬编码到 CPU 中的 AMD 公钥的散列值匹配。这旨在确保只有(来自于AMD官方的)原始 RSA 密钥对才能用于签署微码补丁。 III) 微码补丁的交付: AMD 将微码补丁交付给 各 OEM、操作系统平台和其他合作伙伴进行验证和分发。 IV) 补丁的验证与安装: 收到新补丁后,微码将在运行时或下次重启时加载。 BIOS 或操作系统将根据补丁 header 中的 CPU 标识符识别正确的微码补丁文件,并开始更新程序。 软件将微码补丁块的虚拟地址写入 [[https://wikiless.tiekoetter.com/wiki/Model-specific_register?lang=en|MSR]] 0xc0010020,这将指示 CPU (里已存在的) 微码开始执行微码更新程序。 微码将补丁复制到(CPU的)内部内存(Internal Memory)并验证补丁的 CPU 标识符与实际硬件的标识符是否匹配。 微码开始检查补丁的版本是否比当前已安装的补丁版本更旧。如果是,则拒绝该补丁——这可以防止版本回退攻击。 当前补丁使用 AES-CMAC 算法对 RSA 公钥进行散列值计算,并确认散列值与 AMD 在制造芯片时融入的值匹配。 补丁对其所含内容(match register、指令掩码和补丁指令)进行散列值计算。[1] 补丁内容中所含 RSA 公钥和模逆元对 RSA PKCS #1 签名进行解密。其结果是当前补丁内容的 padded AES-CMAC 散列值。[2] 如果signed hash [2] 与计算出的散列值 [1] 相匹配,则将补丁内容复制到internal CPU patch RAM中。否则,该补丁被(微码更新程序)拒绝。 最后,MSR 0x8b 中的值将被更新以反映新安装的微码补丁的版本。" 那么这个 EntrySign Entry在哪呢? 现在我稍微化用一下google此篇论文原文的描述,Zen 世代的 AMD CPU 基本上是使用了一个标准的 [[https://datatracker.ietf.org/doc/html/rfc3447#page-32|RSASSA-PKCS1-v1_5]] 加密算法,但是在散列值计算函数上,AMD 方面起初没有使用协议标准里所推荐的那些,而选取了一个相比(推荐算法)更容易手动操控,碰撞出(与正常计算流程下)同样的散列值的算法(CMAC)。 ====== Intel 微码自由软件化相关研究与工具 ======
微码研究.txt
· 最后更改: 2025/03/17 00:49 由
pp
页面工具
显示页面
过去修订
反向链接
导出 PDF
Export Page to HTML/PDF
回到顶部