Frim_AFL部署测试(论文复现)

1. 论文参考(先敬大佬)

Yaowen Zheng, Ali Davanian, Heng Yin, Chengyu Song, Hongsong Zhu, Limin Sun“FIRM-AFL:通过增强过程仿真对物联网固件进行高吞吐量灰盒模糊测试”,USENIX 安全研讨会,2019 年。

源码:GitHub - zyw-200/FirmAFL: FIRM-AFL is the first high-throughput greybox fuzzer for IoT firmware.

2. 项目部署

2.1. 部署环境

ubuntu 16.04 (18.04碰壁了,摆烂!!!)

2.2. 导入源码

git clone https://github.com/zyw-200/FirmAFL

2.3. 编译QEMU和插件文件

需要基本的环境(gcc,pkg-config,zlib1g-dev libglib2.0-dev)

sudo apt install gcc pkg-config zlib1g-dev libglib2.0-dev python
  sudo apt-get install autoconf automake libtool
  sudo apt-get install libffi-dev

2.3.1. 用户模式编译

cd user_mode/
./configure --target-list=mipsel-linux-user,mips-linux-user,arm-linux-user --static --disable-werror
make

2.3.2. 系统模式编译

注意:需要先编译/sleuthkit和pixmax包,不然无法通过(3h)

sudo apt-get install binutils-dev libtsk-dev libboost-dev
cd qemu_mode/DECAF_qemu_2.10/
./configure --target-list=mipsel-softmmu,mips-softmmu,arm-softmmu --disable-werror
make

2.3.2.1. 编译问题

解决方法:

进入pixman目录,然后重新编译

./configure
make

此时会出现sleuthkit问题

cd /home/gjj/FirmAFL/qemu_mode/DECAF_qemu_2.10/shared/sleuthkit/
./configure
make

2.4. 导入Firmadyne

2.4.1. 安装firmadyne的部署流程走一遍

所有的操作都是没有报错和状态即可

2.4.2. 修改位置(不同的位置)

2.4.2.1. 修改所有的路径变量地址
vi ./firmadyne/firmadyne.config 

2.4.2.2. 将 scripts/makeImage.sh 替换为目录中修改firmadyne_modify脚本

2.4.2.3. 导入数据库

(如果已经导入了原始的schma,需要删除表格,重新导入sudo -u postgres dropdb firmware,sudo -u postgres createdb -O firmadyne firmware)

sudo -u postgres psql -d firmware < ./firmadyne/database/data

📎data.doc(删除文件后缀)

3. 使用测试

3.1. 友讯D-Link——DIR-815_FIRMWARE_1.01(mipsel)小端

3.1.1. 获取和配置QEMU固件信息

cd firmadyne
pip3 install python-magic
python3 ./sources/extractor/extractor.py -b dlink -sql 127.0.0.1 -np -nk "../firmware/DIR-815_FIRMWARE_1.01.ZIP" images
./scripts/getArch.sh ./images/9050.tar.gz
./scripts/makeImage.sh 9050
./scripts/inferNetwork.sh 9050
cd ..
python FirmAFL_setup.py 9050 mipsel

#虚拟盘创建

#获取网络接口状态,创建TAP

#python FirmAFL_setup.py 9050 mipsel创建一个9050镜像文件包

3.1.2. 启动FUZZ测试(QEMU+AFL)——用户模式

3.1.2.1. 启动文件调整(run.sh)

对于不同的架构,需要更改firmadyne原始的处理,调用作者写的脚本进行处理

  1. mipsel
ARCH=mipsel
QEMU="./qemu-system-${ARCH}"
KERNEL="./vmlinux.${ARCH}_3.2.1" 
IMAGE="./image.raw"
MEM_FILE="./mem_file"
${QEMU} -m 256 -mem-prealloc -mem-path ${MEM_FILE} -M ${QEMU_MACHINE} -kernel ${KERNEL} \ 

在调用qemu之前添加和替换

  1. mipseb
ARCH=mips
QEMU="./qemu-system-${ARCH}"
KERNEL="./vmlinux.${ARCH}_3.2.1" 
IMAGE="./image.raw"
MEM_FILE="./mem_file"
${QEMU} -m 256 -mem-prealloc -mem-path ${MEM_FILE} -M ${QEMU_MACHINE} -kernel ${KERNEL} \

同上

3.1.2.2. AFL_FUZZ
cd image_9050
python start.py 9050

此时可能会报以下错误

按照作者的意思,用FirmAFL_config/9050/run.sh 替换image_9050下的run.sh

之后就可以开始fuzz

此时属于FUZZ阶段,会向web带端口发送大量畸形数据,web服务可能受影响

可以在test.py文件中看到,基本fuzz点位为web接口(post\host\Cookie等)

3.1.3. 直接仿真(Firmadyne+DECAF)——系统模式

#qemu封装文件来自于DECAF,运行环境来自于Firmadyne

如果不想进行Fuzz,可以直接运行./run.sh(直接启用qemu)

192.168.0.1(账号admin,无密码)

ctrl +a 之后按x即可关闭QEMU

3.2. 友讯D-Link——DAP-2695_REVA_FIRMWARE_1.11.RC044.ZIP(mips/mipseb)大端

3.2.1. 获取和配置QEMU固件信息

cd firmadyne
python3 ./sources/extractor/extractor.py -b dlink -sql 127.0.0.1 -np -nk "../firmware/DAP-2695_REVA_FIRMWARE_1.11.RC044.ZIP" images
./scripts/getArch.sh ./images/9925.tar.gz
./scripts/makeImage.sh 9925
./scripts/inferNetwork.sh 9925
cd ..
python FirmAFL_setup.py 9925 mips

#查看架构

#构造镜像盘

#获取网络接口状态,创建TAP

#创建fork

3.2.2. 启动FUZZ测试

3.2.2.1. 启动文件调整(run.sh)

对于不同的架构,需要更改firmadyne原始的处理,调用作者写的脚本进行处理

在调用qemu之前添加和替换

  1. mipseb
ARCH=mips
QEMU="./qemu-system-${ARCH}"
KERNEL="./vmlinux.${ARCH}_3.2.1" 
IMAGE="./image.raw"
MEM_FILE="./mem_file"
${QEMU} -m 256 -mem-prealloc -mem-path ${MEM_FILE} -M ${QEMU_MACHINE} -kernel ${KERNEL} \

3.2.2.2. AFL_FUZZ

之后就可以开始fuzz

sudo python start.py 9925

此时属于FUZZ阶段,会向web带端口发送大量畸形数据,web服务可能受影响

可以在test.py文件中看到,基本fuzz点位为web接口(post\host\Cookie等)

FUZZ结果在outputs中查看

3.2.3. 直接仿真(Firmadyne+DECAF)——系统模式

#qemu封装文件来自于DECAF,运行环境来自于Firmadyne

如果不想进行Fuzz,可以直接运行./run.sh(直接启用qemu)——失败

直接在fimadyne中尝试——成功

192.168.0.50(账号admin,无密码)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小吗喽_jie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值