4、固件分析环境搭建:QEMU模拟器、Binwalk、Firmadyne、FirmAE等工具安装与配置。
做固件安全分析,说白了就是跟一个黑盒子打交道。你拿到一个.bin文件,里面是什么?文件系统怎么解?能不能跑起来?这些问题,都得靠一套趁手的工具链来解决。
我个人习惯,先把环境搭好再动手。别急着分析,工具没配好,后面全是坑。今天我就把QEMU、Binwalk、Firmadyne、FirmAE这几个核心工具的安装与配置,掰开了讲清楚。
4.1 QEMU模拟器:让固件“活”过来
QEMU是个全能选手。它能模拟ARM、MIPS、x86等各种架构。你想想看,一个路由器固件是MIPS架构的,你手里只有x86的电脑,怎么跑?QEMU就是干这个的。
安装QEMU,其实很简单。Ubuntu下一条命令搞定:
sudo apt-get update
sudo apt-get install qemu-system-arm qemu-system-mips qemu-system-x86 qemu-user-static
嗯,这里要注意。qemu-system-*是模拟整个系统,qemu-user是用户态模拟。我一般两个都装,因为场景不同。
配置QEMU网络,这一步容易卡住。QEMU默认的网络模式是用户模式(user mode),固件能上网,但宿主机访问不到它。调试的时候很不方便。
我建议用tap模式。这样固件和宿主机就在同一个网段了。配置步骤:
sudo apt-get install uml-utilities bridge-utils
sudo tunctl -t tap0 -u $(whoami)
sudo ifconfig tap0 192.168.100.1/24 up
然后启动QEMU时加上网络参数:
qemu-system-arm -M virt -kernel vmlinuz -initrd initrd.img \
-netdev tap,id=net0,ifname=tap0,script=no,downscript=no \
-device virtio-net-device,netdev=net0
4.2 Binwalk:固件拆解利器
Binwalk是我用得最多的工具之一。它的核心功能就是扫描固件文件,识别里面嵌入了哪些东西——文件系统、内核、引导程序等等。
安装Binwalk,我推荐从源码编译。因为apt源里的版本通常比较老,有些新格式不支持。
git clone https://github.com/ReFirmLabs/binwalk.git
cd binwalk
sudo python3 setup.py install
装完之后,记得安装依赖的提取工具:
sudo apt-get install mtd-utils gzip bzip2 tar arj lhasa p7zip p7zip-full \
cabextract cramfsprogs cramfsswap squashfs-tools
基本用法,一条命令就能看透固件:
binwalk firmware.bin
输出结果会告诉你:偏移地址、文件类型、描述。比如:
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 u-boot legacy uImage, Linux Kernel...
131072 0x20000 Squashfs filesystem, little endian, version 4.0
看到Squashfs文件系统了吗?这就是我们要解压的目标。用-e参数直接提取:
binwalk -e firmware.bin
我个人习惯,拿到固件先跑一遍binwalk,看看里面有什么。然后再决定下一步怎么走。有一次我分析一个摄像头固件,binwalk直接扫出了三个文件系统——一个主系统,两个备份系统。这种冗余设计,在IoT设备里很常见。
4.3 Firmadyne:全系统模拟框架
Firmadyne是个好东西。它能自动完成固件模拟的全流程——从解包、提取文件系统,到配置网络、启动模拟器。说白了,就是一条龙服务。
安装Firmadyne,步骤稍微多一点。先克隆代码:
git clone https://github.com/firmadyne/firmadyne.git
cd firmadyne
然后安装依赖:
sudo apt-get install busybox-static fakeroot git dmsetup kpartx \
netcat-openbsd nmap python3-psycopg2 python3-pip python3-snappy
接下来,下载预编译的内核和文件系统镜像。Firmadyne需要这些来启动模拟环境:
./download.sh
这个脚本会从网上下载ARM、MIPS等架构的内核。如果下载慢,可以手动去GitHub Releases里找。
配置数据库,Firmadyne用PostgreSQL来管理固件信息:
sudo apt-get install postgresql
sudo -u postgres createuser firmadyne
sudo -u postgres createdb -O firmadyne firmware
sudo -u postgres psql -d firmware < ./firmadyne/database/schema
然后修改firmadyne.config文件,填上数据库密码:
PGPASSWORD=firmadyne
使用Firmadyne模拟固件,一条命令搞定:
sudo ./run.sh -a armel -q 4 firmware.bin
参数说明:-a指定架构,-q指定QEMU版本。Firmadyne会自动解包、配置网络、启动模拟器。等几分钟,固件就“活”过来了。
模拟成功后,你可以用nmap扫描固件的开放端口:
nmap -sV 192.168.100.2
然后就能用浏览器访问固件的Web管理界面了。嗯,这时候你就可以开始挖漏洞了。
4.4 FirmAE:Firmadyne的增强版
FirmAE是Firmadyne的升级版。它修复了Firmadyne的一些问题,比如网络配置失败、文件系统挂载错误等。我个人的经验,FirmAE的模拟成功率比Firmadyne高不少。
安装FirmAE,步骤和Firmadyne类似:
git clone https://github.com/pr0v3rbs/FirmAE.git
cd FirmAE
./setup.sh
setup.sh脚本会自动安装依赖、下载内核镜像、配置数据库。省心很多。
使用FirmAE,同样是一条命令:
sudo ./run.sh -a armel firmware.bin
FirmAE会自动判断架构,然后启动模拟。它还会尝试修复常见的启动问题,比如内核panic、文件系统损坏等。
FirmAE vs Firmadyne,我列个对比表:
| 特性 | Firmadyne | FirmAE |
|---|---|---|
| 模拟成功率 | 约60% | 约80% |
| 网络自动配置 | 有时失败 | 较稳定 |
| 内核panic修复 | 不支持 | 支持 |
| 调试日志 | 有限 | 详细 |
| 社区活跃度 | 较低 | 较高 |
我个人建议,新手直接上FirmAE。省时间,少踩坑。
4.5 工具链协同工作流
这些工具不是孤立的。它们组合起来,才是一套完整的固件分析流水线。我画了一张图,帮你理清关系:
你看,流程很清晰。拿到固件,先用Binwalk拆开看看。然后交给FirmAE或Firmadyne,它们会自动调用QEMU来模拟执行。最后,你就能在模拟环境里分析漏洞了。
我遇到过不少新手,一上来就想用FirmAE跑所有固件。结果跑不起来,也不知道问题出在哪。其实,先用Binwalk看一眼,确认文件系统类型和架构,再选合适的模拟工具,成功率会高很多。
好了,环境搭建就讲到这里。工具装好了,下一步就是实战了。记住,多动手,多踩坑,经验就是这么积累起来的。
公众号:蓝海资料掘金营,微信deep3321