目前在学习研究针对IOT固件的虚拟化仿真,以及基于虚拟化技术的IOT固件模糊测试。FIRM-AFL作为USENIX安全顶会上发表的IOT固件模糊测试技术,对其进行复现和研究很有学习价值。但是在复现过程中,由于固件仿真本身的复杂性和内核环境的兼容性,遇到了很多困难。同时由于诸如firmadyne这样的上层项目维护缓慢,有很多bug无人修复,出现了很多底层的错误。

作者在参照github上的issues讨论以及网上的一些帖子后,初步完成了FIRM-AFL的复现工作,由于网上还没有关于该工作复现的系统性文章,故作此篇。用以便于之后回顾,以及与同业者交流学习。

项目简介

论文:Yaowen Zheng, Ali Davanian, Heng Yin, Chengyu Song, Hongsong Zhu, Limin Sun, “FIRM-AFL: High-throughput greybox fuzzing of IoT firmware via augmented process emulation,” in USENIX Security Symposium, 2019.

论文项目地址:https://github.com/zyw-200/FirmAFL

项目简介:FIRM-AFL 是物联网固件的第一个高通量灰盒模糊器。FIRM-AFL 解决了物联网固件模糊测试的两个基本问题。首先,它通过启用 posix 兼容固件的模糊处理来解决兼容性问题,这些固件可以在系统仿真器中仿真。其次,采用“增强进程仿真”技术解决了系统模式仿真造成的性能瓶颈。通过将系统模式仿真与用户模式仿真相结合,增强的进程仿真作为系统模式仿真提供了高兼容性,作为用户模式仿真提供了高吞吐量

项目复现

一、环境搭建

系统:Ubuntu16.04LTS(作者尝试了Ubuntu18.04、20.04,Kali20.04都未成功)

python版本:python2.7和python3.7(注意Ubuntu16.04版本自带的是python3版本是3.5,需自行更新为python3.7)

相关依赖:(参考回答https://github.com/zyw-200/FirmAFL/issues/16)

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

二、开始安装

(参考回答https://github.com/zyw-200/FirmAFL/issues/6)

1、获取项目

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

2、编译用户模式

cd ./FirmAFL/user_mode/
sed -i '40s/static //' util/memfd.c
./configure --target-list=mipsel-linux-user,mips-linux-user,arm-linux-user --static --disable-werror
make

3、编译系统模式

cd ../qemu_mode/DECAF_qemu_2.10/
sed -i '40s/static //' util/memfd.c
./configure --target-list=mipsel-softmmu,mips-softmmu,arm-softmmu --disable-werror
make

2、3过程中若出现如下错误,则进行相应操作:(建议未出错也执行下方指令安装依赖。)

(1)ERROR zlib check failed

sudo apt-get install zlib1g-dev

(2)ERROR: glib-2.12 gthread-2.0 is required to compiler QEMU

sudo apt-get install libglib2.0-dev 

(3)/bin/sh: 1:autoreconf: not found

sudo apt-get install autoconf automake libtool

4、安装Firmadyne

cd ../../
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
cd binwalk
sudo ./deps.sh
sudo python ./setup.py install
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

此处仅安装了python2的binwalk包,Binwalk只能被python2调用,但无法被python3调用,因此还需要安装python3的包。注意别让两个binwalk文件包位置冲突。

(参考firmware-analysis-plus from liyansong2018 - GithubHelp)

cd ../../
git clone https://github.com/liyansong2018/binwalk.git
cd binwalk
sudo ./deps.sh
sudo python3 setup.py install
sudo pip3 install python3-magic

6、编译Firmadyne数据库(自行设置数据库密码)

请自行下载好data.xz(Box)

cd ../FirmAFL/firmadyne
sudo apt-get install postgresql
sudo apt-get install libpq-dev
dropdb -U firmadyne -h 127.0.0.1 firmware #出错就跳过即可
sudo -u postgres createuser -P firmadyne
sudo -u postgres createdb -O firmadyne firmwarecd database
cp /home/churchkm/Downloads/data.xz ./    #此处data.xz的路径请自行更改
xz -d data.xz
mv data schema
chmod +x schema
sudo -u postgres psql -d firmware < ./schema

7、使用Firmadyne仿真固件

首先自行修改firmadyne.config的如下部分,改为自己firadyne目录的绝对地址

执行以下操作

cd ../
sudo ./download.sh
sed -i '4s/#//' firmadyne.config
cp ../firmadyne_modify/makeImage.sh ./scripts/
sudo ./sources/extractor/extractor.py -b dlink -sql 127.0.0.1 -np -nk "../firmware/DIR-815_FIRMWARE_1.01.ZIP" images
sudo ./scripts/getArch.sh ./images/9050.tar.gz
sudo ./scripts/makeImage.sh 9050
sudo ./scripts/inferNetwork.sh 9050

8、使用FirmAFL对仿真好的固件执行模糊测试

cd ../
python3 FirmAFL_setup.py 9050 mipsel
cp ./FirmAFL_config/9050/run.sh ./image_9050/  #即用FirmAFL_config中的run.sh替换image_9050中的run.shcd image_9050
sudo ./run.sh

等待大概一分钟后(固件程序启动后),另外打开一个新的终端,也是在image_9050目录下执行

python3 test.py

最后执行

sudo user.sh

对该固件开始进行模糊测试,效果大致如下图:

9、其他错误补充

1)使用pip3时出现诸如下的SSL模块错误

pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.

则进行如下操作,

sudo apt-get install openssl
sudo apt-get install libssl-dev

回到安装python3.7的安装包,重新进行python3.7的安装

cd Python-3.7.2
./configure --with-ssl
make
sudo make install

 2)出现 ModuleNotFoundError: No module named 'CommandNotFound'

