IOT Fuzz 两种思路
基于Qiling框架和afl++进行跨平台二进制Fuzz
Qiling框架
https://docs.qiling.io/en/latest/
https://github.com/qilingframework/qiling
Qiling是一个基于Unicorn后端的高层次的二进制模拟框架,它有如下特性
跨平台: Windows,MacOS,Linux,BSD,UEFI,DOS
跨架构: X86,X86_64,ARM,ARM64,MIPS,8086
多种文件格式: PE,MachO,ELF,COM
支持Linux内核模块,Windows驱动,MacOS内核
在独立的环境中模拟,沙盒化机器代码
支持跨平台,跨架构的调试功能
提供高层次的API用于设置沙盒
允许多个不同层次的Hook(指令级,基本块级,内存访问级,错误处理,系统调用,IO,等等)
允许动态打包的文件
基于Python
Qiling 比较 Unicorn 的优势
Unicorn只是一个纯粹的cpu模拟器,只专注于考虑理解模拟器的虚拟内存,在内存空间之上的
高级别上下文,类似动态库,系统调用,I/O处理,或其他可执行格式像PE,Mach0或者ELF,它
都不关心,没有操作系统相关的上下文。
Qiling是在高层次上设计的框架,不仅可以发挥Unicorn模拟CPU指令的能力,还能理解操作系统,
和许多可执行文件格式,甚至动态链接,所以Qiling在不需要原生操作系统的层面上,执行二进制
文件。
比方说平常要用unicorn模拟一个.so文件,可能还需要考虑好内存映射的问题,手动把.so按照
Linux的ELF的解析方式映射到unicorn的内存中.Qiling就把这个过程简单化了,它能够按照
文件格式正确映射可执行文件。这在配合IDA等软件做分析时很方便。
尽管可能想要一个框架一把梭,自动化把所有平台都模拟起来不太现实,毕竟IOT这块还有许多硬件
特定相关的API。但是通过qiling至少已经能把起步的一些轮子问题解决了,剩下就能专注去处理
一些硬件特定问题也方便。
基于Qiling做二进制fuzz
Fuzz是目前自动化测试比较流行的方法,白盒的Fuzz可以直接用一些现成的框架做测试。但是正对二进制