首页
论坛
课程
招聘
[自动化挖掘] [Fuzz] [Linux] [原创]使用QAsan对arm64文件进行分析
2021-4-18 17:09 1275

[自动化挖掘] [Fuzz] [Linux] [原创]使用QAsan对arm64文件进行分析

2021-4-18 17:09
1275

1、QAsan简介

        论文地址  https://andreafioraldi.github.io/assets/qasan-secdev20.pdf

        目前找到的唯一能在闭源的arm架构下进行内存漏洞检测的工具,要是有更好的工具希望能交流一下。

        QAsan算是ASan+QEMU两个工具的结合,现在已经集成到AFL++。Asan只能对有源码的代码进行插桩检测,QAsan能对闭源的代码进行内存检测,并且支持arm架构(包括arm32和arm64)。不过缺点是会拉低fuzz的执行效率,而且只能检测出堆溢出的漏洞,如果对闭源的x86_64进行检测,可以去使用retrowrite,这一点在文档里有提到。

        参考文档:https://github.com/AFLplusplus/AFLplusplus/tree/dev/qemu_mode/libqasan


        这里尝试的是ARM64的执行效果,原因是使用的Ubuntu系统是X86_64,是64位的。如果想在64位的系统下对32位的arm文件使用QASan,需要安装其他的依赖项(ia32-libs)。如果不想安装依赖项并直接对arm32位的文件进行检测的话,可以尝试i386的系统。


2、QASan安装


        上一篇( https://bbs.pediy.com/thread-267074.htm  )提到怎么使用AFL++进行fuzz,在编译的时候会出现qasan编译不了的情况,但是这不影响fuzz的过程,不过跑好久都跑不出一个crash来,不如单独编译qasan,等有了crash在去用qasan,还能加快fuzz速度。

        参考 https://github.com/andreafioraldi/qasan

                https://github.com/andreafioraldi/qasan/issues/2 


1、先git下来,用下面的命令。要是太慢的话导入到gitee里面,要用gitee的话记得要把需要recursive的asan-giovese @ b844043放到相应的位置。

git clone --recursive https://github.com/andreafioraldi/qasan.git

2、安装arm64的gcc


安装完成后,aarch64-linux-gnu会默认安装在/usr/aarch64-linux-gnu路径下,设置QEMU_LD_PREFIX为此路径。

sudo apt-get install gcc-aarch64-linux-gnu
export QEMU_LD_PREFIX=/usr/aarch64-linux-gnu/


3、编译qasan

./build.py --arch arm64 --cross aarch64-linux-gnu-gcc

按它的提示执行

./qasan /bin/ls

会报这个错误,是正常的,因为ls是x86架构的,而编译出来的是aarch64的。


4、交叉编译arm64的文件

cd tests/
aarch64-linux-gnu-gcc --static invalid_free.c -o invalid_free
cd ..

5、直接使用qasan测试


tests文件下全是有内存错误的文件,都可以直接报出错误。

./qasan ./tests/invalid_free

6、使用afl++和QAsan进行测试


默认的tests目录下的文件一执行就是错的,不能直接使用afl,所以新建了一个.c文件。

#include <stdio.h>
int main(){
	int a;
	scanf("%d", &a);
	if(a==123456789)
		abort();
	printf("Retry!!\n");
	return 0;
}

用arm64编译后,回到qasan目录下

-U是使用的Unicorn,是qemu上的一个仿真环境。

afl-fuzz -U -i inputs/ -o outputs -m none -- python3 qasan ./tests/mytest


[看雪官方培训] Unicorn Trace还原Ollvm算法!《安卓高级研修班》2021年6月班开始招生!!

收藏
点赞2
打赏
分享
最新回复 (1)
雪    币: 15
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
wx_左撇子 活跃值 2021-4-18 21:14
2
0
不过有个问题,想问下在哪里能找到ARM架构的固件,binwalk了一些固件都是MIPS架构的,但是现在AFL++不支持MIPS架构。
游客
登录 | 注册 方可回帖
返回