摘要
研究人员在 NVIDIA GA100 模块上发现了一个电压故障注入(Voltage Fault Injection, VFI)漏洞,该漏洞允许通过爆破保险丝来随意解除硬件限制。利用此方法,一张 CMP 170HX 8GB 挖矿卡被成功转换为功能完整的 A100-80G。

测试数据显示,解锁后的卡片性能实际上比零售版 A100 快约 1.2 倍。这是因为所有功能性流多处理器(SM)均被启用(数量约为 120-126 个,取决于晶圆良率),而 NVIDIA 出于安全考虑在所有生产型 A100 卡上仅启用了 108 个 SM。此外,该方法还可解锁 NVLink、PCIe Gen4、NVJPG、NVDEC 和 MIG 等原本在 CMP 系列中被禁用的功能,尽管 NVJPG/NVDEC/MIG 的具体表现尚未经过专项测试。
背景与致谢
NVIDIA 利用电子保险丝(eFuse)进行产品细分、实施安全功能及其他访问控制机制。在标准的安全设计中,熔断的保险丝应始终导致更受限的状态,因为物理熔断不可逆且难以经济地恢复。然而,GA100 的设计存在一个反直觉的特性:通过“吹”更多的保险丝(即写入新的 FF 记录),反而可以放松限制。
本研究建立在 Jon Pry 及其他研究人员对 GA100 芯片深入研究的基础之上。相关发现已提前向 NVIDIA 产品安全团队披露。鉴于另一名安全研究人员独立发现了相同漏洞,公开这些信息被认为符合公众利益。
GA100 架构与 SKU 差异
GA100 是 NVIDIA 的核心计算模块,衍生出近 20 种不同的 SKU,其中 A100 最为知名。未裁剪的 GA100 模具拥有 128 个 SM、12 个帧缓冲分区(FBP)、5 个 NVDEC 单元以及 PCIe Gen4 x16 控制器,并根据配置搭载 4-6 个 HBM 堆栈。
CMP 170HX 是一款以太坊挖矿卡,名义上提供 8GB 或 10GB 显存,但其内部实际封装了 80GB 或 40GB 的 HBM 内存。此前已有软件手段(如 cmpunlocker)部分解锁了 GA100 的能力,但本次研究通过硬件层面的 VFI 技术实现了更彻底的解锁。
| 规格项目 | CMP 170HX (出厂状态) | 软件解锁 (cmpunlocker) | VFI 硬件解锁 (GA100) |
|---|---|---|---|
| 显存容量 (8GB SKU) | 8 GB | 64 GB | 64 - 80 GB |
| 显存容量 (10GB SKU) | 10 GB | 40 GB | 40 - 48 GB |
| SM 数量 | 70 | 70 | 120 - 128 |
| PCIe 版本 | Gen 1 | Gen 2 | Gen 4 |
| NVLink | 禁用 | 禁用 | 启用 |
| ECC | 禁用 | 禁用 | 启用 |
| MIG (多实例 GPU) | 禁用 | 禁用 | 启用 |
| NVDEC 单元 | 0 | 0 | 5 |
硬件限制机制:保险丝控制器
GA100 内部的保险丝控制器包含 16,384 个 eFuse(分为 512 行,每行 32 个)。这些保险丝决定了模块的功能选项字(Option Words)。每个 eFuse 有两种状态:吹断(1)或未吹断(0)。保险丝区域分为四类:
- 常规保险丝(第 0-221 行):直接映射到选项字,具有内置冗余性。一旦吹断,除后续 RIR 修复外无法撤销。
- FF 保险丝(第 222-487 行):采用类似 JTAG 链式的格式编码有效的选项字。这是 VFI 解锁的关键区域。通过编写新的 FF 行,可以覆盖旧的设置,从而清除之前的禁用标志。
- IFF 保险丝(第 487-512 行):用于在飞行中重新编程保险丝控制器选项字,通常在生产卡中不可访问。
- RIR 保险丝:设计者预期的“保险丝修复”机制,用于替换主 512 行中标识的单一保险丝值。
关键的控制保险丝位于第 0 和 1 行,它们指定了高度敏感选项字的值,决定 GA100 是作为受限的挖矿卡还是全功能的 AI 数据中心加速卡运行。
FF 记录格式与选项字映射
每个 FF 行是一个 32 位记录:第 0–4 位选择链,第 5 位区分 FF/IFF,第 6–15 位选择 16 位块,第 16–31 位提供新值。如果两个记录指向同一链和区块,后写入的记录生效。这意味着可以通过添加新的 FF 记录来清除以往设置的禁用位,而无需物理破坏原有保险丝。
通过对不同 GA100 SKU 的 FF 值和有效选项字进行交叉比较,研究人员推断出了以下关键功能位的映射关系:
NV_FUSE_OPT_FBIO_DISABLE:存储器 I/O 地板清扫(Floorsweeping)NV_FUSE_OPT_FBPA_DISABLE:记忆分区地板清扫NV_FUSE_OPT_TPC_GPCx_DISABLE:GPC 内的 TPC 屏蔽掩码NV_FUSE_OPT_PES_DISABLE:工业地板清扫NV_FUSE_OPT_ROP_L2_DISABLE:ROP/L2 地板清扫NV_FUSE_OPT_NVLINK_DISABLE:NVLink 禁用掩码NV_FUSE_OPT_DISABLE_GEN3_SPEED/PCIE_MAGIC_BITS:PCIe 速度限制NV_FUSE_OPT_SYS_PIPE_DISABLE:MIG 启用的管道
地板清扫(Floorsweeping)机制
NVIDIA 使用选项字来控制“地板清扫”信号,使芯片上的特定功能块不可达并可能断电。实验表明,地板清扫行为与保险丝控制器中的有效状态字紧密对应,延迟极低。
以 FBP 地板清扫为例:在某张 8GB CMP 卡上,OPT_FBP_DISABLE 值为 0x852,屏蔽了 FBP 1、4、6 和 11。其中 6 和 11 因物理缺陷被标记为 OPT_FBP_DEFECTIVE (0x840)。通过 VFI 写入新的 FF 行将禁用掩码降低至 0x840 后,FBP 1 和 4 不再被屏蔽,变得可读写,而有缺陷的 6 和 11 保持禁用。这使得 12 个 FBP 中有 10 个可用。
虽然 FF 写入可以“取消”地板清扫,但要完全释放硬件潜力,还需结合驱动层的配置修改。例如,默认的帧缓冲几何配置可能只使用部分 HBM 堆栈。通过修改 FBPA_CFG、SM_SPEED_SELECT 等特性配置寄存器,配合解锁后的 FF 保险丝,即可实现功能上等同于 A100-80G 的效果。
实现 FF 爆破的技术路径
理论上,若能任意爆破 FF 保险丝,任何 GA100 均可根据晶圆良率和内存配置解锁至最大能力。然而,NVIDIA 设置了多重防护:
- 保险丝控制器内部有一个有限状态机(FSM),通过
FUSECTRL_STATE位指示当前状态。 - 除非清除特定的选项字,否则对 FF 区域(非 FPF 区域,即第 96-221 行以外)的写入请求会被忽略。只有现场可编程保险丝(FPF)区域的写入才会生效。
- 关键保护位是
OPT_SECURED_BURN_FEATURE_ENABLE(SBFE)。在所有生产卡中,SBFE 默认为 1,此时仅允许爆破 FPF 保险丝。当 SBFE 为 0 时,才允许任意地址的保险丝编程。
目前尚无已知方法能在 HS 上下文中直接爆破 FF 保险丝(当 SBFE=1 时)。因此,研究人员采用了电压故障注入(VFI)技术。通过精确控制电压瞬态,旨在绕过保险丝控制器的安全检查,强制其进入允许 FF 写入的状态或欺骗其执行非法操作。这一过程需要深入理解保险丝控制器的时序逻辑和安全边界。





