随机数、XKCD 漫画与 ZEN 系列最新 CPU 漏洞 CVE-2024-56161

作者:Sender Su  来源:本站  发布日期:2025-02-13  最后修改日期:2025-02-14

敏锐和前瞻能力很重要,尤其对于网络安全。

笔者之前已曾强调过漏洞补丁管理需要延伸到 CPU 微码补丁:

挖深网络安全的兔子洞:CPU 微码补丁管理

刚刚发布不久的漏洞公告: CVE-2024-56161[1],又再一次说明了漏洞补丁管理务必需要延伸纳入 CPU 微码补丁。

article banner

笔者:国际注册信息系统审计师、软考系统分析师、软件工程硕士

该漏洞按 CVSS 3.1 评分7.2,关系到 AMD ZEN 系列 CPU 发布的微码更新[2]。

漏洞由 GOOGLE 安全研究人员发现[3],原理在于 CPU 使用了不安全的哈希函数去验证微码补丁的签名,导致允许具备本地管理员权限的攻击者(位于 VM 之外,RING 0 层)加载有害的微码补丁。

研究员通过测试证实,虽然该漏洞首次发现是在 ZEN 4 CPU 上,但实际从 ZEN 1 到 ZEN 4 CPU 都受影响,即包括有:

  • EPYC 7001 (Naples)

  • EPYC 7002 (Rome)

  • EPYC 7003 (Milan/Milan-X)

  • EPYC 9004 (Genoa/Genoa-X/Bergamo/Siena)

需要注意一点是海光 CPU 源自 AMD ZEN 1。但笔者条件所限,未知该 BUG 是否也存在,只能提醒一下相关读者注意了。

虽然漏洞被利用需要前提,但若实施成功,其危害性相当大,可以使攻击者攻破 AMD 最新版本的 Secure Encrypted Virtualization[4] 即 SEV-SNP(Secure Nested Paging)[5] 所保护的机密计算负载,以及还能攻破 Dynamic Root of Trust Measurement[6],简单说就是能从根本上沦陷掉整台计算机。

GOOGLE 安全研究员为此还专门开发了一个验证程序:该程序通过微码补丁更新的方式改变了 RDRAND 指令的行为,使得 CPU 返回的随机数总是 4[7]。

RDRAND 是 Intel 在 Ivy Bridege 架构中新增的 CPU 指令,利用 CPU 内部的热噪声、时序中断计数等参数产生真随机数,被广泛采信和利用于各类加密算法环境。

这个指令如果失效或被控制,这条硬件指令随机数就不再随机,甚至还不如传统的伪随机数算法产生的随机数了。

AMD 基于 X86 指令集的授权关系也实现了这条指令。

这事情有趣在于“总是返回4的随机数函数”是个梗,创意来自于著名的漫画站 XKCD,也就是如下这篇:

XKCD 221 - random_number

来源:https://xkcd.com/221/

稍作解释:如图的 C 语言函数命名为“获得随机数”,只有一条返回数值4的命令,且注释是“以公平的掷骰子选出,保证随机”,哈哈哈......

其实熟悉伪随机数算法原理的读者都知道,通常只要算法种子未知,使用者就难以否定伪随机数不随机,即使它一直给出的都是同一个数......或许下一个就不是这个数呢?

Dilbert - Random Number Generator

这就是另一著名漫画系列 Dilbert 回应给 XKCD 的创作:图1上,小恶魔对 Dilbert 说,看,这就是我们自己的随机数发生器。图2,Dilbert 仔细一看,原来是另一个小恶魔在不断地说“9 9 9 9 9 9 ......”。图3,Dilbert 不禁质疑:“你们确认那真的是随机的?” “嗯,这就是随机性的问题所在,你永远无法确认。”小恶魔回复。

所以,即使 CPU 的 RDRAND 指令总是返回 4 这么荒谬,但这数来自 CPU,又有几个人有能力怀疑并确认 CPU 已经被黑掉呢?

