4、电压毛刺基础:电源网络特性、毛刺参数(幅度、宽度、相位)、对芯片逻辑的影响

电压毛刺(Voltage Glitch)是硬件故障注入领域中最经典、成本最低、效果最直接的手段之一。其核心思想是在芯片正常工作所需的电源轨上,人为引入一个短暂、可控的电压跌落或过冲,使芯片内部逻辑在特定时钟沿附近产生建立时间(Setup Time)或保持时间(Hold Time)违例,从而诱发指令跳过、数据篡改或控制流劫持。与激光注入或电磁注入相比,电压毛刺不需要昂贵的设备,也不需要开盖处理(部分场景仍需去除封装电容),因此成为安全评估人员、渗透测试工程师和芯片设计验证团队的首选入门技术。本章将围绕电源网络特性、毛刺参数建模以及对芯片逻辑的影响机制展开系统讲解,为后续的时钟毛刺和激光注入打下共同的理论基础。

电压毛刺注入系统与芯片逻辑影响链路 电源网络 DC-DC / LDO VDD=1.2V / 3.3V 去耦电容 100nF+4.7µF 毛刺注入源 MOSFET开关 / 运放 幅度ΔV / 宽度Δt 相位φ(相对时钟沿) 目标芯片 CPU / MCU / FPGA 内部逻辑门 / 触发器 时钟树 / 复位逻辑 VDD VDD_GLITCH 时钟源 CLK 24MHz / 100MHz CLK 毛刺参数示意波形 VDD_nom ΔV Δt φ CLK沿 对芯片逻辑的影响 建立时间违例 数据采样错误 指令跳变 保持时间违例 数据竞争 寄存器亚稳态 复位/时钟扰动 PC跳转异常 看门狗误触发 安全机制绕过 固件签名跳过 访问控制失效

4.1 电源网络特性:从PCB到芯片内部的阻抗路径

要理解电压毛刺为何能影响芯片逻辑,首先必须建立电源分配网络(PDN,Power Distribution Network)的完整视图。从PCB上的稳压器输出到芯片内部晶体管节点,电源路径上存在一系列寄生电阻、电感和电容。这些寄生参数决定了芯片实际感受到的电压波动幅度和响应速度,也决定了外部注入的毛刺在到达核心逻辑之前会被衰减多少。

典型的电源网络包含以下层级:稳压器(DC-DC或LDO)→ PCB走线/电源平面 → 封装引线/焊球 → 芯片内部电源网格(Power Grid)→ 标准单元供电端(VDD/VSS)。每一层都有其主导的寄生参数:PCB平面以低阻抗(毫欧级)和分布电容为主;封装引线引入纳亨级电感和毫欧级电阻;芯片内部电源网格则呈现RC分布式网络特性。对于故障注入而言,最关键的参数是电源网络的阻抗随频率变化的曲线(Z(f)),以及去耦电容的谐振点。

当注入一个快速下降沿(例如上升时间小于10ns)的毛刺时,电源网络中的寄生电感会阻碍电流的瞬时变化,导致芯片VDD引脚处出现明显的电压跌落。而芯片内部的大容量去耦电容(通常为片上MOS电容和封装电容)会试图维持电压稳定,形成RC放电回路。毛刺的最终幅度取决于注入源的驱动能力、电源网络的阻抗分压关系以及去耦电容的储能大小。因此,同一块板子上不同位置的电源测试点,测得的毛刺波形可能差异巨大——这正是许多初学者在复现实验时遇到“时灵时不灵”的根本原因。

关键工程认知:电压毛刺注入的“有效位置”不是稳压器输出端,而是芯片电源引脚附近。在PCB设计时,应预留靠近VDD引脚的测试点(TP)和可焊接的注入点(如0Ω电阻焊盘)。对于BGA封装芯片,通常需要在PCB背面过孔处注入,或者通过去除部分去耦电容来降低毛刺衰减。

4.2 毛刺参数建模:幅度、宽度、相位

电压毛刺可以用三个核心参数完整描述:幅度(Amplitude,ΔV)、宽度(Width,Δt)和相位(Phase,φ)。这三个参数共同决定了毛刺对芯片逻辑的影响效果。下表给出了典型参数范围和对应的影响特征:

