3. IoT组件供应链威胁建模

IoT设备的软件栈不是单一程序,而是一条由多家供应商逐层拼装出来的“组件供应链”。一台典型的智能摄像头,其芯片来自半导体厂商,模组由方案商集成,操作系统可能是裁剪过的Linux或RTOS,中间件包含MQTT客户端、TLS库、OTA升级代理,应用层则是设备厂商自己写的业务逻辑。威胁建模要回答的核心问题是:攻击者能从哪一层进入,又能沿着什么路径向上或向下传导,最终控制设备、数据或云端账户。

一、五层攻击面:从物理硅片到业务逻辑

把IoT组件栈拆成五层,每层的攻击面性质差异很大,防护手段也不通用。

  • 芯片层:关注调试接口(JTAG/SWD)是否在量产时熔断、安全启动根密钥是否固化在OTP/eFuse、Flash是否支持加密读取。典型风险是调试口未关闭,攻击者用几十元的调试器即可读出固件。
  • 模组层:Wi-Fi/蜂窝模组常带独立固件与AT指令通道。若AT通道未做鉴权,或模组固件版本长期不更新,攻击者可绕过主控直接操作网络能力。
  • OS层:内核版本、驱动、文件系统权限、默认账户。裁剪系统常删掉安全模块却保留root shell,或把只读分区做成可写。
  • 中间件层:TLS库(如OpenSSL/mbedTLS)、MQTT/CoAP协议栈、OTA代理、日志组件。这一层是第三方组件漏洞最密集的区域,一个CVE往往同时影响数十款设备。
  • 应用层:设备业务逻辑、云对接凭证、本地Web/API接口。常见问题是硬编码密钥、命令注入、未鉴权的配置接口。

下面这张图把五层攻击面、典型入口和风险传导方向放在同一视图中,便于定位“一个漏洞会波及到哪里”。

IoT组件供应链五层攻击面与风险传导 应用层 业务逻辑/云凭证 中间件层 TLS/MQTT/OTA OS层 内核/驱动/权限 模组层 Wi-Fi/蜂窝/AT 芯片层 调试口/安全启动 攻击面 硬编码密钥 · 命令注入 · 未鉴权API 本地Web配置口 · 云对接Token泄露 攻击面 TLS库CVE · MQTT弱认证 · OTA签名缺失 日志泄露凭证 · 协议栈内存破坏 攻击面 内核提权 · 驱动越界 · 默认root账户 可写系统分区 · 缺失SELinux/AppArmor 攻击面 AT指令无鉴权 · 模组固件不更新 串口暴露 · 蜂窝APN配置可篡改 攻击面 JTAG/SWD未熔断 · Flash明文读取 安全启动根密钥可替换 · eFuse未锁 风险传导方向 ↑ 向上传导(提权/控制) 芯片调试口 → 读固件 → 提取 中间件密钥 → 伪造云端身份 OS提权 → 篡改应用逻辑 ↓ 向下传导(扩散/持久化) 应用漏洞 → 写入模组AT配置 OTA劫持 → 刷入恶意固件 供应链上游污染 → 批量设备 典型后果 • 设备被僵尸网络招募 • 内网横向渗透跳板 • 音视频/传感器数据泄露 • 云端账户批量接管 • 固件后门长期驻留 单点漏洞可跨层放大 影响同型号全部设备

二、典型供应链攻击案例与传导路径

案例一:Mirai僵尸网络(2016)。攻击者并未挖掘复杂漏洞,而是利用设备出厂默认口令(如admin/admin、root/xc3511)通过Telnet批量登录。传导路径是:应用层默认凭证 → OS层root shell → 设备被植入Mirai样本 → 扫描并感染同网段其他IoT设备。它说明供应链最薄弱环节往往不是代码漏洞,而是出厂配置。

案例二:SolarWinds式供应链投毒(2020)。攻击者入侵软件供应商的构建环境,在合法更新包中植入后门,下游数万客户在正常升级时被感染。映射到IoT场景,等价于OTA服务器或模组固件仓库被篡改:设备主动拉取“合法签名”的恶意固件,应用层、OS层、模组层同时失守。防御重点是构建链完整性、双人复核与产物哈希比对。

案例三:Log4Shell类中间件漏洞(2021)。一个日志组件的JNDI解析缺陷,使攻击者通过构造字符串触发远程类加载。在IoT中,若MQTT消息或HTTP头被写入日志,中间件层漏洞可直接导致远程代码执行,再向上控制应用层。传导路径短、影响面广,是“中间件层单点放大”的典型。

三、威胁建模的落地方法

建议按“资产—入口—传导—影响”四步建立模型,而不是只列漏洞清单。

  1. 资产清点:记录每台设备的芯片型号、模组固件版本、OS内核版本、中间件组件及版本、应用服务端口。版本号是后续比对CVE的基础。
  2. 入口枚举:物理口(UART/JTAG/USB)、网络口(Telnet/SSH/HTTP/MQTT/CoAP)、无线口(BLE/Zigbee)、云接口(设备证书、API Token)。
  3. 传导分析:对每个入口问三个问题——能否读到凭证?能否提权?能否写入持久化位置(固件、启动脚本、模组配置)?
  4. 影响定级:结合设备数量、数据敏感度、是否可远程触发,给出风险等级与修复优先级。
实操提示:对中间件组件做SBOM(软件物料清单)比对时,可先用如下命令提取固件中的组件版本,再与CVE库匹配。示例针对解包后的squashfs根文件系统:
# 1. 解包固件(示例)
binwalk -e firmware.bin

# 2. 提取根文件系统中的组件版本
find squashfs-root -name "*.so*" -exec strings {} \; | grep -iE "openssl|mbedtls|mosquitto|libcurl" | sort -u

# 3. 输出示例(合理假设)
# OpenSSL 1.0.2k
# mbedTLS 2.16.6
# libmosquitto 1.6.9
# libcurl 7.68.0

拿到版本后,例如OpenSSL 1.0.2k对应多个已知CVE,若设备又暴露了使用该库的HTTPS服务,就应把“中间件层TLS漏洞”列为高优先级。判断依据是:组件版本命中CVE + 该组件在网络路径上可达 + 设备可被远程访问,三者同时成立才构成实际可利用风险,缺一不可。

常见误区:只扫描应用层端口,忽略模组AT通道和芯片调试口。很多设备网络层加固良好,但UART仍输出root shell,或模组AT指令可被串口注入,导致“网络打不进、物理一插就进”。威胁建模必须覆盖物理与近场入口。

四、风险传导的收敛策略

供应链威胁无法靠单层防御解决,应按“阻断传导”而非“堵住所有漏洞”来设计。具体做法包括:在芯片层熔断调试口并启用安全启动,使固件不可被替换;在模组层关闭未使用的AT指令并锁定固件版本;在OS层启用只读根文件系统与最小权限账户;在中间件层建立SBOM并跟踪CVE,对TLS/MQTT组件设置版本基线;在应用层禁止硬编码密钥,改用每设备唯一证书。这样即使某一层出现漏洞,攻击者也难以完成“读取凭证→提权→持久化”的完整链条,风险被限制在单层之内。

威胁建模的产出不应是一份漏洞列表,而是一张可追溯的“层—入口—传导—影响”映射表。它让安全团队知道:修哪个组件能同时降低多层风险,哪个入口一旦失守会直接导致批量设备沦陷。这正是IoT供应链安全治理从被动响应转向主动设计的关键一步。