安全基础与威胁模型:加密基础、哈希签名与OTA攻击类型
各位好,我是老周。今天咱们聊点硬核的——OTA安全的基础。说实话,我见过太多团队一上来就搞升级流程,结果被中间人攻击打得措手不及。加密、哈希、签名,这些不是理论课,是保命技能。
先看一张整体知识地图,帮你建立全局感。
对称加密与非对称加密
加密这事儿,说白了就是给固件加把锁。对称加密用同一把钥匙开锁,非对称加密用两把不同的钥匙。我刚开始做嵌入式时,总觉得对称加密简单好用,直到有一次密钥被逆向出来……嗯,从那以后我再也不敢只用对称加密了。
| 特性 | 对称加密(AES) | 非对称加密(RSA/ECC) |
|---|---|---|
| 密钥数量 | 1个共享密钥 | 公钥+私钥 |
| 计算速度 | 快(硬件加速常见) | 慢(比AES慢100-1000倍) |
| 密钥分发 | 困难(需安全通道) | 容易(公钥公开) |
| 典型用途 | 固件加密传输 | 签名验证、密钥交换 |
| 推荐算法 | AES-128-GCM | ECDSA P-256 / RSA-2048 |
哈希函数与数字签名
哈希函数,说白了就是给固件算个指纹。SHA-256输出256位,只要固件改一个比特,哈希值就完全变了。你想想看,这多适合做完整性校验。
数字签名呢,是哈希+非对称加密的组合拳。流程是这样的:
- 服务端计算固件哈希值
- 用私钥对哈希值签名
- 固件+签名一起下发
- 设备用公钥验证签名
- 验证通过后,再计算固件哈希比对
核心原则:永远不要只校验哈希,一定要验证签名。哈希只能防意外损坏,签名才能防恶意篡改。我曾经见过一个团队只做了CRC校验,结果被中间人轻松替换固件……
OTA常见攻击类型
做OTA安全,你得先知道敌人长什么样。我整理了几种最常见的攻击手法,都是我在项目中真实遇到过的。
中间人攻击(MITM)
攻击者拦截设备与服务器之间的通信,假装自己是服务器。说白了就是"偷听+篡改"。我在一个车联网项目里见过,攻击者伪造升级服务器,给车辆推送了带后门的固件。
重放攻击
攻击者抓取一次合法的升级包,然后反复发送给设备。你想想看,如果设备没有防重放机制,同一个固件会被反复安装,浪费带宽不说,还可能触发降级漏洞。
我建议的做法:在升级包中加入时间戳或单调递增的序列号。设备记录最后一次成功升级的序列号,拒绝所有小于等于该值的请求。
固件篡改
攻击者修改固件二进制内容,植入恶意代码。这种攻击最危险,因为篡改后的固件看起来还是"正常"的升级流程。
防御手段就是前面说的数字签名。只要签名验证通过,固件内容就不可能被篡改。嗯,这里要注意:签名算法一定要用安全的,别用MD5或SHA-1,它们已经被攻破了。
降级攻击
攻击者诱骗设备安装一个旧版本的固件,利用旧版本中已知的漏洞。我见过一个智能家居设备,攻击者把固件降级到三年前的版本,然后利用那个版本中的缓冲区溢出漏洞获取了root权限。
威胁建模方法
威胁建模不是纸上谈兵,是帮你系统性地找出安全漏洞。我常用的方法是STRIDE模型,每个字母代表一类威胁:
| 威胁类型 | 含义 | OTA场景举例 |
|---|---|---|
| S - Spoofing | 身份伪造 | 攻击者伪装成升级服务器 |
| T - Tampering | 篡改 | 修改固件二进制内容 |
| R - Repudiation | 抵赖 | 设备否认收到过升级包 |
| I - Information Disclosure | 信息泄露 | 固件被窃听获取 |
| D - Denial of Service | 拒绝服务 | 大量无效升级请求耗尽设备资源 |
| E - Elevation of Privilege | 权限提升 | 通过漏洞获取系统最高权限 |
具体怎么做?我一般分四步走:
- 资产识别:列出所有需要保护的东西——固件、密钥、证书、设备身份等
- 威胁枚举:针对每个资产,用STRIDE模型问"这个资产可能受到哪种攻击?"
- 风险分析:评估每个威胁的可能性和影响程度,优先处理高风险项
- 缓解措施:为每个威胁设计防御方案,比如加密、签名、认证等
我的经验:威胁建模不是一次性工作。每次OTA协议有变更,或者发现新的攻击手法,都要重新过一遍。我习惯在每次迭代开始前花半天做威胁建模,这比事后补漏洞省事多了。