文章目录
一、FirmFuzz简介
FirmFuzz是基于Linux的固件模糊测试方法,创新点在于通过Web端进行模糊测试。官方关于FirmFuzz的安装教程较为粗略,因此本文在此给出较为详细的安装步骤。
开源仓库链接:https://github.com/HexHive/FirmFuzz
二、环境
Ubuntu 16.04(论文中的实验环境,推荐此)
Python3.7、Python2.7
三、安装过程
根据github中README中的指示,主要分为“Setup instructions”和“Run instructions”两部分
3.1 启动
- 克隆FirmFuzz
sudo git clone https://github.com/HexHive/FirmFuzz.git
- 安装依赖库(可能这里列举的不全,根据提示安装即可)
sudo apt-get install busybox-static fakeroot git dmsetup kpartx netcat-openbsd nmap python-psycopg2 python3-psycopg2 snmp uml-utilities util-linux vlan
- 编译
进入到FirmFuzz根目录,运行setup.py
sudo ./setup.py
- 修改路径
(1)修改./framework/scripts/env_var.config下的TEST_PATH路径,值为你的系统变量PATH
(2)修改cleanup_fs.sh中的ROOT_DIR指向你的FirmFuzz根目录
3.2 运行
在官方的说明中,这部分是包含三个步骤的:文件系统提取、固件仿真、模糊测试
3.2.1 文件系统提取
文件系统这里使用到的是firmadyne,其实与Firm-AFL中的文件系统提取是一样的,下面给出步骤
- 克隆firmadyne
sudo git clone --recursive https://github.com/firmadyne/firmadyne.git
- 回退一下firmadyne的版本,新版本有问题,我是回退后解决了该问题(给出我回退的版本,仅供参考)
git log
git reset 74a99a5715a7602e0cc3950fa2759bf7dac56ac2
- 安装binwalk
需要注意的是deps.sh脚本中的好多链接都失效了,需要注意修改,并确定是否各个模块成功安装
sudo git clone https://github.com/ReFirmLabs/binwalk.git
cd binwalk
sudo ./deps.sh
sudo python ./setup.py install
For Python 2.x, sudo apt-get install python-lzma
sudo -H pip install git+https://github.com/ahupp/python-magic
sudo -H pip install git+https://github.com/sviehb/jefferson
- 安装数据库
sudo apt-get install postgresql
sudo -u postgres createuser -P firmadyne, with password firmadyne
sudo -u postgres createdb -O firmadyne firmware
sudo -u postgres psql -d firmware < ./firmadyne/database/schema
- 进入firmadyne下载所需的文件
cd ./firmadyne
./download.sh
- 下载固件并提取固件文件系统
sudo wget http://www.downloads.netgear.com/files/GDC/WNAP320/WNAP320%20Firmware%20Version%202.0.3.zip
sudo ./sources/extractor/extractor.py -b Netgear -sql 127.0.0.1 -np -nk "WNAP320 Firmware Version 2.0.3.zip" images
3.2.2 固件仿真
- 把上一步提取到的文件(.tgz类似结尾的)放到一个名为IMAGE_DIR的文件夹下,这个文件夹名可以是随意的
- 运行脚本
sudo ./run_batch_fs.sh IMAGE_DIR
如果说成功提取了,将会在final文件夹下生成一个scratch_ffs的文件夹
3. 进入scratch_ffs文件夹下,进入对应的固件镜像编号下,运行run.sh启动仿真
sudo ./run.sh
3.2.3 模糊测试(Fuzzing)
- 先安装一些依赖
sudo apt-get install python-pip python-dev
libffi-dev libssl-dev libxml2-dev
libxslt1-dev libjpeg8-dev zlib1g-dev g++
sudo pip install "mitmproxy==0.18.2"
sudo pip install "numpy"
sudo pip install "selenium==3.4.3"
- 运行模糊测试
- 启动selenium
java -jar selenium-server-standalone-3.4.0.jar
- 启动仿真
sudo ./run.sh
- 启动代理(-R参数是仿真启动后运行的地址)
sudo mitmdump -R http://192.168.10.1 -s proxylogger.py
- 运行模糊测试(检测CI漏洞)
sudo python fuzzer.py -d ~/location/of/emulated/firmware/ -u http://0.0.0.0:8080 -v 1 -a 1
3.2.4 运行截图
最后贴一张图
问题汇总
升级Python3.5 到Python3.7
sudo apt-get install zlib1g-dev libbz2-dev libssl-dev libncurses5-dev libsqlite3-dev libreadline-dev tk-dev libgdbm- dev libdb-dev libpcap-dev xz-utils libexpat1-dev
sudo apt-get install liblzma-dev libffi-dev libc6-dev
wget 'https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tgz'
tar zxvf Python-3.7.3.tgz #解压源码
cd Python-3.7.3 #进入到解压文件
sudo mkdir -p /usr/local/python3 #新建Python3.7的工作目录
./configure --prefix=/usr/local/python3 --enable-optimizations #配置
make #编译
sudo make install #安装
cd /usr/bin #进到python可执行目录
ll -a|grep python3 #查看python3的版本
ll -a|grep pip3 #查看pip3的版本
sudo rm -rf /usr/bin/python3
sudo rm -rf /usr/bin/pip3
sudo ln -s /usr/local/python3/bin/python3.7 /usr/bin/python3
sudo ln -s /usr/local/python3/bin/pip3.7 /usr/bin/pip3
Python3 -V
Pip3 -V
安装过程中会遇到各种未知错误,仔细确认之前的步骤是否出错
(随记2024.7.17)