4. 安全威胁建模:STRIDE威胁模型在配网场景的应用

做物联网安全这么多年,我越来越觉得一件事:不懂威胁建模的安全方案,基本等于裸奔。你想想看,连敌人都不知道是谁、从哪来、想干嘛,你怎么防?

这一章,我们就拿STRIDE模型,把BLE配网场景从头到尾过一遍筛子。我当年第一次做配网安全审计时,就是靠这个模型挖出了好几个致命漏洞——嗯,其中一个还是我自己写的代码。

4.1 STRIDE模型快速回顾

STRIDE是微软提出的威胁分类框架,每个字母代表一类威胁:

字母 威胁类型 配网场景举例
S Spoofing(假冒) 攻击者伪造合法设备身份
T Tampering(篡改) 修改配网数据包中的WiFi凭据
R Repudiation(抵赖) 设备否认曾发起过配网请求
I Information Disclosure(信息泄露) WiFi密码被窃听
D Denial of Service(拒绝服务) 大量虚假配网请求耗尽设备资源
E Elevation of Privilege(权限提升) 从普通设备获取管理员权限

说白了,STRIDE就是一张安全检查清单。你对着这张表,把配网流程的每个环节都问一遍「这里能不能被攻击?」,漏洞自然就浮出来了。

我的经验:别试图一次性覆盖所有STRIDE类别。我习惯的做法是——先聚焦S、T、I这三类,因为它们跟配网安全最相关。剩下的R、D、E,可以在后续迭代中补上。

4.2 中间人攻击(MITM)分析

MITM在BLE配网里有多常见?非常常见。BLE的广播和连接过程本身没有强制加密,攻击者只要在信号范围内,就能插一脚。

典型的MITM攻击流程是这样的:

  1. 攻击者同时伪装成「手机」和「设备」
  2. 对手机说:「我就是你要配网的那个设备」
  3. 对设备说:「我就是你的配网手机」
  4. 两边数据都经过攻击者中转,密码被一览无余

为什么会这么容易?因为BLE的配对过程如果选择了Just Works方式,就没有任何用户验证环节。攻击者只需要在信号范围内,就能建立两条独立的连接。

避坑指南:我曾经在一个智能门锁项目里,发现产品经理为了「用户体验」选了Just Works配对。我当场演示了MITM攻击——用一台树莓派Zero W,在10秒内拿到了门锁的管理密码。从那以后,那个项目再也没人提Just Works了。

防御MITM,核心就两招:

  • 使用OOB(带外)配对:比如通过扫码或NFC交换配对密钥
  • 启用LE Secure Connections:强制使用ECDH密钥交换,防止中间人插入

4.3 重放攻击与暴力破解

重放攻击,说白了就是「录下来,再放一遍」。攻击者不需要破解你的加密,只需要原封不动地重发之前抓到的合法数据包。

在BLE配网场景里,重放攻击的典型目标是:

  • 配网请求包
  • WiFi凭据传输包
  • 设备认证令牌

怎么防?我一般用这三种手段:

防御手段 原理 实现难度
时间戳+窗口 每个包携带时间戳,接收方只接受窗口内的包 低
随机数挑战 每次通信前,双方交换随机数,保证每次数据唯一 中
序列号递增 每个设备维护单调递增的序列号,重复包直接丢弃 低

至于暴力破解,嗯,这个更头疼。BLE配网时,如果PIN码或配对码太短,攻击者可以在几秒内穷举所有可能。

我的建议:BLE配网中,永远不要使用6位数字PIN作为唯一安全措施。我在一个智能灯泡项目里见过这种设计——攻击者用手机APP,3分钟就破解了所有灯泡的配网PIN。后来我们改成了6位字母+数字混合码,破解时间从3分钟变成了3年。

4.4 隐私泄露风险

很多人只关心WiFi密码会不会被偷,却忽略了隐私泄露这个更大的坑。

BLE配网过程中,可能泄露的隐私信息包括:

  • 设备MAC地址:可被用于追踪用户位置
  • WiFi SSID:暴露用户家庭网络信息
  • 设备类型和固件版本:帮助攻击者定位漏洞
  • 用户地理位置:通过信号强度估算

我记得有个真实案例:某智能家居厂商的配网APP,在配网过程中会广播设备的完整固件版本号。攻击者收集这些信息后,发现某个旧版本存在远程代码执行漏洞——结果就是,超过10万台设备被远程控制。

关键原则:配网过程中,只暴露最少必要信息。能不发MAC地址就不发,能用随机地址就用随机地址,能隐藏固件版本就隐藏。你暴露的每一条信息,都可能成为攻击者的突破口。

4.5 本章知识体系总览

下面这张图,把STRIDE模型在BLE配网场景中的映射关系画出来了。我建议你把它存下来,做安全审计时对着看:

STRIDE威胁模型 × BLE配网场景 BLE配网流程 S - 假冒身份 T - 数据篡改 R - 行为抵赖 I - 信息泄露 D - 拒绝服务 E - 权限提升 重点关注区域 S(假冒)、T(篡改)、I(信息泄露)是配网场景中最高频的威胁 R、D、E 威胁相对低频,但一旦发生,破坏力极大

实用技巧:每次做新项目的配网安全设计,我都会打印一张STRIDE检查表贴在工位上。每完成一个功能,就在对应的威胁类别上打个勾。这个方法帮我避免过至少3次上线前的紧急修复——嗯,都是因为提前发现了MITM的漏洞。

好了,这一章的内容就到这里。记住一句话:威胁建模不是一次性的工作,而是贯穿整个开发周期的习惯。下次写配网代码前,先花10分钟过一遍STRIDE,你会发现很多问题在代码层面就能避免。