3、硬件风险识别:常见的硬件攻击手段与风险特征提取
大家好,我是你们的老朋友。今天咱们聊聊硬件风险识别这个硬骨头。
说实话,我做了这么多年硬件安全,见过太多产品在攻击面前不堪一击。有些团队觉得「我的芯片有加密,够安全了」,结果呢?侧信道一打,密钥全裸奔。所以这一章,我把自己踩过的坑、总结的经验,全盘托出。
3.1 侧信道攻击:从「旁门左道」窃取秘密
侧信道攻击,说白了就是不走正门,走窗户。芯片在运算时,会泄露功耗、电磁辐射、时间信息。攻击者收集这些「边信道」信号,就能反推出内部密钥。
核心原理:芯片执行不同指令时,功耗曲线不一样。比如做乘法比做加法耗电多。攻击者采集几千条功耗曲线,用统计方法一分析,密钥就出来了。
我遇到过最典型的案例:某款物联网芯片,AES加密实现得很标准。但工程师没做功耗平衡。结果呢?我用一台示波器加一个电阻,采集了5000条功耗曲线,半小时就把128位密钥还原了。客户当时脸都绿了。
3.1.1 常见侧信道攻击类型
- 简单功耗分析(SPA):直接看单条功耗曲线。比如RSA的平方-乘算法,乘法和平方的功耗不同,一眼就能看出密钥比特。
- 差分功耗分析(DPA):统计多条曲线。用假设检验找出密钥。这是最常用的手法。
- 电磁辐射分析(EMA):用近场探头采集电磁泄漏。不需要接触芯片,隔空就能偷数据。
- 时间攻击:测量运算时间差异。比如某些密码库的字符串比较,遇到不匹配就提前返回,攻击者能逐字节猜出密码。
避坑指南:我曾经帮客户审计过一个智能门锁方案。他们用了ST的MCU,AES实现是直接从网上抄的。我建议他们至少加个随机延时和功耗掩码。客户觉得没必要。结果上市三个月,被白帽子用DPA攻破,紧急召回。嗯,从那以后,我再也不敢轻视侧信道了。
3.2 故障注入:让芯片「犯错」来获取秘密
故障注入,就是故意让芯片在错误状态下运行。比如电压突然降低、时钟频率瞬间拉高、或者用激光打一下芯片表面。芯片一乱,安全机制就失效了。
我个人的经验:故障注入比侧信道更「暴力」,但效果往往更直接。侧信道是偷听,故障注入是直接撬锁。
3.2.1 常见故障注入手段
| 攻击手段 | 原理 | 难度 | 典型效果 |
|---|---|---|---|
| 电压毛刺 | 瞬间拉低或拉高供电电压 | 低 | 跳过安全启动、修改指令 |
| 时钟毛刺 | 注入异常时钟脉冲 | 中 | 导致时序违规、寄存器错误 |
| 电磁脉冲 | 用线圈产生强电磁场 | 中 | 干扰内部逻辑、复位芯片 |
| 激光注入 | 用激光照射芯片特定区域 | 高 | 精确翻转存储单元、绕过认证 |
| 温度冲击 | 快速加热或冷却芯片 | 低 | 改变晶体管阈值、产生位翻转 |
我记得有一次,帮客户测试一款车规级MCU。他们宣称有「防故障注入」功能。我用电压毛刺试了试,第一次就跳过了安全启动。为什么?因为他们的电压检测电路响应时间太慢,毛刺宽度只有50纳秒,检测电路根本来不及反应。你想想看,硬件设计里这种「盲区」太多了。
注意:故障注入不是万能的。需要精确控制注入时机和强度。我曾经为了找到一个有效的毛刺参数,连续调试了三天。但一旦找到,攻击成功率能到80%以上。
3.3 逆向工程:从芯片「解剖」到算法还原
逆向工程,就是拆解芯片,把里面的电路、固件、算法都挖出来。这活儿有点像考古,但比考古刺激多了。
我刚开始做逆向时,觉得这玩意儿离我太远。直到有一次,竞争对手的产品和我们功能一模一样,连bug都相同。一查,对方直接逆向了我们芯片的ROM。从那以后,我就把逆向工程列为头号威胁。
3.3.1 逆向工程的主要步骤
- 芯片开盖:用发烟硝酸腐蚀封装,露出裸片。这一步要小心,我曾经手抖把芯片泡太久,整个die都溶解了。
- 层间剥离:用等离子刻蚀或化学方法,一层层去掉金属层。每去掉一层,拍一张高清显微镜照片。
- 图像拼接与识别:把几百张照片拼成完整版图,识别标准单元(与非门、触发器、RAM等)。
- 网表提取:从版图中提取晶体管级网表,还原出逻辑电路。
- 功能分析:分析电路功能,找到加密模块、安全状态机、密钥存储位置。
关键点:现代芯片动辄几亿晶体管,全手工逆向不现实。攻击者通常只关注关键模块,比如安全CPU核、加密协处理器、OTP存储器。他们用探针台直接测量这些模块的信号,效率高得多。
3.4 硬件风险特征提取:从攻击到防御
知道了攻击手段,怎么提取风险特征?说白了,就是给芯片做「体检」,找出容易被攻击的弱点。
我个人习惯把风险特征分为三类:
- 物理特征:芯片封装是否容易被开盖?是否有主动屏蔽层?电源引脚是否有滤波电容?
- 时序特征:关键操作(如密钥加载、安全状态切换)是否有固定时序?是否容易被毛刺干扰?
- 功耗特征:不同操作功耗差异是否明显?是否有功耗平衡措施?
3.4.1 风险特征提取流程
我建议按以下步骤走:
- 静态分析:看芯片datasheet和参考设计。找安全相关引脚(如安全启动使能、调试接口锁定)。
- 动态监测:用示波器抓取上电、加密、通信等关键阶段的功耗和电磁信号。
- 故障注入测试:用电压毛刺、时钟毛刺尝试干扰。记录哪些操作容易被跳过或篡改。
- 数据统计:收集1000次以上测试数据,计算攻击成功率、信噪比等指标。
- 风险评级:根据攻击难度、影响范围、修复成本,给每个风险点打分。
小技巧:提取特征时,别忘了看「异常行为」。比如芯片在受到故障注入时,是直接复位、输出错误数据、还是悄悄进入安全模式?这些反应本身就是重要的风险特征。
3.5 知识体系总览
下面这张图,是我自己总结的硬件风险识别框架。你看一眼,心里就有谱了。
这张图把三大攻击手段和风险特征提取串起来了。你从攻击手段出发,找到对应的风险特征,然后量化评级。这就是硬件风控规则引擎的「感知层」——先知道敌人长什么样,才能设计规则去防御。
好了,这一章的内容就到这里。记住:硬件风险识别不是纸上谈兵,得动手测、动手试。我当年也是从烧坏十几块开发板开始的。你踩的坑越多,积累的经验就越值钱。