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,出自同一人之手,用Python
和JS
寫的,程式碼量不多:
- frida-js-afl-instr(https://github.com/andreafioraldi/frida-js-afl-instr):打通
AFL++
與Frida
實現記憶體Fuzzing的工具,僅限Linux平台 - frida-qbdi-fuzzer(https://github.com/andreafioraldi/frida-qbdi-fuzzer):基於
Frida
與QBDI
的Android Fuzzer,借鑒AFL的程式碼覆蓋引導思路,實現Android平台下閉源程式的覆蓋引導Fuzzing。
下面直接畫時序圖來看它的原理,就不貼源碼分析了:
frida-js-afl-instr原理圖

frida-qbdi-fuzzer原理圖

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