來源:長亭技術專欄
作者:周知日
Github 項目地址 chaitin/passionfruit
前情提要
雖然沒有 Android 平臺那么多的攻擊面和利用姿勢,iOS 應用依然有安全審計的需求。移動平臺的安全目前采用的策略基本上都是掃描器加上一部分人工的逆向和動態分析。
針對 iOS 應用攻擊面分析,目前筆者了解或使用過的相關工具如下(除去逆向工程使用的調試器和反匯編工具):
- Snoop-It(已停止維護)
- dmayer/idb idb is a tool to simplify some common tasks for iOS pentesting and research
- mwrlabs/needle The iOS Security Testing Framework
- sensepost/objection ? objection - runtime mobile exploration
- iSECPartners/Introspy-iOS IntroSpy
在使用中筆者多多少少遇到了一些問題,例如 needle 在設備上需要部署過多依賴包,idb 不兼容 iOS 10,Introspy 雖好但查詢日志數據庫有一些麻煩……忍不住開始造輪子。
審計工具所需功能大體有如下幾個方面:
- 分析應用是否開啟了必要的編譯器保護
- 分析應用沙盒內的文件內容和權限
- 分析應用使用到的 framework 和動態鏈接庫
- 分析應用存儲的數據,如 UserDefaults, BinaryCookie 和 KeyChain
- 分析剪貼板的使用
- 動態攔截和分析 Objective C 運行時方法
- 動態攔截和分析本地代碼的參數調用和堆棧追蹤
- 分析 UIView 的層級結構和屬性
- 一些基于 hook 實現的修改功能,如設備特征偽造、繞過越獄檢測、繞過 SSL Pinning 等

應用目前仍然在開發中,可能會有 bug 或功能缺失。
設計
在實現方案上,筆者選擇了功能極為強大的 hook 框架 frida.re。關于這個框架不需要我再過多介紹,它在 iOS 平臺上支持對 native 函數、Objective C 運行時的 hook 和調用,可以滿足多種移動安全運行時分析的自動化需求。

Passionfruit 通過 frida 注入代碼到目標應用實現功能,再通過 node.js 服務端消息代理與瀏覽器通信,用戶通過訪問網頁即可對 App 實現常規的檢測任務。
安裝和使用
請訪問 GitHub 上的項目主頁 chaitin/passionfruit 來獲取最新的版本和更新信息。
Passionfruit 的編譯和安裝依賴如下軟件:
- THEOS 用于編譯 Tweak 的 dylib
- node.js 用于運行服務端。可根據個人喜好使用 yarn 或默認的 npm 作為包管理
- libimobiledevice
安裝步驟
- 安裝依賴項,并配置好 THEOS 的環境變量。Mac 下可使用 brew 安裝 libimobiledevice
- 在越獄 iOS 設備上安裝 frida
- 通過 git 將代碼倉庫同步到本地
- 連接越獄設備,設置 THEOS_DEVICE_IP 和 THEOS_DEVICE_PORT
- 第一次使用前,在代碼根目錄運行 npm run build 構建前端代碼和 Tweak
- 運行 npm start 運行服務端,在瀏覽器中訪問 localhost:31337
功能和演示
Passionfruit 最大特點就是基于 Web 的圖形界面。因此你甚至可以在 iPad Pro 這樣的移動設備上訪問這個圖形界面……(需要修改服務端監聽的配置)
完全圖形化的界面可以快速地找到需要 hook 的函數。由于 C 函數缺少運行時參數類型信息,因此對于這些庫函數您需要手動設置一下函數原型。Objective C 可以直接根據反射打印出參數和返回值。
其他工具實現的 checksec 是基于 otool 檢查應用的可執行文件,需要在設備上安裝額外的依賴,或將文件從設備中同步到本地執行命令。Passionfruit 直接分析內存中映射的內容,因此要快上很多。在文件查看方面,Passionfruit 直接讀取應用沙盒內的 Plist、SQLite 數據庫,相比先 scp 下載然后查看可以節約一些時間。
Passionfruit 在不少界面都添加了搜索功能,如模塊列表、導出符號、Objective C 類,甚至 Plist 這樣的序列化數據。
在 iOS 10 中有一個非公開 API UIDebuggingInformationOverlay 可用來在設備上分析界面層級,您可以在 Passionfruit 的 UIDump 面板中點擊按鈕來激活這個界面。

如果您有單步、界面分析等更高級的調試需求,建議還是使用 debugserver 等專門的調試工具。
FAQ
需要越獄嗎?
需要。
雖然 frida 同時支持越獄和非越獄環境,但目前 Passionfruit 暫時只能在越獄設備上使用。原因是筆者一開始在處理 Mach-O 格式解析的時候偷懶沒有移植到 javascript 的實現,直接在 tweak 模塊里復用了 C 代碼。如果有精力可以把這個模塊使用 js 重寫,或者將 dylib 重打包到 IPA 文件中來避免越獄。
為什么不支持 NSLog 查看?
本工具使用的界面是基于瀏覽器的,對于 NSLog 日志這種快速刷新的內容,實時展示會造成顯著的性能問題。在現有工具(Xcode,macOS 自帶的 Console,libimoviledevice 的 idevicesyslog 命令)足夠強大的情況下,沒有必要再開發一個(更難用的)了。
本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/415/
暫無評論