参数 定义 典型范围 影响特征
幅度 ΔV 电压跌落的深度(相对标称VDD) 100mV ~ 800mV(对1.2V内核) 幅度越大,逻辑门延迟增加越显著;超过临界值导致逻辑错误
宽度 Δt 电压低于阈值持续的时间 1ns ~ 100ns 宽度需覆盖至少一个时钟周期内的关键路径传播窗口;过短可能被去耦电容吸收
相位 φ 毛刺起始点相对目标时钟沿的时间偏移 0° ~ 360°(或相对时钟沿的ns级偏移) 决定毛刺影响的是建立时间窗口还是保持时间窗口;相位扫描是寻找敏感窗口的关键手段

在实际注入实验中,三个参数并非独立作用。例如,一个幅度为300mV、宽度为5ns的毛刺,在相位对准时钟上升沿前2ns时,可能恰好导致关键路径上的数据无法在建立时间内到达,从而触发指令跳过;而同样的毛刺如果相位偏移到时钟沿后3ns,则可能影响保持时间,导致数据采样错误。因此,参数扫描(Parameter Sweep)是电压毛刺注入的标准方法论:固定两个参数,扫描第三个参数,记录芯片行为变化,绘制“故障地图”(Fault Map)。

4.3 对芯片逻辑的影响机制:时序违例与状态扰动

电压毛刺对芯片逻辑的影响本质上是时序违规。CMOS数字电路的正确工作依赖于信号在时钟沿前后满足建立时间(Tsetup)和保持时间(Thold)约束。当电源电压下降时,PMOS/NMOS晶体管的导通电流减小,逻辑门的传播延迟(Tpd)增大。具体而言,延迟增加与电压下降呈近似线性关系:VDD下降10%,门延迟约增加15%~25%(具体取决于工艺节点和温度)。

当毛刺导致关键路径(Critical Path)上的组合逻辑延迟超过时钟周期减去建立时间时,触发器(Flip-Flop)就会采样到尚未稳定的数据,产生建立时间违例。此时,芯片可能表现出以下行为:

  • 指令跳过(Instruction Skip):CPU在取指阶段采样到错误数据,执行了非预期的指令或直接跳过某条指令。
  • 数据篡改(Data Corruption):内存或寄存器写入错误值,导致后续计算产生错误结果。
  • 控制流劫持(Control Flow Hijacking):程序计数器(PC)被写入攻击者可控的地址,跳转到任意代码位置。
  • 安全机制失效(Security Bypass):固件签名验证、密码比较、访问控制检查等逻辑被跳过或错误通过。

值得注意的是,并非所有毛刺都会导致可见的错误。芯片内部存在大量的时序余量(Timing Margin),短于一定宽度的毛刺可能被去耦电容完全吸收,或者虽然造成了局部延迟增加但未超过时序余量。此外,现代芯片普遍包含电压监控器(BOD,Brown-Out Detector)和复位电路,当电压低于阈值时会触发系统复位,这反而会掩盖毛刺注入的效果。因此,攻击者通常需要精细调节毛刺参数,使其恰好落在“既不触发复位、又能造成逻辑错误”的窗口内。

4.4 实战案例:针对STM32F103的电压毛刺注入实验

为了将上述理论落地,我们以一个经典的实验场景为例:对STM32F103微控制器(ARM Cortex-M3内核,1.8V~3.6V供电,典型3.3V)进行电压毛刺注入,目标是绕过Flash读保护(RDP)检查。该实验在安全评估实验室中具有典型代表性。

实验环境与约束:

  • 目标板:自制STM32F103最小系统板,VDD引脚外接100nF+10µF去耦电容,预留注入点(0Ω电阻焊盘)。
  • 注入设备:基于MOSFET(如IRF540N)的开关电路,由FPGA产生精确时序控制信号,毛刺宽度可调(1ns~100ns),幅度通过可调LDO控制。
  • 触发条件:GPIO引脚输出高电平作为“开始Flash读取”的触发信号,毛刺注入延迟(即相位)由FPGA可编程延迟线控制。
  • 目标现象:RDP等级从Level 1降为Level 0,或读取到受保护的Flash内容。

