《物联网设备安全基线设定》
第3章 硬件安全基础
3、硬件安全基础:物理安全、JTAG/SWD调试接口保护、防篡改设计
硬件安全是物联网设备安全体系的基石。与软件漏洞不同,硬件攻击往往具有不可逆性,一旦物理层被突破,上层所有的加密与访问控制机制都将形同虚设。本章节将深入探讨物理安全防护、调试接口保护以及防篡改设计三大核心领域,帮助学员建立从芯片级到外壳级的纵深防御思维。
3.1 物理安全
物理安全关注的是如何阻止攻击者通过直接接触设备硬件来窃取敏感信息或破坏设备功能。常见的物理攻击手段包括:探针攻击、侧信道分析、故障注入以及逆向工程。
| 防护等级 | 典型措施 | 适用场景 | 成本系数 |
|---|---|---|---|
| L1 基础级 | 螺丝防拆、外壳卡扣 | 消费级IoT设备 | 1x |
| L2 增强级 | 环氧树脂灌胶、屏蔽罩 | 工业传感器、网关 | 3x |
| L3 高安全级 | 主动式屏蔽网格、光敏检测 | 金融支付终端、医疗设备 | 10x |
3.2 JTAG/SWD调试接口保护
JTAG(IEEE 1149.1)和SWD(Serial Wire Debug)是嵌入式系统最常用的调试与编程接口。然而,这些接口也为攻击者提供了读取固件、修改内存、绕过安全启动的“后门”。保护调试接口是硬件安全的关键环节。
调试接口保护最佳实践
- 熔丝位永久烧断:量产前对芯片的调试接口熔丝进行一次性编程,物理上禁用JTAG/SWD功能。
- 访问密码/密钥锁定:设置高熵值的调试解锁密码,防止暴力破解(如STM32的RDP Level 2)。
- PCB布局隐藏:将调试焊盘设计在BGA封装下方或使用0Ω电阻连接,生产后移除。
- 逻辑隔离:通过GPIO或专用安全芯片控制调试接口的电源/复位,仅在授权时刻使能。
典型调试接口保护配置示例(以STM32为例)
/* 设置读保护级别2(永久锁定,不可回退) */
HAL_FLASH_OB_Unlock();
/* 配置选项字节 */
OB_RDP_Config(OB_RDP_LEVEL_2); // Level 2: 永久保护
HAL_FLASH_OB_Launch(); // 生效并锁定
/* 注意:执行后芯片将永久禁用调试接口,
且无法通过任何方式回退到Level 1或0 */
3.3 防篡改设计
防篡改设计的核心目标是:检测到物理入侵行为,并响应以保护敏感数据。一个完整的防篡改系统包含传感器、检测逻辑和响应机制三个部分。
防篡改设计检查清单
| 类别 | 检查项 | 实现方式 | 优先级 |
|---|---|---|---|
| 外壳防护 | 防拆检测 | 外壳内嵌导电胶条,开路触发中断 | 高 |
| 环境监测 | 光攻击检测 | 光敏二极管监测壳内光照变化 | 中 |
| 电压监测 | 电源毛刺检测 | 模拟比较器监测VDD波动 | 高 |
| 温度监测 | 极端温度攻击 | 温度传感器监测-40°C~85°C范围外 | 中 |
| 数据响应 | 密钥零化 | 检测到入侵后立即清除HSM密钥 | 高 |
防篡改中断服务例程示例(伪代码)
// 防篡改中断处理函数
void TAMPER_IRQHandler(void) {
// 1. 清除中断标志
TAMPER->SR &= ~TAMPER_SR_TF;
// 2. 立即销毁敏感密钥(零化操作)
secure_memset(key_storage, 0, KEY_SIZE);
// 3. 擦除安全存储区
flash_erase_sector(SECURE_STORAGE_SECTOR);
// 4. 设置永久失效标志
tamper_flag = TAMPER_TRIGGERED;
// 5. 可选:触发物理自毁电路
GPIO_WriteBit(SELF_DESTRUCT_PORT, SELF_DESTRUCT_PIN, Bit_SET);
// 6. 进入安全死循环
while(1) { __NOP(); }
}
📌 本节要点总结
- 物理安全是纵深防御的第一道防线,需根据设备价值选择L1~L3防护等级。
- JTAG/SWD接口必须在量产阶段通过熔丝或密码永久锁定,防止固件泄露。
- 防篡改设计应遵循“检测-决策-响应”三阶段模型,响应动作必须不可逆且及时。
- 所有硬件安全措施都应考虑成本与安全性的平衡,避免过度设计导致产品失去市场竞争力。