时钟毛刺攻击基础
各位同学,欢迎来到实战手册的第一章。今天咱们聊一个非常核心的话题——时钟毛刺攻击。
说实话,我第一次接触这个技术时,心里是有点发怵的。毕竟要往芯片的时钟线上“捣乱”,听起来就像在手术台上给心脏做电击。但搞了这么多年安全评估,我越来越觉得,时钟毛刺其实是故障注入里最优雅、最可控的一种方式。
时钟毛刺原理
先说说原理。芯片内部的所有操作,都靠时钟信号来同步。每个时钟上升沿,CPU就执行一条指令。这个节奏非常稳定,就像军队的鼓点。
时钟毛刺,说白了就是在正常的时钟信号里,突然插入一个非常窄的脉冲。这个脉冲比正常时钟周期短得多,可能只有几纳秒。芯片的时钟树会把这个异常脉冲传递到各个模块。
为什么会造成故障?因为CPU内部的组合逻辑需要一定时间才能稳定。正常时钟周期足够长,信号能稳定下来。但毛刺的脉冲太短,组合逻辑还没稳定,就被下一个沿采样了。结果就是——寄存器里存了错误的数据。
核心要点:时钟毛刺的本质是破坏时序约束,让芯片在非稳态下采样数据。
我在项目中遇到过一种情况:芯片明明有毛刺检测电路,但毛刺宽度控制在某个阈值以下时,检测电路根本不会触发。这说明什么?说明芯片的防御措施总有盲区。
毛刺参数
搞时钟毛刺,你得掌握三个关键参数。我习惯把它们称为“毛刺三要素”。
| 参数 | 定义 | 典型范围 | 我的经验 |
|---|---|---|---|
| 宽度 | 毛刺脉冲的持续时间 | 1ns ~ 10ns | 太宽会被检测,太窄没效果 |
| 偏移 | 毛刺相对于正常时钟沿的位置 | 0 ~ 周期长度 | 通常选在时钟上升沿附近 |
| 能量 | 毛刺的电压幅度 | 1.2V ~ 3.6V | 过高可能烧芯片 |
宽度
宽度是最敏感的参数。你想想看,正常时钟周期可能是100ns,你插入一个3ns的毛刺。这个毛刺必须足够短,让组合逻辑来不及响应。但又不能太短,否则连寄存器都触发不了。
我个人习惯从5ns开始扫,每次减0.5ns,直到找到有效窗口。嗯,这里要注意:不同工艺的芯片,有效宽度窗口差别很大。65nm的芯片和28nm的芯片,敏感度能差一个数量级。
偏移
偏移决定了毛刺打在时钟周期的哪个位置。最敏感的区域通常是时钟上升沿前几纳秒。为什么?因为这时候组合逻辑正在变化,最不稳定。
我曾经在评估一款JCOP芯片时,发现偏移在-2ns到+1ns之间效果最好。超出这个范围,毛刺要么没效果,要么直接导致芯片复位。
能量
能量说白了就是毛刺的电压。正常时钟信号是0到1.8V(以JCOP为例),毛刺可以拉到更高。但别贪心,我见过有人把电压拉到3.3V,结果芯片直接冒烟了。
警告:毛刺能量过高会永久损坏芯片。建议从1.2倍VDD开始尝试,逐步增加。
毛刺注入方法
注入方法主要有三种。我按推荐程度排序。
- 直接耦合:用探针直接接触时钟走线。效果最好,但需要物理接触。
- 电磁注入:用电磁脉冲感应到时钟线上。非接触式,但精度差一些。
- 电源毛刺:通过电源线间接影响时钟。最隐蔽,但控制难度大。
我个人最常用的是直接耦合。虽然需要开盖、找时钟线,但胜在可控。你想想看,电磁注入你都不知道毛刺到底打在哪条线上,调试起来太痛苦了。
具体操作时,我会用一台任意波形发生器,输出一个正常时钟信号,然后在指定位置叠加一个窄脉冲。示波器实时监测时钟线上的波形。嗯,这里有个小技巧:毛刺的上升沿要陡,最好在1ns以内。否则毛刺就不够“刺”了。
毛刺对CPU执行流的影响
这是最有趣的部分。时钟毛刺到底怎么影响CPU?我画了一张图来说明。
从图上你能看到,正常时钟下,CPU按部就班执行指令。但毛刺打进来后,CMP指令的操作数从#5变成了#3。这就是典型的指令篡改。
具体来说,时钟毛刺会导致以下几种情况:
- 指令跳过:毛刺让CPU误以为当前指令已完成,直接跳到下一条。安全校验指令就这么被跳过了。
- 操作数错误:就像上图那样,比较的值变了。这在密码校验中非常致命。
- 分支预测错误:条件跳转的结果被翻转。该跳的不跳,不该跳的跳了。
- 寄存器写错:数据写到错误的寄存器里。后续计算全乱套。
实战技巧:攻击JCOP芯片时,我建议先定位安全校验函数。通常就是那个检查PIN码或签名的函数。在这个函数执行期间注入毛刺,成功率最高。
我曾经在评估一款JCOP 2.4.1芯片时,用时钟毛刺成功跳过了RSA签名校验。具体做法是:在签名校验函数的CMP指令前2ns注入一个4ns宽的毛刺。重复了大概200次,成功了一次。虽然成功率不高,但一次成功就足以证明芯片存在漏洞。
你可能会问:为什么不是100%成功?因为毛刺攻击本质上是概率性的。芯片内部有各种保护机制,比如冗余计算、时序检测。但只要你找到那个脆弱的时间窗口,剩下的就是耐心和运气了。
嗯,最后提醒一句:做毛刺攻击时,一定要用示波器实时监测时钟信号。我见过有人调了半天参数都没效果,结果发现探针根本没接触好。这种低级错误,咱们就别犯了。
公众号:蓝海资料掘金营,微信deep3321