第四章:故障注入攻击——电压毛刺、时钟毛刺、电磁脉冲与激光故障注入
各位同学,大家好。今天我们聊一个硬核话题——故障注入攻击。
说实话,我在智能卡安全这个行当摸爬滚打十几年,见过太多“理论上安全”的芯片,最后被一根针、一个脉冲就给干趴下了。故障注入,说白了就是让芯片在非正常状态下工作,逼它犯错。你想想看,一个精心设计的加密算法,在正常电压下固若金汤,可一旦电压突然掉一下,它可能就把密钥给吐出来了。
嗯,这节课我们就来拆解四种最常见的故障注入手段:电压毛刺、时钟毛刺、电磁脉冲(EMPI)和激光故障注入。
4.1 电压毛刺(Voltage Glitch)
电压毛刺是最“亲民”的故障注入方式。你只需要一个可编程电源,再加一个快速开关,就能在芯片供电线上制造一个短暂的电压跌落或尖峰。
原理是什么?
芯片内部的逻辑门都有个最小工作电压。当供电电压瞬间掉到阈值以下,某些逻辑门的输出就会出错。这种错误可能是位翻转,也可能是指令跳过。
核心要点:电压毛刺攻击的目标不是烧毁芯片,而是让芯片在“将错未错”的边缘犯错。
我在项目中遇到过一件事:某款智能卡在正常电压3.3V下运行,我用一个毛刺发生器把电压瞬间拉到2.0V,持续200纳秒。结果呢?芯片跳过了PIN码校验,直接进入了管理员模式。嗯,这就是典型的指令跳过攻击。
攻击参数怎么调?
| 参数 | 典型范围 | 影响 |
|---|---|---|
| 毛刺深度 | 正常电压的60%~90% | 太浅没效果,太深会复位 |
| 毛刺宽度 | 50ns ~ 1μs | 太窄打不进去,太宽容易死机 |
| 注入时机 | 相对于某个指令的延迟 | 需要精确对准目标指令 |
我的经验:调电压毛刺就像调收音机。你先固定宽度,慢慢调深度;找到敏感点后,再微调时机。别一上来就大范围扫,容易把芯片搞死。
4.2 时钟毛刺(Clock Glitch)
时钟毛刺和电压毛刺是“孪生兄弟”。只不过这次我们攻击的是时钟信号。
为什么时钟也能攻击?
芯片内部所有操作都跟着时钟走。如果你在时钟信号里插入一个“超短脉冲”,芯片就会在一个时钟周期内执行两个操作。或者反过来,你拉长一个时钟周期,芯片就会“卡住”一会儿。
我记得有一次做测试,目标芯片用的是外部晶振。我在时钟线上加了一个毛刺,让时钟频率瞬间从10MHz跳到50MHz。芯片当场就懵了——它以为一个指令周期结束了,实际上还没完成。结果就是:它跳过了关键的校验步骤。
注意:时钟毛刺比电压毛刺更难防护,因为很多芯片的时钟输入没有滤波电路。你想想看,一个简单的RC滤波器就能干掉大部分电压毛刺,但时钟毛刺呢?它本身就是信号,你没法简单滤掉。
攻击手法对比:
- 单毛刺:精准打击,一次只跳过一个指令
- 多毛刺:连续注入,用于绕过循环校验
- 频率突变:突然提高或降低频率,让芯片时序错乱
4.3 电磁脉冲攻击(EMPI)
电磁脉冲攻击,听起来很科幻对吧?其实原理很简单:用一个线圈产生强电磁场,在芯片内部感应出电流,干扰正常逻辑。
EMPI的优势在哪?
非接触式攻击。你不需要物理接触芯片的引脚,只需要把探针放在芯片上方几毫米处。这对于一些封装好的智能卡来说,简直是噩梦。
我曾经帮客户测试一款银行卡。我们用自制的EMPI探针(其实就是绕了几圈的铜线),在芯片上方2mm处放电。结果呢?三次攻击里有一次成功跳过了交易金额校验。嗯,这意味着攻击者可以刷一分钱买一辆车。
关键参数:
- 探针直径:1mm ~ 5mm
- 放电电压:200V ~ 1000V
- 脉冲宽度:10ns ~ 100ns
- 探针位置:对准芯片核心区域
为什么EMPI这么难防?
因为电磁场是“无孔不入”的。你可以在芯片上加屏蔽罩,但屏蔽罩本身也会被感应出电流。而且,EMPI攻击的定位精度可以做到几十微米级别——你想想看,这已经能对准芯片内部的某个模块了。
4.4 激光故障注入(Laser Fault Injection)
激光故障注入,是故障注入攻击里的“高精尖武器”。
原理:用一束聚焦的激光照射芯片的某个区域,产生光生载流子,改变局部电路的逻辑状态。说白了,就是用光来“写”芯片。
激光攻击的精度可以达到亚微米级别。这意味着你可以精确地翻转某个寄存器的某一位,或者让某个逻辑门输出错误结果。
避坑指南:我曾经见过一个团队,花了几十万买激光设备,结果第一次测试就把芯片打穿了。为什么?激光功率没调好。记住,激光攻击不是烧芯片,是“挠痒痒”。功率要从最低开始慢慢往上调。
激光攻击的三种模式:
- 单点攻击:聚焦到一点,翻转单个存储单元
- 扫描攻击:逐行扫描,寻找敏感区域
- 多光束攻击:同时攻击多个点,用于绕过并行校验
防护难度:激光攻击是目前最难防护的故障注入方式。因为激光可以穿透大部分封装材料,而且精度极高。你加个金属屏蔽层?激光可以绕过去。你加个光敏检测电路?攻击者可以用红外激光,你的检测电路根本感应不到。
4.5 四种攻击方式的对比与防御思路
好了,四种攻击方式都讲完了。我们来做个对比总结。
| 攻击方式 | 成本 | 精度 | 可重复性 | 防护难度 |
|---|---|---|---|---|
| 电压毛刺 | 低(几百元) | 低(芯片级) | 中 | 低 |
| 时钟毛刺 | 低(几百元) | 中(模块级) | 高 | 中 |
| 电磁脉冲 | 中(几千元) | 中(模块级) | 中 | 高 |
| 激光注入 | 高(几十万) | 高(晶体管级) | 高 | 极高 |
防御思路:
- 电压毛刺:加电压检测电路,一旦检测到异常立即复位
- 时钟毛刺:用内部PLL生成时钟,外部时钟只做参考
- 电磁脉冲:加屏蔽罩,但效果有限;更有效的是在关键操作前做“自检”
- 激光注入:加光敏检测层,但成本高;更实际的做法是“冗余计算”和“随机延迟”
最后提醒一句:没有绝对安全的芯片。你加再多的防护,攻击者总能找到新的漏洞。我们的目标不是让攻击者进不来,而是让攻击者进来之后什么都拿不到。嗯,这就是“纵深防御”的思想。
好了,这一章的内容就到这里。故障注入攻击是个很有意思的领域,它告诉我们:芯片的“物理世界”和“逻辑世界”之间,其实有一道很窄的缝隙。攻击者就是在找这道缝隙。
下一章我们会讲侧信道攻击,那又是另一番天地了。
公众号:蓝海资料掘金营,微信deep3321