Frida框架在Fuzzing中的应用

由于Fridahttps://frida.re )动态插桩框架的跨平台、简单易用,现在已经被广泛应用于安全领域。相比Xposed而言,虽不能更底层地去Hook系统进程,但它可以免启动,应对App的hook完全够用,更关键的是,它完全可以用JavaScript来写代码,免去编译的烦恼,调试也方便。

之前在工作中,也就用Frida去Hook Android与iOS应用来做安全测试,效果挺好的,开发起来也挺高效的。本文主要围绕Fuzzing领域,来分析和记录最近一些使用Frida的Fuzzer。

定制型Fuzzer

Frida来Fuzzing APP的方法,首先推荐Project Zero大神写的Adventures in Video Conferencing系列博文,详细介绍了Hook WhatApps和iMessage的输入数据处理函数并进行Fuzzing的方法,同时也开源了Hook iMessage的工具:https://github.com/googleprojectzero/iOS-messaging-tools/tree/master/iMessage ,提供dump和发送消息的功能,自己在额外构造变异数据去Fuzzing。

这种方式特别适用于拥有私有的定制协议或数据格式的APP Fuzzing,只是需要花时间去逆向分析程序的输入数据解析流程,找到关键的处理函数。

通用型Fuzzer

最近又看到两款使用Frida的Fuzzer,出自同一人之手,用PythonJS写的,代码量不多:

  1. frida-js-afl-instr(https://github.com/andreafioraldi/frida-js-afl-instr ):打通AFL++Frida实现内存Fuzzing的工具,仅限Linux平台
  2. frida-qbdi-fuzzer(https://github.com/andreafioraldi/frida-qbdi-fuzzer ):基于FridaQBDI的Android Fuzzer,借鉴AFL的代码覆盖引导思路,实现Android平台下闭源程序的覆盖引导Fuzzing。

下面直接画时序图来看它的原理,就不贴源码分析了:

frida-js-afl-instr原理图

image-20191130121915743

frida-qbdi-fuzzer原理图

image-20191130122032208

总结

用Frida来实现闭源程序的代码覆盖引导,代码量很少,以Python和JS就可以快速开发起来,但涉及到python等进程的启动,肯定没有纯C/C++的代码运行速度快,但对于Fuzzing,一般还是够用的,还是值得学习和使用的。