3、固件分析环境搭建:搭建Ubuntu虚拟机、安装IDA Pro、Ghidra、QEMU、firmadyne等工具
做固件逆向,说白了就是跟二进制代码打交道。你手里拿到的可能是一个路由器固件、一个摄像头固件,甚至是一个工控设备的底层镜像。没有趁手的兵器,这活儿根本干不了。
我个人习惯把环境分成三层:宿主系统、分析工具、仿真平台。今天我就带你把这三层全部搭起来。嗯,这里要注意,版本选择很关键,选错了后面全是坑。
3.1 宿主系统:Ubuntu虚拟机
为什么选虚拟机?因为固件分析经常会把系统搞崩。我在项目中遇到过好几次,跑了一个恶意固件,宿主机直接蓝屏。从那以后,我所有分析都在虚拟机里做。
3.4.1 虚拟机配置建议
| 配置项 | 推荐值 | 说明 |
|---|---|---|
| CPU核心数 | 4核 | 反编译和仿真时多核优势明显 |
| 内存 | 8GB | Ghidra和QEMU同时跑,8GB是底线 |
| 硬盘 | 80GB动态扩展 | 固件解压后可能膨胀10倍 |
| 网络 | NAT模式 | 方便宿主机与虚拟机通信 |
我建议用 Ubuntu 20.04 LTS。为什么不是22.04?因为firmadyne对Python 3.8的支持最稳定,22.04默认Python 3.10,改起来麻烦。
3.2 反编译利器:IDA Pro
IDA Pro是商业软件,但它的反编译能力目前没有对手。如果你有正版授权,直接装;没有的话,可以用7.5评估版,功能基本够用。
3.2.1 安装步骤
- 下载IDA Pro 7.5 Linux版本
- 解压到
/opt/ida75 - 运行
./ida64启动 - 配置Python插件路径
# 解压
tar -xzf ida75_linux.tar.gz -C /opt/
# 创建软链接
ln -s /opt/ida75/ida64 /usr/local/bin/ida
# 测试启动
ida -c
sudo apt install qtbase5-dev。我曾经在这上面卡了半小时,最后发现是Qt版本不对。
3.3 开源王者:Ghidra
Ghidra是NSA开源的逆向工具,免费、功能强、支持插件扩展。说实话,我现在大部分静态分析都用Ghidra,IDA Pro只用来处理特别复杂的混淆代码。
3.3.1 安装与配置
Ghidra依赖Java 17,这个坑我踩过。Ubuntu默认装的是Java 11,跑Ghidra会报错。
# 安装Java 17
sudo apt install openjdk-17-jdk
# 下载Ghidra 10.3
wget https://github.com/NationalSecurityAgency/ghidra/releases/download/Ghidra_10.3_build/ghidra_10.3_PUBLIC_20230711.zip
# 解压到/opt
unzip ghidra_10.3_PUBLIC_20230711.zip -d /opt/
# 启动
/opt/ghidra_10.3_PUBLIC/ghidraRun
-Xmx4G。分析大固件时,默认的1GB根本不够用。
3.4 仿真引擎:QEMU
固件分析最头疼的是什么?是固件跑不起来。你反编译了半天,发现某个函数逻辑看不懂,这时候就需要动态调试。QEMU就是干这个的。
3.4.1 安装QEMU
# 安装完整版QEMU
sudo apt install qemu-system-arm qemu-system-mips qemu-user-static
# 验证安装
qemu-arm --version
qemu-mips --version
为什么要装 qemu-user-static?因为很多固件是ARM或MIPS架构的,你需要在x86的Ubuntu上模拟运行它们。这个包提供了用户态模拟能力。
-netdev 参数。记住,仿真网络设备时,一定要配置网卡桥接。
3.5 自动化框架:firmadyne
firmadyne是目前最流行的固件仿真框架。它能自动解压固件、识别架构、配置网络、启动模拟。说白了,你给它一个固件,它帮你把整个系统跑起来。
3.5.1 安装firmadyne
# 克隆项目
git clone https://github.com/firmadyne/firmadyne.git
cd firmadyne
# 安装依赖
sudo ./setup.sh
# 下载预编译的二进制文件
wget -O binaries.tar.gz https://firmadyne.s3.amazonaws.com/binaries.tar.gz
tar -xzf binaries.tar.gz
3.5.2 配置数据库
firmadyne用MySQL存储固件信息。这个配置有点绕,我当年第一次装的时候折腾了一下午。
# 安装MySQL
sudo apt install mysql-server
# 创建数据库
mysql -u root -p
CREATE DATABASE firmware;
GRANT ALL PRIVILEGES ON firmware.* TO 'firmadyne'@'localhost' IDENTIFIED BY 'firmadyne';
FLUSH PRIVILEGES;
EXIT;
# 修改firmadyne配置
vi firmadyne.config
# 修改 FIRMWARE_DIR=/path/to/firmadyne
# 修改 MYSQL_USER=firmadyne
# 修改 MYSQL_PASS=firmadyne
3.6 知识体系总览
下面这张图是我自己画的,把整个环境搭建的逻辑串起来了。你照着这个思路,就不会漏掉任何环节。
3.7 环境验证
所有工具装完后,跑一个简单的测试,确保环境没问题。
# 测试IDA Pro
ida -c -B test_binary
# 测试Ghidra
/opt/ghidra_10.3_PUBLIC/ghidraRun -headless test_binary
# 测试QEMU
qemu-arm -L /usr/arm-linux-gnueabihf /bin/ls
# 测试firmadyne
python3 scripts/inferArch.py test_firmware.bin
好了,环境搭好了,后面就可以正式开始分析固件了。记住,工具只是手段,思路才是核心。你想想看,同样的工具,有人能挖出0day,有人连固件都解不开,差别在哪?就在对工具的理解和实战经验上。
公众号:蓝海资料掘金营,微信deep3321