Frida框架在Fuzzing中的應用

  • 2019 年 12 月 15 日
  • 筆記

由於Frida(https://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原理圖

frida-qbdi-fuzzer原理圖

總結

用Frida來實現閉源程式的程式碼覆蓋引導,程式碼量很少,以Python和JS就可以快速開發起來,但涉及到python等進程的啟動,肯定沒有純C/C++的程式碼運行速度快,但對於Fuzzing,一般還是夠用的,還是值得學習和使用的。