IoT 安全威胁模型:知己知彼,方能百战不殆

做 IoT 安全,第一件事不是写代码,而是搞清楚你的对手是谁、从哪来、想干什么。说白了,就是建立威胁模型。我这些年踩过的坑,十有八九都是因为一开始没把威胁想全。

这一章,咱们就聊聊 IoT 设备到底面临哪些攻击,怎么用 STRIDE 方法论系统性地梳理威胁,以及如何做攻击面分析。嗯,内容有点干,但都是实战中必须啃下来的硬骨头。

IoT 设备面临的常见攻击

IoT 设备不像服务器,它暴露在物理世界中,攻击面又宽又杂。我习惯把攻击分成三类:物理攻击、网络攻击、固件篡改。

物理攻击

设备就在用户手里,拆开外壳、接上调试线、用逻辑分析仪抓信号,这些事太常见了。我曾经在一个项目中,客户说他们的智能门锁“绝对安全”,结果我拿个螺丝刀撬开外壳,UART 调试口直接暴露,root 密码都没改。嗯,那场面挺尴尬的。

  • 侧信道攻击:通过功耗、电磁辐射、时间差来窃取密钥。比如用示波器抓取加密运算时的电流波动,就能反推出密钥。
  • 故障注入:用电压毛刺、激光、电磁脉冲干扰芯片运行,跳过安全校验。我记得有个案例,攻击者用一根针扎在芯片引脚上,就绕过了安全启动。
  • 调试接口滥用:JTAG/SWD 接口没锁,直接读取 Flash、修改内存、单步调试固件。
  • 存储芯片读取:拆下 SPI Flash 或 eMMC,用编程器直接 dump 固件和敏感数据。
⚠️ 避坑指南:我曾经见过一个产品,Flash 里的密钥是明文存储的,而且所有设备共用同一把密钥。攻击者 dump 一台设备,整个产品线的安全就全废了。记住:物理接触 = 设备沦陷,这是零信任的底线假设。

网络攻击

网络是 IoT 设备最常被攻击的入口。设备通常 7x24 小时在线,但计算能力和安全防护却弱得可怜。

  • 中间人攻击:在设备与云平台之间拦截、篡改通信数据。很多设备用 HTTP 或未验证的 TLS,攻击者很容易伪造证书。
  • 拒绝服务攻击:向设备发送大量无效请求,耗尽 CPU 或内存,导致设备死机或重启。
  • 协议重放攻击:抓取正常的控制指令包,稍加修改后重放,就能控制设备。比如抓取“开锁”指令,反复发送就能让门锁频繁开关。
  • 僵尸网络感染:利用弱口令或已知漏洞植入恶意软件,把设备变成肉鸡。Mirai 病毒就是典型例子。

固件篡改

固件是设备的灵魂。一旦固件被篡改,设备就不再是你设计的那个设备了。

  • 固件逆向:从固件中提取文件系统、分析二进制代码,寻找硬编码密钥、后门、漏洞。
  • 恶意固件注入:通过不安全的 OTA 更新机制,推送伪造的固件包。我遇到过一家厂商,OTA 固件连签名校验都没有,直接明文传输。
  • 固件降级攻击:强制设备回退到有已知漏洞的旧版本固件,然后利用旧漏洞进行攻击。

威胁建模方法论:STRIDE

STRIDE 是微软提出的威胁建模框架,六个字母分别代表六类威胁。我个人习惯在每个 IoT 项目启动时,先拿 STRIDE 过一遍,就像安全检查清单一样。

威胁类型 含义 IoT 场景举例
Spoofing(欺骗) 冒充他人身份 伪造设备 ID 接入云平台,或伪造用户 App 控制设备
Tampering(篡改) 修改数据或代码 篡改固件、修改传感器上报数据、篡改控制指令
Repudiation(抵赖) 否认做过某操作 设备否认发送过某条告警,或用户否认执行过开锁操作
Information Disclosure(信息泄露) 敏感数据被窃取 固件中的密钥泄露、通信数据被窃听、用户隐私数据被读取
Denial of Service(拒绝服务) 系统不可用 耗尽设备电池、阻塞网络带宽、触发看门狗重启
Elevation of Privilege(权限提升) 获得更高权限 从普通用户提权到 root,从受限沙箱逃逸到系统内核

你想想看,STRIDE 的妙处在于它强迫你从攻击者的视角去审视系统。比如设计一个智能插座,你可能会想“通信加密了,应该安全了吧?”但用 STRIDE 一查,发现 Spoofing 和 Tampering 都还没覆盖——设备身份怎么验证?固件更新怎么防篡改?

💡 实战技巧:我建议在架构设计阶段就画数据流图,然后对每个数据流、每个存储点、每个处理过程逐一问 STRIDE 问题。别等到开发完了再补,那时候改架构的成本就高了。

IoT 攻击面分析

攻击面就是所有可能被攻击者利用的入口和路径。IoT 设备的攻击面比传统 IT 设备多得多,因为多了物理层和感知层。

我习惯把攻击面分成四个维度来分析:

  1. 物理接口:JTAG/SWD、UART、I2C、SPI、USB、以太网口、SD 卡槽。每个接口都可能成为攻击入口。
  2. 无线通信:Wi-Fi、蓝牙/BLE、Zigbee、LoRa、NFC、4G/5G。无线信号在空中传播,天然容易被嗅探和干扰。
  3. 软件/固件:Bootloader、操作系统内核、文件系统、应用程序、Web 管理界面、OTA 更新机制。
  4. 云平台/App:设备注册接口、数据上报 API、远程控制接口、用户认证模块、推送通知服务。

下面这张图是我常用的 IoT 攻击面全景图,帮你快速建立全局视角。

IoT 攻击面全景图 IoT 设备 物理接口攻击 无线通信攻击 软件/固件攻击 云平台/App 攻击 JTAG/SWD 调试 UART 串口 Wi-Fi/BLE 嗅探 Zigbee 重放 固件逆向分析 OTA 篡改 API 未授权访问 App 逆向/重打包 攻击面 = 物理 + 无线 + 软件 + 云,缺一不可

做攻击面分析时,我有个习惯:把设备放在最恶劣的环境里去想。假设攻击者已经物理接触了设备,假设网络是完全不可信的,假设固件可以被任意读取。只有在这种假设下,你才能设计出真正有韧性的安全架构。

核心观点:威胁建模不是一次性的工作。产品迭代、固件升级、新协议接入,每一次变化都可能引入新的攻击面。我建议每季度至少做一次威胁模型评审,把 STRIDE 过一遍,更新攻击面清单。

好了,这一章的内容就到这里。威胁模型是安全设计的起点,后面我们会基于这些威胁,一步步构建零信任的接入和认证体系。