参考此文解决在ubuntu16.04中输入不存在的shell命令时,报错ModuleNotFoundError的(靠谱)解决方案_Goodwillie的博客-CSDN博客

论文FirmAFL固件模糊测试工具——复现之路相关推荐

  1. 他们从各大操作系统中发现了26个 USB 漏洞,用的是这款模糊测试工具

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 普渡大学的研究员 Hui Peng 和瑞士洛桑联邦理工学院的研究员 Mathias Payer 在多种操作系统(如 Linux.mac ...

  2. 定向模糊测试工具Beacon基本用法

    Beacon是一个定向模糊测试工具,给定行号,能够定向探索行号附近的代码区域.主要思想是采用静态分析的方法获取到与目标有关的变量的最弱前置条件(weakest precondition)的信息,并在相 ...

  3. 模糊测试工具Simple Fuzzer

    模糊测试工具Simple Fuzzer 模糊测试是一种不同于渗透测试的漏洞检测方式.它向目标系统发送各种非预期的输入,然后通过监视异常结果来发现漏洞.Kali Linux虽然作为渗透测试系统平台,但也 ...

  4. Web模糊测试工具Powerfuzzer

    Web模糊测试工具Powerfuzzer Powerfuzzer是Kali Linux自带的一款Web模糊测试工具.该工具基于各种开源模糊测试工具构建,集成了大量安全信息.该工具高度智能化,它能根据用 ...

  5. cpu针脚测试软件,Sandsifter:一款专门针对X86处理器的模糊测试工具

    前言 今天给大家介绍的是一款名叫Sandsifter的x86处理器模糊测试工具.该工具可以通过系统生成的机器码来搜索处理器指令集,并通过监控异常数据来审计x86处理器中的隐藏指令和硬件漏洞.Sands ...

  6. stretchblt 模糊_微软开源持续开发模糊测试工具OneFuzz

    点击蓝字关注我们 近日,微软开源了OneFuzz--一个微软内部使用的,由开发人员驱动的持续开发模糊测试平台.开源后,世界各地的开发人员都可以通过OneFuzz直接从其开发系统接收模糊测试结果. 模糊 ...

  7. 2021年软件测试工具总结——模糊测试工具

    ~ 什么是模糊测试?~ 模糊测试(Fuzz Testing)是一种自动化的软件测试技术,最初是由威斯康辛大学的巴顿·米勒于1989年开发的,通常用于识别程序中的潜在漏洞.模糊测试的核心是自动或半自动的 ...

  8. 模糊测试工具defensics

    defensics是一个模糊测试工具,百度百科对模糊测试(Fuzzing)的定义是,是一种通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法.它是通过异常输入的方式触发原来未知的漏洞. ...

  9. Wfuzz模糊测试工具-能模糊的地方都能模糊

    作者:小刚 一位苦于信息安全的萌新小白帽,记得关注给个赞,谢谢 本实验仅用于信息防御教学,切勿用于其它用途 Wfuzz模糊测试-URL爆破扫描 WFUZZ wfuzz参数 wfuzz使用方法 1.最基 ...

最新文章

  1. android开发我的新浪微博客户端-用户授权页面UI篇(3.1)
  2. Eclipse 代码自动提示的设置
  3. 原生php使用foreach,如何使用php中foreach()
  4. 用Windows Live Writer离线写博客
  5. 最小帧长度的计算公式_网络工程师考试常用计算公式汇总(二)
  6. 深入浅出Java回调机制
  7. Flowable 数据库表结构 ACT_HI_IDENTITYLINK
  8. mysql源代码安装_mysql源代码安装
  9. An attempt by a client to checkout a Connectio n has timed out报错解决
  10. matlab自适应高斯滤波,[matlab] 自适应高斯滤波器在二维图像上的应用
  11. TLQ7/8 常用命令说明
  12. oracle 11g的Oracle Enterprise Manager(Oracle企业管理器,简称OEM)
  13. 苹果手机上滑动会卡顿_7种办法解决苹果手机卡顿 让你的手机用起来如丝般顺滑...
  14. Android音视频点/直播模块开发实践总结-zz
  15. 切勿忽视晶振的选型设计!
  16. 爬虫基础-requests库的使用
  17. 旅行路线可视化研究与实现(Java+Android+Eclipse实现的旅游APP)
  18. Ajax 学习 二 Accordion和AccordionPane 淡入淡出效果和AutoSize自动尺寸
  19. echarts自传作品入口
  20. [机器学习入门笔记] 1. 周志华. 《机器学习》

热门文章

  1. c语言实现动态字符串,C语言怎么实现可变长度字符串
  2. river歌曲表达的意思_英文歌曲_river是什么意思_沪江英语
  3. 认是计算机第2节知识点,2.2《优化计算机》教案
  4. 北京工业大学微机原理和c语言,北京工业大学 微机原理 实验九
  5. AI-多模态-文本->图像-2021:Stable Diffusion【开源】【目前开源模型中最强】
  6. 稻盛和夫:只有极度认真工作,才能扭转人生!
  7. vue devtool的安装与使用
  8. 阿里云移动测试平台MQC移动测试沙龙
  9. kali2020.1中文字体乱码/kali乱码/汉化
  10. YYKit系列之——YYCache使用