第一章 固件安全基础: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流程涉及多少环节?每个环节都可能成为攻击面。

我整理了一张攻击面清单:

  1. 固件存储:Flash、eMMC、SD卡,未加密可直接读取
  2. 固件传输:HTTP/FTP/CoAP,明文传输可被嗅探
  3. 固件签名:签名算法弱、密钥硬编码、未校验
  4. 升级流程:回滚攻击、降级攻击、中断攻击
  5. 恢复机制: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 固件安全知识体系

下面这张图是我自己总结的固件安全知识框架,涵盖了从获取到分析再到利用的完整链路:

固件安全知识体系框架图 固件安全知识体系 固件获取 固件提取 固件分析 官网下载 网络抓包 Flash读取 调试接口 App逆向 文件系统 (SquashFS/JFFS2) 内核镜像 (zImage/DTB) 配置文件 (密码/密钥) 二进制程序 (ELF/库文件) 签名绕过 (未校验/弱算法) 降级攻击 (版本回滚) 中间人攻击 (OTA劫持) 最终目标:获取Root权限 / 持久化后门 说明:每个环节都可能存在安全漏洞,攻击者只需突破一个环节即可达成目标

这张图我反复调整过好几次。你看,从固件获取到最终利用,每个环节都环环相扣。做安全测试时,我习惯从最薄弱的环节入手——通常是签名验证和存储保护。

核心思路: 不要试图一次性防御所有攻击面。先守住签名验证和存储加密这两道防线,能挡住90%的常见攻击。

好了,第一章的内容就到这里。记住,固件安全没有银弹,但理解基础是第一步。后面我们会一步步深入,从静态分析到动态调试,从漏洞挖掘到渗透利用,把每个环节都讲透。