2. 终端设备安全威胁分析:物理攻击、侧信道攻击、协议栈攻击、应用层攻击

好,咱们进入第二个大块头——安全威胁分析。

说实话,做NB-IoT安全设计,最怕的不是算法不够强,而是你根本不知道敌人会从哪个方向捅刀子。我这些年踩过的坑,总结下来,威胁主要来自四个层面:物理层、侧信道、协议栈、应用层。咱们一个一个掰开揉碎了讲。

2.1 物理攻击:最直接,也最容易被忽视

物理攻击,说白了就是攻击者拿到了你的设备本体。别觉得这不可能——NB-IoT终端经常部署在户外,比如智能水表、路灯、井盖监测器。被人撬开外壳,那是常有的事。

常见的物理攻击手段:

  • 探针攻击:用微探针直接接触芯片引脚或PCB走线,读取总线上的数据。我在一个燃气表项目里就遇到过,攻击者直接在Flash芯片的SPI线上焊了飞线,把固件全读走了。
  • JTAG/SWD调试接口攻击:很多开发板出厂时没锁调试口。攻击者接上J-Link,直接就能dump整个Flash。嗯,这里要注意,量产时一定要把调试接口熔断掉。
  • 芯片开盖/去封装:用强酸腐蚀掉芯片封装,用显微镜直接观察内部电路。这招成本高,但对付高价值设备(比如车联网T-Box)时,攻击者真舍得下本。
  • 存储器直接读取:把Flash芯片吹下来,放到编程器上读。我曾经见过一个案例,攻击者把整块Flash拆下来,用热风枪吹得干干净净,然后插到读卡器上——固件、密钥、通信参数,一览无余。
⚠️ 避坑指南:我曾经在一个智能路灯项目里,发现设计人员把私钥直接明文存在外部Flash里。我说这不行,他说“谁会去拆路灯啊?”结果呢?路灯装上去三个月,就被人撬开抄走了密钥。所以,物理安全不是“会不会被拆”的问题,而是“被拆了之后能扛多久”的问题。

2.2 侧信道攻击:看不见的“窃听者”

侧信道攻击,听起来玄乎,其实原理很简单——攻击者不直接破解你的算法,而是通过观察设备的“物理副作用”来推断秘密信息。比如功耗、电磁辐射、运行时间、声音等等。

常见的侧信道攻击类型:

  • 功耗分析攻击(SPA/DPA):简单功耗分析(SPA)看单次功耗波形,差分功耗分析(DPA)统计多次波形。攻击者通过分析芯片执行加密算法时的电流变化,就能反推出密钥。我参与过一个安全芯片的认证项目,测试团队用DPA在几分钟内就还原出了AES-128的密钥——当时我后背都凉了。
  • 电磁辐射分析(EMA):用近场探头靠近芯片,采集电磁辐射信号。原理和功耗分析类似,但不需要串联到电源线上,可以隔空采集。嗯,这招在攻击者无法物理接触电源线时特别好用。
  • 时间分析攻击:通过测量加密操作耗时来推断密钥。比如某些实现中,密钥位为1时执行的操作比0时多,导致时间差异。攻击者统计几百次时间,就能把密钥猜个七七八八。
  • 故障注入攻击:用激光、电磁脉冲、电压毛刺等手段,让芯片在特定时刻“算错”。比如跳过某个安全检查,或者让循环少跑几轮。我见过一个案例,攻击者用一根针在芯片上扎了一下,就把Bootloader的签名校验给跳过了。
💡 个人经验:侧信道攻击的防御,说白了就是“让所有操作看起来都一样”。我习惯的做法是:
- 加密算法用恒定时间实现(constant-time),避免时间差异。
- 加随机延时或伪操作,打乱功耗波形。
- 关键操作加冗余校验,一旦检测到故障注入,立即擦除密钥并复位。

2.3 协议栈攻击:通信链路上的“中间人”

协议栈攻击,针对的是NB-IoT的通信协议本身。攻击者不需要物理接触设备,只需要在无线信号范围内,就能发起攻击。

