3. 物联网设备硬件安全

硬件安全是物联网设备安全的地基。软件层的漏洞可以靠补丁修复,但一颗没有安全启动、调试接口敞开的芯片,一旦落到攻击者手里,几乎等于把设备的全部秘密交出去。面试中,这一节考察的不是你会不会用某个工具,而是你是否理解攻击面从哪来、防御链怎么建、每一环失效会导致什么后果。下面按“攻击者视角看硬件—防御者视角建信任链”的顺序展开。

一、调试接口:最容易被忽视的“后门”

物联网设备主板上常见的调试接口有 UART、JTAG、SWD、SPI、I²C 等。其中 UART 和 JTAG/SWD 是面试高频考点。UART 通常用于打印启动日志,很多厂商出厂时并未关闭,甚至保留了 root shell。JTAG/SWD 则能直接读写 CPU 寄存器、内存和 Flash,权限极高。

实际排查时,先用万用表找 GND,再在设备上电瞬间用示波器或逻辑分析仪抓 TX 引脚波形,常见波特率是 115200、57600、38400。找到后接 USB-TTL 转换器,用 screen /dev/ttyUSB0 115200 或 minicom 连接。如果启动日志中出现 Hit any key to stop autoboot 或直接进入 # 提示符,说明 UART 未做保护。JTAG 则可用 openocd 配合 jtagulator 自动识别引脚,识别成功后能 dump 内存。

防御上,量产设备应做到:UART 只保留 TX 用于日志且不可交互,或彻底关闭;JTAG/SWD 通过熔丝(eFuse)永久禁用,或设置调试认证密码;PCB 上调试焊盘尽量不标注丝印,增加物理接触难度。面试时若被问“UART 有日志但无法输入命令,算安全吗”,要回答:日志本身可能泄露内核版本、启动参数、内存地址、密钥加载路径,仍属于信息泄露,应最小化输出。

二、固件提取:从 Flash 到文件系统

固件提取的常见路径有三条:一是通过 UART/JTAG 在线读取;二是拆下 SPI Flash 芯片用编程器读取;三是通过厂商提供的 OTA 升级包或官网下载固件。面试中常考 SPI Flash 的读取。

以 Winbond W25Q128 为例,它是 16MB(128Mbit)的 SPI NOR Flash。用 CH341A 编程器配合 flashrom 读取:

flashrom -p ch341a_spi -r firmware.bin
# 输出示例:
# Found Winbond flash chip "W25Q128.V" (16384 kB, SPI) on ch341a_spi.
# Reading flash... done.

拿到 firmware.bin 后,先用 binwalk firmware.bin 识别内部结构。典型输出会显示 Squashfs、JFFS2、UBI、内核 uImage 等。若看到 Squashfs filesystem,可用 binwalk -e 自动提取,或手动 dd 按偏移切出后 unsquashfs。若固件被加密或混淆,binwalk 可能只显示高熵数据,此时要结合启动日志判断是否在 BootROM 阶段解密,或寻找密钥存储位置。

提取出文件系统后,重点看 /etc/passwd、/etc/shadow、/etc/init.d/、/usr/bin/ 下的自研程序,以及硬编码的密钥、证书、API Token。常见弱点是 root 密码哈希可爆破、私钥明文存放、telnet 默认口令。防御上应做到固件签名、敏感数据加密存储、密钥放入 TPM/SE 而非文件系统。

三、侧信道:不接触代码也能偷密钥

侧信道攻击利用设备运行时的物理泄漏——功耗、电磁辐射、时间、声音——推断密钥。物联网设备因成本低、防护弱,常成为侧信道研究对象。面试中主要考时序攻击和简单功耗分析(SPA)的基本原理。

时序攻击的经典例子是密码比较函数逐字节返回:

// 不安全写法
int check_pwd(char *in, char *real) {
    for (int i = 0; i < len; i++)
        if (in[i] != real[i]) return 0;  // 提前返回,耗时随匹配长度变化
    return 1;
}

攻击者通过测量响应时间,可逐字节猜出正确密码。防御方式是使用常量时间比较,如 memcmp 的常量时间替代实现,或先哈希再比较。

SPA 则通过观察功耗曲线区分“0”和“1”操作。例如 RSA 平方-乘法算法中,平方和乘法功耗不同,攻击者能直接读出私钥比特。防御手段包括:算法层面使用 Montgomery 阶梯、盲化;硬件层面加噪声、稳压、屏蔽。面试时若问“侧信道能否完全防御”,应回答:不能完全消除,只能提高攻击成本到不可接受,属于成本与收益的平衡。

四、安全启动与硬件信任根

安全启动的核心是信任链:从不可变的硬件信任根(RoT)开始,逐级验证下一阶段镜像的签名,只有验证通过才执行。信任根通常固化在 BootROM 或 eFuse 中,包含公钥哈希或对称密钥。

典型流程如下:

  1. 芯片上电,BootROM 执行,读取 eFuse 中的公钥哈希。
  2. BootROM 加载一级引导程序(如 SPL),计算其哈希并与签名验证,通过则跳转。
  3. SPL 验证 U-Boot,U-Boot 验证内核,内核验证根文件系统。
  4. 任一环节失败则停止启动或进入恢复模式。

以 NXP i.MX 系列为例,使用 HAB(High Assurance Boot)时,需用 CST 工具生成 CSF 命令、签名镜像,并烧写 SRK 哈希到 eFuse。烧写后设备处于“Closed”状态,未签名镜像无法启动。面试中常问“安全启动和 Secure Boot 有什么区别”,可答:Secure Boot 通常指 UEFI 规范下的启动验证,安全启动是更广义的概念,物联网中常指基于硬件信任根的逐级验证。

硬件信任根的形式包括:BootROM、eFuse/OTP、TPM、TEE(如 ARM TrustZone)、安全元件(SE)。选择时看成本与安全等级:消费级可用 TrustZone,金融级需 SE 或 TPM。关键判断依据是信任根是否可被软件修改——可修改的就不是信任根。

五、面试实战要点

面对本节问题,建议按“攻击面—利用方式—防御措施—验证方法”四步回答。例如被问“如何评估一款物联网设备的硬件安全”,可答:先看调试接口是否关闭,再尝试提取固件分析敏感信息,接着检查是否启用安全启动,最后评估侧信道防护。每一步都要能说出具体工具、命令和判断依据,而不是停留在概念。

常见追问包括:eFuse 烧错怎么办(不可逆,需换芯片);固件加密后如何分析(找解密点、侧信道、故障注入);安全启动能否防固件回滚(需配合版本计数器)。回答时保持工程思维:没有绝对安全,只有攻击成本是否高于收益。

最后提醒:所有操作必须在授权设备或自己购买的设备上进行,面试中展示的是分析思路和防御能力,而非攻击他人设备的能力。