一、固件安全概述:什么是固件、固件安全的重要性、常见固件攻击面分析

1.1 到底什么是固件?

先问个问题:你每天用的手机、路由器、智能门锁,它们为什么能工作?

硬件是骨架,软件是灵魂。但有个东西卡在中间——固件

我个人习惯把固件理解为「硬件的操作系统」。它不像 Windows 或 Linux 那样通用,而是专门为某个芯片或设备写的。说白了,固件就是烧录在 ROM、Flash 里的底层代码,负责初始化硬件、调度资源、提供基础服务。

举个例子:你按下路由器电源键,最先跑起来的不是 OpenWrt,而是 Bootloader(比如 U-Boot)。Bootloader 就是固件的一部分。它初始化内存、时钟、外设,然后才把操作系统加载起来。

固件的三个核心特征:

  • 固化性:存储在非易失性存储器中,掉电不丢失
  • 底层性:直接操作硬件寄存器,没有操作系统那层抽象
  • 专用性:每款芯片、每个板子,固件几乎都是定制的

我在项目中遇到过不少刚入行的朋友,把固件和嵌入式软件混为一谈。其实有区别:嵌入式软件可以跑在 RTOS 上,而固件更接近硬件,甚至包含微码(Microcode)。你想想看,CPU 内部的那套指令解码逻辑,也算固件的一种。

1.2 固件安全为什么重要?

嗯,这里要敲黑板了。

很多人觉得固件离用户很远,攻击者够不着。但现实恰恰相反——固件是攻击者的「黄金入口」

为什么?因为固件拥有最高权限。它跑在 Ring 0 甚至 Ring -1(SMM 模式)。一旦固件被攻破,操作系统层面的安全机制全成了摆设。

我给你们讲个真实案例。几年前某知名品牌的路由器爆出漏洞,攻击者通过 Web 接口上传了恶意固件。结果呢?路由器变成了僵尸网络的一员,用户完全不知情。更可怕的是,即使用户恢复了出厂设置,恶意固件依然存在——因为它写进了 Flash,普通重置根本清不掉。

固件被攻破的后果:

  • 设备完全失控,攻击者可任意执行代码
  • 持久化驻留,常规杀毒软件无法检测
  • 可横向渗透,从 IoT 设备跳转到内网 PC
  • 供应链污染,出厂即带后门

我曾经帮一家工控厂商做审计,发现他们的 PLC 固件居然没有签名校验。攻击者只要物理接触设备,用编程器就能刷入恶意固件。你想想看,工厂里的 PLC 要是被篡改,后果是什么?生产线停摆都是轻的。

1.3 常见固件攻击面分析

搞安全的人都知道,攻击面就是「能碰到的入口」。固件的攻击面,我把它分成四大类。下面这张图可以帮你快速建立整体认知:

固件攻击面全景图 固件 攻击面 固件提取 物理读取 / OTA 抓包 逆向分析 Binwalk / Ghidra 运行时攻击 缓冲区溢出 / ROP 供应链攻击 SDK 后门 / 签名绕过

1.3.1 固件提取攻击面

攻击者首先要拿到固件。怎么拿?

  • 物理提取:拆开设备,用编程器直接读 Flash 芯片。SPI Flash 最常见,夹子一夹,数据就出来了。
  • OTA 抓包:升级固件时抓取网络流量。很多设备用 HTTP 明文传输,一抓一个准。
  • 固件解包:从官方固件更新包中提取。有些厂商连加密都不做,直接 zip 打包。

避坑指南:我曾经审计过一个智能摄像头,厂商把固件放在公开的 CDN 上,URL 还是固定的。攻击者只要改个版本号,就能下载到所有历史固件。嗯,这种低级错误其实很常见。

1.3.2 逆向分析攻击面

拿到固件后,攻击者会进行逆向。常用的工具有 Binwalk、Ghidra、IDA Pro。

他们找什么?

  • 硬编码凭据:比如 telnet 的 root 密码写死在代码里
  • 后门接口:调试用的串口没关,或者隐藏的 Web 端点
  • 加密密钥:AES 密钥、RSA 私钥直接放在固件中

我见过最离谱的一个案例:某路由器固件里,厂商把 SSH 私钥放在了 /etc/dropbear/ 目录下,而且所有设备共用同一把密钥。攻击者拿到固件后,直接就能 SSH 登录任何同型号设备。

1.3.3 运行时攻击面

固件运行起来之后,攻击面更多了。

攻击类型 常见入口 危害等级
缓冲区溢出 Web 接口、网络协议栈 高危
命令注入 CGI 脚本、管理界面 高危
堆溢出 内存管理模块 中高危
格式化字符串 日志输出、调试接口 中危

为什么会这样?因为很多嵌入式设备用的都是老旧的 Linux 内核,或者干脆是裸机程序。没有 ASLR、没有堆栈保护,攻击者一个缓冲区溢出就能拿到 shell。

我记得有个项目,客户说他们的智能电表「绝对安全」。结果我随手试了个长 URL,直接触发了 Web 服务器的缓冲区溢出。嗯,那场面挺尴尬的。

1.3.4 供应链攻击面

这个攻击面最隐蔽,也最难防。

攻击者不直接攻击设备,而是污染固件的开发或分发环节:

  • SDK 后门:芯片厂商提供的 SDK 里就藏着恶意代码
  • 编译链投毒:在编译器里植入后门,编译出的固件自动带毒
  • 更新服务器劫持:伪造固件更新包,签名校验被绕过

注意:供应链攻击最难检测,因为恶意代码是在「信任链」内部植入的。你审计固件时,即使代码写得再干净,如果 SDK 本身有问题,那一切都是白搭。

我曾经帮一家车厂做 T-Box 审计,发现他们用的某款通信模组,SDK 里自带了一个调试用的 telnet 服务。厂商说「出厂时我们会关掉」,但代码里只是注释掉了启动脚本。攻击者只要取消注释,重新编译,就能开启后门。这种问题,靠常规的代码审计根本发现不了。

小结

固件安全,说白了就是「守住硬件的最底层」。攻击者只要突破这一层,上面所有的安全措施都形同虚设。

我个人习惯把固件审计分成三步:拿得到、读得懂、攻得破。后面的章节,我会一步步带你走完这三个阶段。今天先把攻击面理清楚,后面才好对症下药。

本章核心要点:

  • 固件是硬件和软件之间的桥梁,拥有最高权限
  • 固件被攻破后,攻击者可持久化驻留,难以清除
  • 四大攻击面:提取、逆向、运行时、供应链
  • 供应链攻击最隐蔽,需要从信任链角度思考

公众号:蓝海资料掘金营,微信deep3321