当前位置: 首页 > news >正文

FirmAFL

FirmAFL使用并改进了Firmdyne模拟方式,并利用AFL对IoT固件实施高通量灰盒Fuzzing。

一、项目简介

FIRM-AFL 是 第一个针对物联网固件的高吞吐量灰盒模糊测试器支持mipsel、mipseb和armel三种CPU架构 ,涵盖Firmadyne数据库中90.2%的固件。
FIRM-AFL 解决了物联网固件模糊测试的两个基本问题:
  • 解决了兼容性问题:它通过启用 posix 兼容固件的模糊处理来解决兼容性问题,这些固件可以在系统仿真器中仿真;
  • 解决了性能瓶颈:采用“ 增强进程仿真”技术解决了系统模式仿真造成的性能瓶颈。通过将 系统模式仿真 (高通用性、低效率)用户模式仿真 (低通用性、高效率)相结合,增强的进程仿真作为系统模式仿真提供了高兼容性,作为用户模式仿真提供了高吞吐量。
要模糊测试的程序主要运行在用户模式仿真,以实现高效率。只有在必要时切换到全系统仿真,以确保程序的正确执行,从而实现通用性。
FIRM-AFL基于AFL和Firmadyne实现,其中AFL负责对物联网固件中用户指定的程序进行覆盖引导模糊测试,就像使用AFL对普通用户级程序进行模糊测试一样,Firmadyne负责用户模式仿真和全系统仿真之间的切换,以确保给定的程序能够被正确地仿真。
我们设计并实现了FIRM-AFL,这是AFL的增强功能,用于模糊化物联网固件。我们 保持 AFL 的工作流程不变,并将用户模式 QEMU 替换为增强的流程仿真,其余组件保持不变。新的工作流如图 所示:

二、用法

先安装依赖:
sudo apt -get install git
sudo apt -get install binutils -dev
sudo apt -get install -y libsdl1 .2 -dev zlib1g -dev libglib2 .0 -dev libbfd -dev build -essential binutils qemu libboost -dev git libtool autoconf xorg -dev
1 、获取项目
cd /home/zhang/Desktop/
git clone https :// github . com / zyw - 200 / FirmAFL . git
2 、编辑用户模式
cd ./FirmAFL /user_mode /
./configure --target -list =mipsel -linux -user ,mips -linux -user ,arm -linux -user --static --disable -werror
make
3 、编译系统模式
cd ../qemu_mode /DECAF_qemu_2.10 /
./configure --target -list =mipsel -softmmu ,mips -softmmu ,arm -softmmu --disable -werror
make
4、安装Firmadyne
cd ../../    # 即在 FirmAFL/目录下
sudo apt -get install busybox -static fakeroot git dmsetup kpartx netcat -openbsd nmap python -psycopg2 python3 -psycopg2 snmp uml -utilities util -linux vlan
git clone --recursive https ://github .com /firmadyne /firmadyne .git
5、安装binwalk
git clone https ://github .com /devttys0 /binwalk .git   #  FirmAFL/目录下
cd binwalk
sudo ./deps .sh
sudo python ./setup .py install
6、 编译Firmadyne数据库(自行设置数据库密码)
cd ../firmadyne
sudo apt -get install -y postgresql
sudo service postgresql start
sudo service postgresql status
# 用户的密码设置为: firmadyne
sudo -u postgres createuser -P firmadyne 安装postgres后状态不对    等价于 sudo -u postgres psql -c "create role firmadyne with login password 'firmadyne';"
sudo -u postgres createdb -O firmadyne firmware # 创建数据库firmware
准备好 data.xz数据:
  data.xz_免费高速下载|百度网盘-分享无限制 (baidu.com)
cd database
cp /home /zhang /Downloads /data .xz ./    # 此处data.xz的路径请自行更改
xz -d data .xz
mv data schema
chmod +x schema
sudo -u postgres psql -d firmware < ./schema
7、 使用Firmadyne仿真固件
7.1、进入Firmadyne目录,然后打开firmadyne .config, 修改 FIRMWARE_DIR 的路径为当前 Firmadyne 目录的绝对路径
vi ../firmadyne/ firmadyne . config
# 以下为 firmadyne.config 中的内容
# uncomment and specify full path to FIRMADYNE repository
FIRMWARE_DIR = /home/zhang/Desktop/FirmAFL/firmadyne/
# specify full paths to other directories
BINARY_DIR = ${FIRMWARE_DIR} /binaries /
TARBALL_DIR = ${FIRMWARE_DIR} /images /
SCRATCH_DIR = ${FIRMWARE_DIR} /scratch /
SCRIPT_DIR = ${FIRMWARE_DIR} /scripts /
# functions to safely compute other paths
... ...
7.2、要为所有组件下载我们预先构建的二进制文件
sh ./download .sh    # 开启外网或者手工下载放到 firmadyne/binaries/目录下
7.3、 将 scripts/makeImage.sh 替换为 FirmAFL/firmadyne_modify/下的 makeImage . sh
cp ../firmadyne_modify /makeImage .sh ./scripts /
7.5、使用extractor提取filesystem
  • - nk:no kernel,不提取内核;
  • - np:no parallel operation,没有并行操作;
  • - sql: SQL服务器的主机名 
  • - b: 固件镜像的品牌
  • Images:存储压缩文件在images .