初始现象与问题:初次实验时,无论如何调节毛刺参数,目标芯片要么无反应,要么直接进入复位(电压跌落触发BOD)。通过示波器测量芯片VDD引脚波形发现,注入的毛刺在到达芯片前已被板载去耦电容大幅衰减,实际到达芯片核心的电压跌落不足100mV。

分析与调整过程:

  1. 首先,移除VDD引脚附近的10µF大电容,仅保留100nF小电容,以降低毛刺衰减。
  2. 其次,将注入点从PCB远端移到靠近芯片VDD引脚的过孔处,缩短注入路径上的寄生电感。
  3. 然后,进行参数扫描:固定毛刺宽度为10ns,从100mV开始逐步增加幅度,同时将相位从时钟沿前5ns扫描到时钟沿后5ns(步进0.5ns)。
  4. 在幅度达到450mV、相位位于时钟沿前2ns时,芯片出现第一次异常行为——程序计数器跳转到一个非代码区域,触发HardFault异常。
  5. 继续微调相位至时钟沿前1.2ns,幅度保持450mV,成功观察到RDP检查被跳过,Flash内容被读取。

结果对比与复盘:实验成功的关键在于:① 去耦电容的移除显著提高了毛刺到达芯片的效率;② 相位扫描精度达到亚纳秒级,这是找到敏感窗口的前提;③ 幅度控制需要避开BOD阈值(STM32F103的BOD典型值为2.4V,即3.3V跌落超过900mV会触发复位)。该实验的代价是:移除去耦电容后芯片在正常工作时噪声余量下降,可能导致偶发不稳定,因此实验后需恢复电容。

风险提示:电压毛刺注入可能对芯片造成不可逆损伤。长时间、大幅度的电压跌落会加速电迁移(Electromigration),缩短芯片寿命。建议每次实验后检查芯片功耗是否异常,并控制单次注入持续时间不超过1秒。对于量产芯片,建议使用报废样品进行破坏性实验。

4.5 常见误区与总结复盘

在电压毛刺注入的学习和实践中,以下误区需要特别警惕:

  • 误区一:毛刺幅度越大越好。实际上,过大的幅度会触发BOD复位或损坏芯片,而有效的毛刺窗口通常很窄。正确做法是从小幅度开始逐步增加,找到最小有效幅度。
  • 误区二:忽略相位参数。许多初学者只调节幅度和宽度,发现无效后便认为目标芯片“免疫”电压毛刺。实际上,相位窗口可能只有1~2ns宽,必须使用高精度延迟线进行扫描。
  • 误区三:在错误的位置测量和注入。在稳压器输出端测量到的毛刺波形与芯片VDD引脚处的波形完全不同。必须使用示波器探头(尽量使用短地线弹簧)在芯片引脚附近测量。
  • 误区四:忽视时钟同步。毛刺注入必须与目标芯片的时钟/触发信号同步,否则每次注入的相位都是随机的,无法复现实验结果。使用外部触发信号或时钟同步电路是标准做法。
  • 误区五:不考虑温度影响。芯片的时序余量随温度变化明显,在25°C下有效的毛刺参数在85°C下可能完全无效。实验应在受控温度下进行,并记录环境温度。

总结复盘:电压毛刺注入的核心在于理解电源网络的阻抗特性、精确控制毛刺的三个参数(幅度、宽度、相位),并掌握芯片时序违例的触发条件。本章建立的电源网络模型和参数扫描方法论,是后续学习时钟毛刺(通过干扰时钟信号实现类似效果)和激光注入(通过光生电流产生局部电压扰动)的基础。在实际安全评估项目中,电压毛刺往往作为“第一轮试探”手段,用于快速判断目标芯片是否存在明显的时序漏洞,再结合其他注入手段进行深入利用。

经验建议:建议初学者在实验前先使用示波器记录芯片正常工作的VDD纹波(通常<50mV),并测量BOD触发阈值。建立一个“毛刺参数-芯片行为”对照表,每次实验后记录参数和现象,逐步积累出目标芯片的“故障地图”。这张地图不仅是后续攻击的基础,也是芯片设计者进行安全加固(如增加时序余量、添加毛刺检测器)的重要参考。