这是一篇开源项目的软文。
Grapefruit 的前身是 passionfruit,目前在 GitHub 有 1.5k 的星标,最早是笔者仿照 idb tool 的功能用 node.js 和 frida 重写的一个带界面的工具。idb Tool 早已年久失修,而一些替代框架例如 FSecureLABS/needle(目前停止维护)和 sensepost/objection(还支持 Android,仍在积极开发)都是字符界面,体验和 Web 各有千秋。
重写之后的 Grapefruit 在界面交互和代码架构上都完全推翻了前者的设计,我也打算停止维护前者而转向新项目的开发。因为实在懒得维护多语言,所以很抱歉只提供了英文的界面。
功能
Grapefruit 目前的功能大体如下:
-
查看 App 的基本信息,包括是否启用了常见的缓解措施、沙箱路径、entitlements,以及 Info.plist 的内容
-
枚举 URL schemes 入口并测试
-
应用存储,包括 Cookies、KeyChain 和 UserDefaults(偏好设置)
-
直接浏览和下载沙盒内的数据
-
无需下载,直接查询沙盒内 SQLite3 数据库
-
枚举和检索所有的 Objective-C 类,查看类信息和方法
-
查看模块信息和导出符号
-
反汇编
-
基本的界面审查,可以直达 delegate 方法的代码实现
-
枚举所有的 UIWebView 和 WKWebView 实例并注入 js 代码(在没有完整版 F12 的时候可以凑合一下)
虽然是作为 Passionfruit 的替代品,笔者精力有限并没有能完全重写之前的功能,例如 hook 生成和日志输出都还在开发当中。
安装配置
frida 可以通过 gadget 和重打包的方式在非越狱设备上使用,不过笔者没有深入测试过。推荐的配置直接用越狱 iOS 安装 frida 框架,然后在电脑端(支持 Windows、Linux 和 Mac,包括新出的 Apple Silicon,甚至树莓派上也试过了)通过 USB 或者局域网连接。
首先越狱 iOS 和 frida 的配置就不必多说了,具体可以参考 frida 的官方文档和众多中文教程。
在电脑端只需要 node.js,然后用 npm install -g igf 即可安装 igf 命令。直接运行 igf ,然后浏览器访问 http://localhost:31337 即可。
如果需要改变 Web 界面的默认 IP 和端口,可以使用 -p 1234 -h 0.0.0.0 参数。
需要说明的是,通常使用的 frida-tools 包是一个 Python 工具,不过 Grapefruit 完全使用 js 开发,并不依赖 Python 版。两者可以共存,并且在 Grapefruit 出现异常的时候也可以使用原装的工具除错。
如果是 Windows,需要安装 iTunes 以通过 USB 连接 iPhone。如果安装的是 Windows 商店版的 iTunes,可能会出现间歇性无法连接。保持 iTunes 在前台打开即可解决。
如果在 Linux 下也出现无法访问 USB 的现像,可以安装 libimobiledevice-utils。
一些想法
这个项目的定位类似 BurpSuite ,不过不是面向 http 协议,而是 App 运行时层面的问题。不会直接作为扫描器定位到具体的安全风险点,而是尝试尽可能多的列举出相关的信息辅助分析。
其实常见的渗透测试报告很多所谓风险点没有太大的实战意义,笔者希望这个工具能真正成为刷 Bug Bounty 和甲方自查的利器。iOS 的 App 安全能做的文章不多,偶尔也能遇到一些可以直接利用的漏洞,比如 WebView 相关的风险。
frida 官方的工具包是 Python 的,而笔者却选了 node.js 作为开发平台。主要还是因为 Web 前端工具链无法离开 node 生态,而且 frida 的 python binding 目前没有支持 asyncio,一些基于异步消息的功能实现麻烦。
老实说写代码的体验 python 要优于 nodejs,更多质量高的包,以及不会出现 node 原生库跨版本 abi 不兼容的问题。目前遇到许多错误报告都是关于无法安装 frida-node 二进制包的。
项目的 bug 反馈请到 GitHub 仓库。地址可查看原文或直接访问
https://github.com/chichou/grapefruit
原文始发于微信公众号(非尝咸鱼贩):iOS App 渗透测试工具 Grapefruit
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论