IoT 安全威胁模型:知己知彼,方能百战不殆
做 IoT 安全,第一件事不是写代码,而是搞清楚你的对手是谁、从哪来、想干什么。说白了,就是建立威胁模型。我这些年踩过的坑,十有八九都是因为一开始没把威胁想全。
这一章,咱们就聊聊 IoT 设备到底面临哪些攻击,怎么用 STRIDE 方法论系统性地梳理威胁,以及如何做攻击面分析。嗯,内容有点干,但都是实战中必须啃下来的硬骨头。
IoT 设备面临的常见攻击
IoT 设备不像服务器,它暴露在物理世界中,攻击面又宽又杂。我习惯把攻击分成三类:物理攻击、网络攻击、固件篡改。
物理攻击
设备就在用户手里,拆开外壳、接上调试线、用逻辑分析仪抓信号,这些事太常见了。我曾经在一个项目中,客户说他们的智能门锁“绝对安全”,结果我拿个螺丝刀撬开外壳,UART 调试口直接暴露,root 密码都没改。嗯,那场面挺尴尬的。
- 侧信道攻击:通过功耗、电磁辐射、时间差来窃取密钥。比如用示波器抓取加密运算时的电流波动,就能反推出密钥。
- 故障注入:用电压毛刺、激光、电磁脉冲干扰芯片运行,跳过安全校验。我记得有个案例,攻击者用一根针扎在芯片引脚上,就绕过了安全启动。
- 调试接口滥用:JTAG/SWD 接口没锁,直接读取 Flash、修改内存、单步调试固件。
- 存储芯片读取:拆下 SPI Flash 或 eMMC,用编程器直接 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 都还没覆盖——设备身份怎么验证?固件更新怎么防篡改?
IoT 攻击面分析
攻击面就是所有可能被攻击者利用的入口和路径。IoT 设备的攻击面比传统 IT 设备多得多,因为多了物理层和感知层。
我习惯把攻击面分成四个维度来分析:
- 物理接口:JTAG/SWD、UART、I2C、SPI、USB、以太网口、SD 卡槽。每个接口都可能成为攻击入口。
- 无线通信:Wi-Fi、蓝牙/BLE、Zigbee、LoRa、NFC、4G/5G。无线信号在空中传播,天然容易被嗅探和干扰。
- 软件/固件:Bootloader、操作系统内核、文件系统、应用程序、Web 管理界面、OTA 更新机制。
- 云平台/App:设备注册接口、数据上报 API、远程控制接口、用户认证模块、推送通知服务。
下面这张图是我常用的 IoT 攻击面全景图,帮你快速建立全局视角。
做攻击面分析时,我有个习惯:把设备放在最恶劣的环境里去想。假设攻击者已经物理接触了设备,假设网络是完全不可信的,假设固件可以被任意读取。只有在这种假设下,你才能设计出真正有韧性的安全架构。
好了,这一章的内容就到这里。威胁模型是安全设计的起点,后面我们会基于这些威胁,一步步构建零信任的接入和认证体系。