# extractor . py中的头部修改为 python3
sudo ./sources /extractor /extractor .py -b dlink -sql 127.0.0.1 -np -nk "../firmware/DIR-815_FIRMWARE_1.01.ZIP" images
提取后的文件如下:
此时数据库: psql -U firmadyne -h127.0.0.1 -p5432 -dfirmware
7.6、识别固件的架构并将结果存储在数据库的表中
sudo ./scripts /getArch .sh ./images /9050.tar.gz
此时数据库:
7.7、创建编号为9050的固件的qemu镜像
sudo ./scripts /makeImage .sh 9050
生成镜像:
/home/zhang/Desktop/FirmAFL/firmadyne//scratch//9050//image/:
/home/zhang/Desktop/FirmAFL/firmadyne//../image_9050:
7.8、指定固件的网络配置并将信息记录到 ./scratch/1/qemu.initial.serial.log
sudo ./scripts /inferNetwork .sh  9050
7.9、FirmAFL准备工作
cd ../
python3 FirmAFL_setup.py 9050 mipsel # 会在 FirmAFL/image_9050/目录下生成一些文件
8、替换run.sh
>>> 因为这个固件是项目示例,可以按照如下方法操作替换run.sh:
cp ./FirmAFL_config / 9050 /run .sh ./image_9050 /  # 即用FirmAFL_config中的run.sh替换image_9050中的run.sh
两者的区别在于:
>>> 若固件不是项目示例,则直接在FirmAFL /image_id /run .sh修改,以便使用我们修改后的 QEMU 和内核来模拟固件,并在 RAM 文件上运行。
For 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} \
For 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} \
9、运行模糊测试过程
运行 start.py 脚本后,FirmAFL将启动固件仿真,系统初始化(120s)后,将开始模糊测试过程。(也许你应该使用 root 权限来运行它。
cd image_9050
python3 start .py 9050
执行遇到错误:
参考: QEMU Segmentation fault when I run the example · Issue #47 · zyw-200/FirmAFL (github.com)
意思是对/home/zhang/Desktop/FirmAFL/qemu_mode/DECAF_qemu_2.10/shared/vmi.cpp中的391行注释掉,再重新 编译系统模式
最终结果:

三、参考

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

IoT固件Rehosting综述 - FreeBuf网络安全行业门户

[翻译]Firm-AFL:高效的IOT固件灰盒fuzz-智能设备-看雪-安全社区|安全招聘|kanxue.com

FIRM-AFL: 通过增强进程仿真实现物联网固件的高吞吐量灰盒模糊测试_固件模糊测试_寂寞烟火~的博客-CSDN博客

论文FirmAFL固件模糊测试工具——复现之路_h0_yang的博客-CSDN博客

http://www.lryc.cn/news/167084.html

相关文章:

  • SpringMVC的整合完成CRUD(增删改查)
  • Postman使用_Tests Script(断言测试)
  • 问道管理:华为概念股捷荣技术13天10板,监管质疑迎合热点炒作
  • VR云游:让游客足不出户享受旅行的乐趣
  • vue3学习源码笔记(小白入门系列)------ 重点!响应式原理 代码逐行分析
  • 62、SpringBoot 使用RestTemplate 整合第三方 RESTful 服务
  • Linux基本认识
  • leetcode top 100 (8)无重复字符的最长子串(滑动窗口
  • 我也惊呆了!原来软件开发根本不需要会编码
  • 定制化图标——Element UI 组件图标替换指南
  • 63、SpringBoot---定制 RestTemplate--消息转化器、拦截器
  • 面试系列 - Redis持久化机制详解
  • Ceph入门到精通-存储集群ceph df 用量统计算法说明
  • 堡垒机的相关介绍
  • 无涯教程-JavaScript - INDIRECT函数
  • LiveNVR监控流媒体Onvif/RTSP功能-支持海康摄像头海康NVR通过EHOME协议ISUP协议接入分发视频流或是转GB28181
  • 一年一度的中秋节马上又要到了,给你的浏览器也来点氛围感吧
  • CentOS8安装mysql-community-client错误解决
  • 故障排除指南:解决 Kibana Discover 加载中的 6 个常见问题
  • 创建一个简单的外卖订餐系统
  • 《追逐胜利:编程之路上的三子棋游戏实践》
  • 身份和访问管理解决方案:混合型IAM
  • 微信小程序动态添加表单模块
  • HTML5+CSS3小实例:纯CSS实现彩虹倒映水面的唯美背景
  • Beautiful Soup简介
  • Springboot2.7集成websocket及相关问题
  • MES管理系统和ERP系统在生产制造管理中的应用
  • Netty Channel 详解
  • 技师学院物联网实训室建建设方案
  • SpringBoot项目--电脑商城【增加/减少购物车商品数量】