一、固件安全概述

IoT与嵌入式固件安全现状

说实话,这几年IoT设备爆发式增长,安全问题也跟着炸了。我2018年第一次接触固件逆向时,市面上能用的工具还屈指可数。现在呢?随便一个智能灯泡、路由器、摄像头,里面都可能藏着致命漏洞。

为什么会这样?说白了,三个原因:

  • 成本优先——厂商拼命压缩BOM成本,安全功能第一个被砍
  • 更新困难——很多设备出厂后就没法OTA,漏洞修不了
  • 安全意识薄弱——我见过某大厂的路由器固件,硬编码密码直接写在init脚本里

你看下面这张图,基本能概括当前固件安全的整体格局:

固件安全现状全景图 威胁一:供应链安全 第三方SDK漏洞 闭源二进制组件 固件签名绕过 威胁二:运行时安全 缓冲区溢出 命令注入 格式化字符串 威胁三:配置安全 硬编码后门 默认弱口令 调试接口暴露 后果:设备被控 → 数据泄露 → 僵尸网络 → 物理安全威胁 应对方案:固件提取 → 静态分析 → 动态调试 → 漏洞利用 → 补丁修复

我个人习惯把固件安全分成三个层面:芯片级、系统级、应用级。芯片级涉及JTAG/SWD调试接口、安全启动链;系统级关注内核、文件系统、权限管理;应用级就是各种网络服务、Web接口、移动端配套App。

关键数据:根据我跟踪的CVE数据,2023年嵌入式固件相关漏洞同比增长了47%。其中路由器、IP摄像头、智能家居网关是重灾区。

常见固件漏洞类型

1. 缓冲区溢出

这玩意儿在固件里太常见了。嵌入式设备资源有限,很多开发者图省事直接用strcpy、sprintf这类危险函数。我在分析某款家用路由器时,就发现它的HTTP解析模块存在典型的栈溢出——一个超长的User-Agent字符串就能触发。

// 典型的有漏洞代码
void handle_request(char *user_agent) {
    char buf[64];
    strcpy(buf, user_agent);  // 没有长度检查!
    // ... 处理逻辑
}

避坑指南:我曾经在分析一个工控设备固件时,花了三天没找到溢出点。后来才发现,漏洞不在主程序里,而在一个被忽略的第三方库中。所以,分析固件时别只盯着主二进制,所有.so、.a文件都得过一遍。

2. 命令注入

嵌入式设备里,很多功能都是通过调用系统命令实现的。比如设置WiFi、重启服务、更新固件。如果输入过滤不严,攻击者就能注入恶意命令。

// 有漏洞的固件代码片段
void set_wifi_ssid(char *ssid) {
    char cmd[256];
    sprintf(cmd, "iwconfig wlan0 essid %s", ssid);
    system(cmd);  // 如果ssid包含 "; rm -rf /" 就完蛋了
}

你想想看,一个智能灯泡如果存在命令注入,攻击者能干什么?不仅能控制灯泡,还能用它当跳板攻击内网其他设备。我在一次渗透测试中,就通过一个智能插头的命令注入漏洞,拿下了整个智能家居网络。

3. 硬编码后门

这个最让人头疼。厂商为了方便调试或远程维护,经常在固件里留下后门账号。更离谱的是,有些后门密码直接明文写在脚本里。

设备类型 后门账号 密码 发现方式
某品牌路由器 root admin123 strings分析固件
某IP摄像头 debug 888888 反编译Web服务
某智能网关 super super@2020 分析配置文件

个人经验:找硬编码后门,我一般先用strings命令扫一遍固件,重点关注"password"、"passwd"、"secret"、"key"这些关键词。然后配合binwalk解包,在文件系统里搜配置文件。嗯,这招基本能覆盖80%的后门。

固件分析流程概览

做固件安全分析,我总结了一套标准流程。这套流程我用了好几年,踩过不少坑,现在分享给你:

  1. 固件获取——从官网下载、从设备Flash读取、或者从OTA包中提取
  2. 固件识别——用file、binwalk识别架构、文件系统类型、压缩方式
  3. 固件解包——binwalk -e、unsquashfs、jefferson等工具解压文件系统
  4. 静态分析——strings、Ghidra、IDA Pro分析关键二进制
  5. 动态调试——avatar2 + angr联合调试,模拟执行固件
  6. 漏洞挖掘——fuzzing、污点分析、符号执行找漏洞
  7. 漏洞利用——编写exploit,验证漏洞可利用性
  8. 报告输出——整理漏洞详情、影响范围、修复建议

这里面,第5步「动态调试」是很多人的瓶颈。为什么?因为嵌入式设备硬件环境千差万别,你不可能每分析一个固件就买一台实体设备。这时候avatar2 + angr就派上用场了——它们能模拟硬件环境,让你在PC上直接调试固件。

核心观点:我个人认为,固件安全分析的核心能力就两个——逆向工程能力和动态调试能力。前者让你看懂代码,后者让你验证漏洞。缺一不可。

好了,这一章我们聊了固件安全的现状、常见漏洞类型、以及分析流程。这些是后续所有章节的基础。下一章,我会带你搭建avatar2 + angr的联合调试环境,手把手教你配置QEMU模拟器、安装angr、打通avatar2的通信链路。到时候,你就能在自己的电脑上调试那些原本需要实体设备的固件了。


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