一、固件安全概述

1.1 什么是固件

固件,说白了就是「嵌入在硬件里的软件」。

它不像 Windows 或 Linux 那样装在硬盘上,而是直接焊死在芯片的 Flash 或 ROM 里。我经常跟团队里的新人说:固件是硬件和软件之间的那座桥。没有它,CPU 连怎么启动都不知道。

举个例子,你按下电脑电源键的那一刻,CPU 首先执行的不是操作系统,而是固件。在 x86 平台上叫 BIOS 或 UEFI,在嵌入式设备里叫 Bootloader,在路由器、摄像头、IoT 设备里,它可能叫 firmware。名字不同,本质一样——它是设备上电后第一个运行的代码。

我个人习惯把固件分成三类:

类型 典型代表 存储位置 更新频率
引导固件 BIOS / UEFI / BootROM SPI Flash / ROM 几乎不更新
系统固件 OpenWrt / 路由器固件 NAND / NOR Flash 按需更新
外设固件 硬盘固件 / 网卡固件 MCU 内部 Flash 厂商推送

你想想看,这三类固件一旦被篡改,后果是什么?系统层面的控制权直接丢失。我在一次红队项目中遇到过,目标服务器所有杀软都正常,但 UEFI 固件里被植入了后门——杀软根本看不见,因为固件在操作系统之下运行。

核心认知:固件是信任链的根。根烂了,上面的一切都不安全。

1.2 固件攻击面分析

很多人觉得固件攻击离自己很远。其实恰恰相反。固件的攻击面比你想象的大得多。

我把它归纳为四个维度,画了张图方便你理解:

固件攻击面全景图 固件攻击面 供应链攻击 更新机制攻击 调试接口攻击 逆向工程攻击 四个维度相互独立又彼此关联,实际攻击往往组合使用

咱们逐个拆开聊。

供应链攻击

这是最隐蔽的一种。攻击者不在设备出厂后动手,而是在固件编译、打包、分发环节植入恶意代码。我记得有个真实案例:某厂商的固件编译服务器被入侵,攻击者在每次自动构建时往固件里插后门,持续了半年才被发现。

  • 源头污染:第三方 SDK、开源库被投毒
  • 编译链劫持:编译器或构建脚本被篡改
  • 分发篡改:固件镜像在 CDN 或 OTA 服务器上被替换

更新机制攻击

固件更新是必要的功能,但也是最大的攻击入口。我曾经逆向过一个 IoT 设备的 OTA 包,发现它居然没有签名校验——任何拿到更新包的人都可以伪造固件。

  • 中间人攻击:OTA 传输过程未加密或未校验
  • 降级攻击:强制刷回有漏洞的旧版本固件
  • 签名绕过:签名算法实现有缺陷或密钥泄露

注意:很多设备厂商为了省成本,固件更新只做了「校验和」而不是「数字签名」。校验和可以被轻易伪造,这等于没设防。

调试接口攻击

JTAG、SWD、UART 这些调试接口,开发阶段是宝贝,生产阶段如果没封掉,就是敞开的后门。

  • 物理访问:通过 JTAG 直接读取 Flash 内容
  • 串口 Shell:UART 接口暴露了 root 权限的调试控制台
  • 边界扫描:利用 JTAG 边界扫描绕过安全启动

逆向工程攻击

攻击者拿到固件镜像后,通过反汇编、静态分析、动态调试来挖掘漏洞或提取密钥。我见过最夸张的一次,有人在路由器固件里硬编码了 SSH 私钥,攻击者直接反编译提取出来,远程登录所有设备。

  • 静态分析:用 Ghidra、IDA Pro 反编译固件
  • 动态调试:在模拟器或真实硬件上运行固件
  • 文件系统提取:解包固件,分析配置文件、脚本、二进制文件

1.3 固件安全的重要性

讲到这里,你可能已经感觉到了——固件安全不是锦上添花,而是底线。

为什么这么说?我给你三个理由:

  1. 固件拥有最高权限。它在操作系统之下运行,可以访问所有硬件资源。杀毒软件、EDR 都跑在操作系统之上,根本看不到固件层的行为。
  2. 固件攻击难以检测。传统的安全检测工具只扫描文件系统和进程,固件驻留在 Flash 或 ROM 里,常规扫描扫不到。我在做固件分析时,经常发现恶意固件已经潜伏了几个月甚至几年。
  3. 固件攻击影响范围大。一个型号的设备可能有百万级出货量,固件漏洞一旦被利用,影响面是几何级的。还记得 Mirai 僵尸网络吗?它就是利用 IoT 设备的固件漏洞,感染了数百万台摄像头和路由器。

我的建议:如果你刚开始接触固件安全,先别急着上手分析。先把「固件是什么、攻击面在哪、为什么重要」这三个问题想清楚。地基打牢了,后面学沙箱分析才不慌。

嗯,这一章的内容就到这里。固件安全的世界很大,我们后面会一步步深入。记住一句话:固件是信任的起点,也是攻击的终点。