2. LwM2M安全威胁建模
LwM2M设备接入链路看似只有“注册—上报—下发”三步,但真正落到工程现场,它横跨设备固件、引导配置、DTLS/TLS握手、CoAP消息、LwM2M对象模型、平台侧接口与运维通道。威胁建模的价值,就是在写代码和上线之前,把这些环节中“谁可能被冒充、哪里可能被篡改、哪一步可能被重放”提前摊开,形成可执行的安全需求,而不是等设备批量出货后再补丁式加固。
一、先识别资产:威胁建模的起点不是攻击,而是“值得保护什么”
资产识别要落到具体对象和具体字段,不能停留在“设备安全”这种口号。对LwM2M接入系统,通常至少包括以下五类资产:
- 设备身份资产:设备端点名称(Endpoint Client Name)、PSK身份标识、X.509证书与私钥、设备序列号。它们决定“这台设备是不是它声称的那台”。
- 会话与密钥资产:DTLS会话密钥、CoAP Token、Observe关系标识、重放窗口状态。它们决定“这条消息是不是当前有效会话里的消息”。
- 业务数据资产:传感器读数、执行器状态、固件版本、配置参数。它们决定“平台看到的数据是否可信、下发指令是否被正确执行”。
- 控制通道资产:Bootstrap Server地址、Registration接口、Device Management & Service Enablement接口、Information Reporting接口。它们决定“谁能改设备、谁能读设备”。
- 平台侧资产:设备注册表、租户隔离边界、审计日志、固件仓库。它们决定“一台设备被攻破后,影响会不会扩散到其他租户”。
资产识别完成后,应给每项资产标注机密性(C)、完整性(I)、可用性(A)三个属性。例如,设备私钥的C/I要求极高,A要求中等;传感器读数的I要求高,C可能中等;固件仓库的I和A都极高。这个标注不是形式主义,它直接决定后续风险评级时“影响”一栏怎么打分。
二、典型攻击面:从设备到平台的五条入口
LwM2M接入的典型攻击面可以按“信任边界”来划分。第一条是设备物理与引导面:调试串口未关、PSK硬编码在固件里、Bootstrap凭证可被读取。第二条是传输面:未启用DTLS、使用PSK但身份可枚举、证书校验被跳过、CoAP消息可被中间人重放。第三条是协议面:Registration更新未鉴权、Observe通知被伪造、Bootstrap Server地址被篡改导致设备连到恶意服务器。第四条是平台接口面:设备注册接口缺乏速率限制、租户ID可被越权猜测、管理接口未做细粒度授权。第五条是运维面:固件升级包未签名、日志中泄露密钥、批量配置脚本使用弱口令。
这些攻击面并不都需要“高深漏洞”。很多真实事故来自“设备出厂时PSK相同”“Bootstrap未做服务器身份校验”“CoAP重放窗口过大”这类工程配置问题。威胁建模的作用,就是把这些配置问题提前变成可检查项。
三、用STRIDE逐条对照:把攻击面翻译成威胁类型
STRIDE是微软提出的威胁分类方法,六个字母分别对应:Spoofing(冒充)、Tampering(篡改)、Repudiation(抵赖)、Information Disclosure(信息泄露)、Denial of Service(拒绝服务)、Elevation of Privilege(权限提升)。在LwM2M接入场景中,它可以直接映射到具体攻击面:
| STRIDE类别 | LwM2M接入中的典型表现 | 对应资产 |
|---|---|---|
| S 冒充 | 伪造Endpoint Client Name注册;PSK相同导致设备互相冒充 | 设备身份、注册表 |
| T 篡改 | 中间人修改CoAP payload;Bootstrap地址被改写 | 业务数据、引导配置 |
| R 抵赖 | 设备否认曾下发过某条写操作;平台无审计日志 | 审计日志、控制通道 |
| I 信息泄露 | 固件中提取PSK;日志打印DTLS密钥 | 密钥、会话状态 |
| D 拒绝服务 | 大量伪造注册请求耗尽平台连接;Observe通知风暴 | 注册接口、平台资源 |
| E 权限提升 | 普通设备通过管理接口越权操作其他设备 | 管理接口、租户隔离 |
使用STRIDE时,建议按“数据流图”逐条走:先画出设备、Bootstrap Server、LwM2M Server、平台管理接口之间的数据流,再对每条流、每个存储点问六个问题。例如,对“设备→LwM2M Server的注册请求”这条流,S问“能否伪造设备身份”,T问“注册参数能否被改”,R问“注册行为是否有日志”,I问“注册消息是否泄露设备信息”,D问“能否用大量注册打垮服务器”,E问“注册后能否越权访问其他对象”。这样得到的威胁列表才可落地。
四、风险评级:把威胁排成可执行的优先级
风险评级常用可能性(Likelihood)× 影响(Impact)。可能性可以按攻击面暴露程度打分:设备物理可达、未启用DTLS、PSK硬编码,可能性高;需要先获取平台管理员权限才能利用的,可能性低。影响则回到资产C/I/A属性:私钥泄露影响高,传感器读数被篡改影响中高,日志缺失影响中。
下面给出一个可直接套用的风险评级示例表,分值为1~5,风险值=可能性×影响,≥15为高,8~14为中,≤7为低。表中数据为教学示例,实际项目应按现场情况调整。
| 威胁编号 | 威胁描述 | 可能性 | 影响 | 风险值 | 等级 |
|---|---|---|---|---|---|
| T-01 | PSK硬编码且同批次相同,设备可互相冒充 | 5 | 5 | 25 | 高 |
| T-02 | 未启用DTLS,CoAP明文传输 | 4 | 5 | 20 | 高 |
| T-03 | Bootstrap地址可被篡改,设备连恶意服务器 | 3 | 5 | 15 | 高 |
| T-04 | 注册接口无速率限制,可被枚举 | 4 | 3 | 12 | 中 |
| T-05 | Observe通知无完整性保护,可伪造 | 3 | 4 | 12 | 中 |
| T-06 | 审计日志缺失,写操作无法追溯 | 3 | 2 | 6 | 低 |
评级之后,高风险的T-01、T-02、T-03必须在上线前闭环:T-01改为每设备唯一PSK或X.509证书;T-02强制DTLS 1.2以上并禁用弱密码套件;T-03对Bootstrap Server做证书校验或预置可信地址。中风险项可排入迭代计划,低风险项纳入监控。这样,威胁建模就从“文档”变成了“排期表”。
最后需要强调:LwM2M接入安全的核心不是“用了DTLS就安全”,而是身份唯一、会话可验、数据可查、权限最小。威胁建模的作用,就是把这四句话拆成可检查、可测试、可验收的具体条目,让设备接入的每一个信任边界都有对应的控制措施。