IOT Fuzzing框架AFL++ (上)

IoT 2年前 (2022) admin
707 0 0

0x00.前言

Fuzzing是目前漏洞挖掘比较热门和常用的漏洞挖掘技巧,之前的一篇文章已经给大家介绍了几个IOT Fuzzing常用的框架,点击下方图片进入阅读☟☟

IOT Fuzzing框架AFL++ (上)

今天主要针对前面提到的框架进行详细的阐述。


0X01.AFL++


AFL++ 是 Google 的 AFL 的一个分支,具有更快的速度,更多的突变,更多的自定义模块等。

AFL++的github地址:https://github.com/AFLplusplus/AFLplusplus,在这里看到更完整的教程和测试用例等内容。


这里我们主要使用AFL++ Fuzzing 测试IOT的二进制文件,当我们解压提取一个固件时,能够获得大量的IOT二进制应用,如果要进行漏洞挖掘则需要将二进制文件进行逆向分析,然后查找危险函数以及输入接口,对于一个大型的应用,直接进行二进制分析会大大降低我们的效率,所以可以使用Fuzzing技术对IOT的二进制文件进行模糊测试,提高漏洞挖掘效率。

对于IOT的二进制文件通常由于架构的不同,不能直接进行Fuzzing,AFL++可以使用Qemu、Unicorn或Frida 三种模式进行Fuzzing,虽然不如有源码进行Fuzzing高效,但是其适用面广,并且同样能提高漏洞挖掘效率。

AFL++使用qemu用户模式模拟仿真来运行二进制文件,其使用的qemu是进行修改的版本,在程序执行时检测基本块,根据收集的信息生成测试用例,通过生成的大量测试用例触发不同的代码路径,从而提高代码的覆盖率,提高触发Crash的概率。

AFL++和其他的类似的Fuzzing工具(AFL,hongfuzz等)一样,仅适用于文件输入的Fuzzing,不支持从套接字输入的程序,对于套接字的Fuzzing测试在下篇进行讲解,本篇文章将重点落在环境的搭建及文件输入相关的二进制应用的Fuzzing。


0x02.AFL++环境搭建


系统环境:Ubuntu 18.04

测试固件:TP-Link SR20、Cisco RV130X

AFL++的安装也比较简单,执行步骤如下:

$ sudo apt update

$ sudo apt install git make build-essential clang ninja-build pkg-config libglib2.0-dev libpixman-1-dev

$ git clone https://github.91chi.fun/https://github.com/AFLplusplus/AFLplusplus.git

$ cd AFLplusplus

$ make all

$ cd qemu_mode

$ CPU_TARGET=arm ./build_qemu_support.sh # 这里编译ARM架构的

0x03.AFL++案例一

这里进行测试TP-Link SR20路由器的固件,固件的下载地址如下:https://static.tp-link.com/2018/201806/20180611/SR20(US)_V1_180518.zip

使用Binwalk提取固件。

$ binwalk -Me tpra_sr20v1_us-up-ver1-2-1-P522_20180518-rel77140_2018-05-21_08.42.04.bin

IOT Fuzzing框架AFL++ (上)

接下来我们查找来自文件输入的程序进行Fuzzing测试。

IOT Fuzzing框架AFL++ (上)

这里可以看到大家耳熟能详的bmp2tiff应用,那么我们就拿bmp2tiff进行Fuzzing测试,生成一个bmp的测试用例,将测试用例放到创建的bmp-input文件夹中,同时创建bmp-output Fuzzing输出文件夹。

IOT Fuzzing框架AFL++ (上)

接下来,执行以下命令进行Fuzzing测试:

$ QEMU_LD_PREFIX=./squashfs-root/ /home/iot/tools/AFLplusplus/afl-fuzz -Q -i squashfs-root/bmp-input/ -o squashfs-root/bmp-output/ — ./squashfs-root/usr/bin/bmp2tiff @@ /dev/null # root权限下

# -Q:适用qemu模式

# -i:输入文件夹

# -o:输出文件夹

# @@:表示将用来替换的样本

# /dev/null:忽略错误信息

IOT Fuzzing框架AFL++ (上)

可以看到在Fuzzing期间触发了8个crash。

0x04.AFL++案例二

这里进行测试的是Cisco RV130X路由器的固件,固件下载地址如下:https://software.cisco.com/download/home/285026141/type/282465789/release/1.0.3.55?i=!pp

同样提取固件,这里要分析的是负责处理json的程序,jsonparse。

IOT Fuzzing框架AFL++ (上)

同样生成测试的json文件,输入文件夹和输出文件。

IOT Fuzzing框架AFL++ (上)

json文件的内容如下:

{“name”:”Jason Ray”,”profession”:”Software Engineer”,”age”:31,”address”:{“city”:”New York”,”postalCode”:64780,”Country”:”USA”},”socialProfiles”:[{“name”:”Twitter”,”link”:”https://twitter.com”},{“name”:”Facebook”,”link”:”https://www.facebook.com”}]}

执行如下命令进行Fuzzing测试:

$ QEMU_LD_PREFIX=./squashfs-root/ /home/iot/tools/AFLplusplus/afl-fuzz -Q -i ./squashfs-root/input-json/ -o ./squashfs-root/output-json/ — ./squashfs-root/usr/sbin/jsonparse @@  # root权限下

IOT Fuzzing框架AFL++ (上)

可以看到也出现了crash,这里使用程序直接解析生成的crash文件。

IOT Fuzzing框架AFL++ (上)

这里可以看到触发段错误。

0x05.总结

以上就是AFL++针对IOT对于文件输入类型的二进制应用的Fuzzing测试案例,相信通过上面的方法,大家也能更快的挖掘出IOT相关的漏洞,下篇将为大家讲解针对网络套接字输入的Fuzzing测试案例。

0x06.参考链接

https://blog.attify.com/fuzzing-iot-devices-part-1/

点击下方阅读原文查看更多技术文章~

IOT Fuzzing框架AFL++ (上)
IOT Fuzzing框架AFL++ (上)

物联网行业干货到手

礼物又怎能错过

识别下方二维码

领取惊喜好礼

IOT Fuzzing框架AFL++ (上)

官网网址:www.xinruisec.com

社区网址:www.iotsec-zone.com

原文始发于微信公众号(IOTsec Zone):IOT Fuzzing框架AFL++ (上)

版权声明:admin 发表于 2022年3月3日 下午4:00。
转载请注明:IOT Fuzzing框架AFL++ (上) | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...