常见的协议栈攻击手段:

  • 重放攻击:攻击者截获设备发送的合法数据包,然后在稍后时间重新发送。比如截获一个“开锁”指令,然后反复重放。你想想看,如果设备没有防重放机制,那门禁系统就形同虚设了。
  • 中间人攻击(MITM):攻击者伪装成基站,让设备误以为连接到了合法网络。NB-IoT虽然用了空口加密,但如果设备没有验证网络身份(比如没有做网络认证),攻击者就能用伪基站截获所有通信。
  • 拒绝服务攻击(DoS):攻击者发送大量无效请求,耗尽设备的处理能力或电池。NB-IoT终端本身资源有限,一个简单的SYN Flood就能让设备卡死。我在一个智能抄表项目里遇到过,攻击者用几块钱的SDR设备,对着一个小区的水表发垃圾包,结果所有水表都离线了三天。
  • 协议降级攻击:攻击者强制设备使用较低版本的协议或较弱的加密算法。比如让设备从AES-256降到AES-128,甚至降到不加密。嗯,这里要注意,很多设备为了兼容性,默认支持降级,这恰恰是最大的漏洞。
🔑 关键点:协议栈攻击的防御核心在于“双向认证”和“防重放”。我建议:
- 设备与平台之间必须做双向证书认证,不能只验设备不验平台。
- 每个数据包携带时间戳或序列号,平台侧做去重校验。
- 协议版本协商时,只允许最高安全等级,禁止降级。

2.4 应用层攻击:最“聪明”的攻击方式

应用层攻击,针对的是设备上运行的应用逻辑和数据处理流程。攻击者不需要懂底层协议,只需要找到应用层的漏洞就行。

常见的应用层攻击手段:

  • 固件逆向与篡改:攻击者从设备中提取固件,用IDA Pro、Ghidra等工具逆向分析,找到漏洞后修改固件再刷回去。我见过一个智能门锁的案例,攻击者逆向固件后发现,管理员密码是硬编码在代码里的——而且是个弱口令“123456”。
  • 缓冲区溢出:设备在处理用户输入或网络数据时,没有做边界检查。攻击者发送超长数据,覆盖栈上的返回地址,从而劫持程序执行流。NB-IoT设备很多用C语言开发,内存管理稍有不慎就会中招。
  • 命令注入:设备在解析AT指令或MQTT消息时,没有过滤特殊字符。攻击者可以在正常消息中嵌入恶意命令。比如在设备名称字段里写“; rm -rf /”,如果设备直接拼接到系统命令里,那就完蛋了。
  • 逻辑漏洞:攻击者利用业务逻辑上的缺陷。比如某智能电表,上报电量时只上报增量,攻击者可以伪造一个“负增量”来“偷电”。这种攻击不需要多高深的技术,但对业务的理解要求很高。
⚠️ 避坑指南:我曾经在一个NB-IoT温湿度传感器项目里,发现应用层代码直接用了sprintf()拼接MQTT主题,而且没有做长度检查。我说这不行,开发说“数据长度是固定的,不会溢出”。结果呢?测试时发了一个超长的设备ID,直接把栈给崩了。所以,永远不要相信输入数据——哪怕是你自己定义的格式。

2.5 威胁模型总结

好了,四种攻击类型都讲完了。咱们用一张表来总结一下:

攻击层面 典型攻击手段 攻击难度 防御重点
物理攻击 探针、JTAG、开盖、Flash读取 中-高 安全芯片、加密存储、调试口熔断
侧信道攻击 功耗分析、电磁分析、故障注入 恒定时间实现、冗余校验、随机延时
协议栈攻击 重放、MITM、DoS、降级攻击 双向认证、防重放、协议版本锁定
应用层攻击 固件逆向、缓冲区溢出、命令注入 低-中 安全编码、输入校验、固件签名

我个人习惯,在做安全设计时,会先画一个威胁模型图,把每个攻击面都列出来,然后评估攻击难度和影响范围。你想想看,如果连攻击者会从哪个方向来都不知道,那防御就是瞎忙活。

下一章,咱们会讲如何针对这些威胁,设计具体的防护方案。嗯,到时候我会分享一些我在实际项目中用过的“真香”技巧。