微码研究
差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录前一修订版后一修订版 | 前一修订版 | ||
微码研究 [2025/03/16 17:09] – [AMD 微码自由软件化相关研究与工具] pp | 微码研究 [2025/03/17 00:49] (当前版本) – [AMD 微码自由软件化相关研究与工具] pp | ||
---|---|---|---|
行 1: | 行 1: | ||
- | 本页面聚集了如何载入自定义微码的相关研究。 | + | 本页面聚集了如何载入自定义微码的相关研究。学术界或日常环境里没有明确翻译的直接使用原文词汇,有时为了避免歧义与叙述上的简洁也可能直接使用原文词汇。欢迎发送邮件到 inquiry AT fsfans DOT club 提供改进意见,或申请加入FSFans 直接贡献本wiki! |
====== AMD 微码自由软件化相关研究与工具 ====== | ====== AMD 微码自由软件化相关研究与工具 ====== | ||
2025年上半叶,谷歌的安全团队博客po出了一篇文章:{{: | 2025年上半叶,谷歌的安全团队博客po出了一篇文章:{{: | ||
+ | |||
+ | 使用Zentools和理解此次微码补丁漏洞时可以参考的中文文章: | ||
下面部分 使用Mistral Small 3 (SaaSS)并辅以人工修正来翻译 Zen and the Art of Microcode Hacking(请注意,翻译的这一段因为原文协议不明,现暂时假定为谷歌版权所有,转载此段翻译时请遵循fair use law (以及中华人民共和国现行法律《中华人民共和国著作权法》第二十四条的规定) | 下面部分 使用Mistral Small 3 (SaaSS)并辅以人工修正来翻译 Zen and the Art of Microcode Hacking(请注意,翻译的这一段因为原文协议不明,现暂时假定为谷歌版权所有,转载此段翻译时请遵循fair use law (以及中华人民共和国现行法律《中华人民共和国著作权法》第二十四条的规定) | ||
行 8: | 行 10: | ||
" | " | ||
- | I) 微码的创建:AMD生成一个新的微码补丁。该补丁以二进制块的形式交付给BIOS、操作系统和其他合作伙伴;该块中包含以下组件: | + | I) 微码补丁的构成:AMD生成一个新的微码补丁。该补丁以二进制块的形式交付给BIOS、操作系统和其他合作伙伴;该块中包含以下组件: |
* | * | ||
* 一个包含header的格式、其(作用)目标CPU的相关元数据、补丁创建日期和版本信息的header。 | * 一个包含header的格式、其(作用)目标CPU的相关元数据、补丁创建日期和版本信息的header。 | ||
* 一个 2048-bit RSA [[https:// | * 一个 2048-bit RSA [[https:// | ||
- | * 一个 2048-bit RSA 公钥的模 (0x10001 | + | * 一个 2048-bit RSA 公钥的模 (0x10001 |
* 一个 2048-bit 的公钥的[[https:// | * 一个 2048-bit 的公钥的[[https:// | ||
* 一个 bit 用来表示补丁剩下的部分是否是加密的。 | * 一个 bit 用来表示补丁剩下的部分是否是加密的。 | ||
* 一个由match registers和掩码值组成的数组,用于选择要修补的微码和指令。 | * 一个由match registers和掩码值组成的数组,用于选择要修补的微码和指令。 | ||
- | * 一个micro-ops数组,按四个“四元组”捆绑,每个四元组配有一个序列字,用于指示下一步执行的位置。 | + | * 一个micro-ops数组,按四个“四元组”捆绑,每个四元组配有一个sequence word,用于指示下一步执行的位置。 |
- | " | + | {{:: |
- | ====== Intel 微码自由软件化相关研究与工具 ====== | + | |
- | ====== | + | II) 微码补丁的验证: |
+ | |||
+ | III) 微码补丁的交付: | ||
+ | |||
+ | IV) 补丁的验证与安装: | ||
+ | |||
+ | BIOS 或操作系统将根据补丁 header 中的 CPU 标识符识别正确的微码补丁文件,并开始更新程序。 | ||
+ | |||
+ | 软件将微码补丁块的虚拟地址写入 [[https:// | ||
+ | |||
+ | 微码将补丁复制到(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:// | ||
+ | ====== Intel 微码自由软件化相关研究与工具 ====== |
微码研究.1742144992.txt.gz · 最后更改: 2025/03/16 17:09 由 pp