《物联网设备安全基线设定》
第2章 威胁建模入门
2、威胁建模入门:STRIDE模型、攻击树分析、物联网设备常见攻击面
威胁建模是物联网安全设计的起点。通过系统化的方法识别、量化并缓解潜在威胁,我们能够在设备生命周期的早期阶段植入安全基因。本节将深入讲解业界最经典的 STRIDE 模型、攻击树分析方法,并梳理物联网设备最常见的 六大攻击面。
2.1 STRIDE 威胁分类模型
STRIDE 是由微软提出的威胁分类框架,每个字母代表一类安全威胁。在物联网场景下,每一类威胁都有其独特的体现形式。
| 字母 | 威胁类型 | 物联网典型场景 | 安全控制建议 |
|---|---|---|---|
| S | 欺骗 (Spoofing) | 伪造传感器身份向云端发送虚假数据 | 设备证书认证、双向TLS |
| T | 篡改 (Tampering) | 中间人攻击修改OTA固件包 | 代码签名、完整性校验 |
| R | 抵赖 (Repudiation) | 攻击者否认发送过解锁指令 | 安全审计日志、数字签名 |
| I | 信息泄露 (Info Disclosure) | 侧信道攻击提取加密密钥 | 物理安全防护、密钥隔离 |
| D | 拒绝服务 (DoS) | 僵尸网络发起DDoS攻击 | 流量限速、异常检测 |
| E | 权限提升 (Elevation) | 利用缓冲区溢出获取root权限 | 最小权限原则、ASLR |
2.2 攻击树分析 (Attack Tree Analysis)
攻击树是一种以树状结构描述攻击路径的形式化方法。根节点代表攻击者的最终目标,子节点表示达成目标所需的不同步骤。通过攻击树,我们可以直观地识别出最脆弱的攻击路径。
攻击树分析步骤:
- 定义根目标:明确攻击者最终想达成的目的(如:获取设备控制权)。
- 分解子目标:使用 OR(任一途径)或 AND(全部途径)逻辑分解攻击步骤。
- 识别叶子节点:找到具体的攻击方法,如漏洞利用、物理接触等。
- 评估与量化:为每个叶子节点分配难度、成本、检测概率等指标。
- 确定最短路径:找出攻击者最可能利用的薄弱环节,优先加固。
2.3 物联网设备常见攻击面
物联网设备由于其资源受限、部署环境复杂、通信协议多样等特点,暴露出了独特的攻击面。以下是最常见的六大攻击面及其威胁描述。
| 攻击面 | 风险描述 | 典型案例 | 安全基线要求 |
|---|---|---|---|
| 1. 固件 | 固件逆向分析、提取敏感信息、签名绕过 | Mirai 僵尸网络利用默认密码 | 固件加密、安全启动、代码签名 |
| 2. 通信协议 | 明文传输、缺乏身份认证、重放攻击 | Zigbee 密钥嗅探 | TLS 1.3、双向认证、防重放机制 |
| 3. Web管理接口 | XSS、CSRF、SQL注入、弱口令 | 路由器管理后台漏洞 | 输入验证、CSRF Token、强密码策略 |
| 4. 物理接口 | JTAG/SWD调试接口暴露、UART无认证 | 通过UART获取root shell | 禁用调试接口、熔丝位锁定 |
| 5. 云平台/后端 | API未授权访问、数据泄露、设备劫持 | AWS IoT 策略配置错误 | 最小权限IAM、API网关认证 |
| 6. 移动端App | 硬编码密钥、不安全存储、逆向工程 | App中硬编码云平台Token | 代码混淆、密钥动态获取 |
2.4 实战:STRIDE + 攻击树联合分析
将 STRIDE 模型与攻击树结合使用,可以构建出更完整的威胁画像。以下以 智能摄像头 为例,展示联合分析的过程。
// 智能摄像头威胁建模示例(伪代码)
ThreatModel camera = new ThreatModel("智能摄像头");
// 使用 STRIDE 分类
camera.AddThreat(ThreatType.Spoofing, "伪造摄像头身份向NVR发送视频流");
camera.AddThreat(ThreatType.Tampering, "篡改视频帧插入虚假画面");
camera.AddThreat(ThreatType.Repudiation, "攻击者否认执行过云台转动操作");
camera.AddThreat(ThreatType.InfoDisclosure, "视频流明文泄露隐私");
camera.AddThreat(ThreatType.DoS, "发送大量连接请求耗尽设备资源");
camera.AddThreat(ThreatType.Elevation, "利用Web接口漏洞获取管理员权限");
// 构建攻击树(根目标:获取视频流)
AttackTree tree = new AttackTree("获取实时视频流");
tree.AddOrNode("网络嗅探", new List<string>{"Wi-Fi破解", "ARP欺骗"});
tree.AddAndNode("固件提取", new List<string>{"拆解设备", "连接UART", "读取Flash"});
// 输出分析报告
Console.WriteLine($"发现 {camera.Threats.Count} 个威胁,{tree.LeafNodes} 条攻击路径");
联合分析的价值:
- 系统性:STRIDE 确保不遗漏任何威胁类别。
- 可视化:攻击树让攻击路径一目了然。
- 优先级排序:结合攻击难度与影响,确定加固顺序。
- 文档化:为安全审计和合规检查提供完整记录。
💡 核心要点:威胁建模不是一次性的活动,而应贯穿设备开发的整个生命周期。建议在每个迭代周期结束时重新审视威胁模型,确保新功能引入的风险得到及时识别与缓解。