第一章 固件安全基础:IoT与OTA概述
做IoT安全这些年,我见过太多设备因为固件更新出问题。有一次,客户的一批智能门锁在OTA升级后全部变砖,原因就是固件包没做完整性校验。嗯,今天我们就从最基础的东西聊起。
1.1 IoT与OTA:你该知道的基本概念
IoT设备,说白了就是能联网的嵌入式系统。小到智能灯泡,大到工业PLC,都算。OTA(Over-The-Air)则是通过无线网络给这些设备升级固件的方式。
我个人习惯把OTA分为三类:
| 类型 | 典型场景 | 安全风险等级 |
|---|---|---|
| 全量OTA | 完整固件包替换 | 高(包体大,易被截获) |
| 差分OTA | 只传输变更部分 | 中(需逆向差分算法) |
| 增量OTA | 模块级热更新 | 低(但实现复杂) |
我的经验: 差分OTA虽然省流量,但逆向起来最头疼。我曾经花了两周才从差分补丁里还原出完整的固件逻辑。
1.2 固件安全威胁模型
做威胁建模时,我习惯从三个维度去思考:攻击者能接触到什么?能做什么?目标是什么?
常见的威胁模型包括:
- 本地攻击:通过UART、JTAG、SPI等调试接口直接读取固件
- 网络攻击:中间人劫持OTA流量,替换固件包
- 供应链攻击:在固件编译阶段植入后门
- 物理攻击:拆解芯片,通过探针读取Flash内容
避坑指南: 我曾经遇到一个案例,厂商只做了网络层的HTTPS加密,但固件包本身没签名。攻击者通过破解CA证书,成功植入了恶意固件。记住,传输加密不等于内容安全。
1.3 常见攻击面分析
你想想看,一个OTA流程涉及多少环节?每个环节都可能成为攻击面。
我整理了一张攻击面清单:
- 固件存储:Flash、eMMC、SD卡,未加密可直接读取
- 固件传输:HTTP/FTP/CoAP,明文传输可被嗅探
- 固件签名:签名算法弱、密钥硬编码、未校验
- 升级流程:回滚攻击、降级攻击、中断攻击
- 恢复机制:Recovery模式无认证,可被利用
关键点: 80%的OTA漏洞出在签名验证环节。要么没做,要么做得不对。
1.4 固件获取与提取方法
做逆向分析,第一步就是拿到固件。我常用的方法有这些:
| 方法 | 难度 | 适用场景 |
|---|---|---|
| 从官网下载 | 低 | 厂商公开提供升级包 |
| 抓包截获 | 中 | OTA升级过程中抓取 |
| 读取Flash | 高 | 有物理接触权限 |
| 调试接口导出 | 中高 | UART/JTAG可用 |
| 逆向App提取 | 中 | 固件包嵌在手机App中 |
提取固件后,第一步是识别文件格式。用 binwalk 是最快的:
# 扫描固件中的文件系统
binwalk -Me firmware.bin
# 查看文件类型
file firmware.bin
# 提取特定偏移的数据
dd if=firmware.bin of=extracted.bin bs=1 skip=0x10000 count=0x20000
小技巧: 我习惯先用
strings 扫一遍固件,看看有没有明文路径、密钥、版本号等敏感信息。有时候厂商会直接把私钥留在固件里,嗯,我见过不止一次。
1.5 固件安全知识体系
下面这张图是我自己总结的固件安全知识框架,涵盖了从获取到分析再到利用的完整链路:
这张图我反复调整过好几次。你看,从固件获取到最终利用,每个环节都环环相扣。做安全测试时,我习惯从最薄弱的环节入手——通常是签名验证和存储保护。
核心思路: 不要试图一次性防御所有攻击面。先守住签名验证和存储加密这两道防线,能挡住90%的常见攻击。
好了,第一章的内容就到这里。记住,固件安全没有银弹,但理解基础是第一步。后面我们会一步步深入,从静态分析到动态调试,从漏洞挖掘到渗透利用,把每个环节都讲透。