紧跟厂商微码更新打补丁这件事相信笔者不用强调了,但检查方法值得关注。

比如如果是用 Microsoft Windows ,可以通过访问注册表的方法检查当前应用的补丁版本,位置路径在:

HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System\CentralProcessor\0

检查其中的二进制项目:

Update Revision 

如图:

Windows Regedit for CPU Update Revision

(嗯,笔者手提电脑用的 Intel,此图仅为示意)

又如果是用 Linux ,可以在 root 用户下通过如下命令:

head -n7 /proc/cpuinfo

检查输出内容中的 microcode 项目的值。

将查询获得的版本值与 AMD 在 advisory 页面[2]提供的版本信息进行比较,即可判定微码补丁更新是否已经实施到位。

根据 AMD,与本漏洞相关的最新微码补丁版本如下:

Code Name

Family

CPUID

Naples

AMD EPYC™ 7001 Series

0x00800F12

Rome

AMD EPYC 7002 Series

0x00830F10

Milan

AMD EPYC 7003 Series

0x00A00F11

Milan-X

AMD EPYC 7003 Series

0x00A00F12

Genoa

AMD EPYC 9004 Series

0x00A10F11

Genoa-X

AMD EPYC 9004 Series

0x00A10F12

Bergamo/Siena

AMD EPYC 9004 Series

0x00AA0F02

最后值得注意的是,这个补丁的发现、修补和公开三阶段的时间跨度相当长,分别是:

  • 报告日期:2024年9月25日

  • 修补日期:2024年12月17日

  • 公开日期:2025年2月3日

据 Google 安全研究员的说明,延迟披露的原因在于供应链的深度导致修补的过程很长,且目前仍不适合公布所有漏洞细节,具体情况将在2025年3月5日再发布。

~ 完 ~

注:题头图由笔者自行拍摄。

参考引用:

[1] NVD - CVE-2024-56161

https://nvd.nist.gov/vuln/detail/CVE-2024-56161

[2] AMD SEV Confidential Computing Vulnerability

https://www.amd.com/en/resources/product-security/bulletin/amd-sb-3019.html

[3] AMD: Microcode Signature Verification Vulnerability

https://github.com/google/security-research/security/advisories/GHSA-4xq7-4mgh-gp6w

[4] AMD Secure Encrypted Virtualization (SEV)

https://www.amd.com/en/developer/sev.html

[5] AMD SEV-SNP

https://www.amd.com/content/dam/amd/en/documents/epyc-business-docs/white-papers/SEV-SNP-strengthening-vm-isolation-with-integrity-protection-and-more.pdf

[6] AMD Dynamic Root of Trust Measurement

https://www.amd.com/content/dam/amd/en/documents/epyc-technical-docs/user-guides/58453.pdf

[7] security-research/pocs/cpus/entrysign at master · google/security-research

https://github.com/google/security-research/tree/master/pocs/cpus/entrysign

[8] XKCD 221: Random Number

https://xkcd.com/221/

点赞和转发都是免费的↓ 

本栏目相关
  •  2025-02-13 随机数、XKCD 漫画与 ZEN 系列最新 CPU 漏洞 CVE-2024-56161
  •  2025-02-01 CVE-2024-3661,又可以考验发行版补丁及时性了
  •  2022-05-11 CIS-CAT 配置评估工具介绍及操作实践
  •  2022-03-16 Windows 系统安全基线及软件工具介绍
  •  2022-03-11 安装RHEL/CentOS时如何选择配置安全策略?
  •  2022-08-28 网络攻防中的色彩象征
  •  2023-02-27 注意:TightVNC 2.8.75 释出,修补 zlib 漏洞 CVE-2022-37434
  •  2023-05-08 如何把Windows的事件日志收集到Syslog日志服务器?
  •  2022-03-25 从甲方角度介绍“CIS互联网安全中心”
  • 本站微信订阅号:

    微信订阅号二维码

    本页网址二维码: