TA的每日心情 | 擦汗 6 小时前 |
---|
签到天数: 1047 天 连续签到: 5 天 [LV.10]测试总司令
|
前情提要
虽然没有Android平台那么多的攻击面和利用姿势,iOS应用依然有安全审计的需求。移动平台的安全目前采用的策略基本上都是扫描器加上一部分人工的逆向和动态分析。
针对iOS应用攻击面分析,目前笔者了解或使用过的相关工具如下(除去逆向工程使用的调试器和反汇编工具):
·Snoop-It(已停止维护)
· dmayer/idbidbisatooltosimplifysomecommontasks foriOSpentestingandresearch
· mwrlabs/needleTheiOSSecurityTestingFramework
· sensepost/objection??objection-runtimemobile exploration
· iSECPartners/Introspy-iOSIntroSpy
在使用中笔者多多少少遇到了一些问题,例如needle在设备上需要部署过多依赖包,idb不兼容iOS10,Introspy虽好但查询日志数据库有一些麻烦……忍不住开始造轮子。
审计工具所需功能大体有如下几个方面:
· 分析应用是否开启了必要的编译器保护
· 分析应用沙盒内的文件内容和权限
· 分析应用使用到的framework和动态链接库
· 分析应用存储的数据,如UserDefaults,BinaryCookie和KeyChain
· 分析剪贴板的使用
· 动态拦截和分析ObjectiveC运行时方法
· 动态拦截和分析本地代码的参数调用和堆栈追踪
· 分析UIView的层级结构和属性
· 一些基于hook实现的修改功能,如设备特征伪造、绕过越狱检测、绕过SSLPinning等
应用目前仍然在开发中,可能会有bug或功能缺失。
设计
在实现方案上,笔者选择了功能极为强大的hook框架frida.re。关于这个框架不需要我再过多介绍,它在iOS平台上支持对native函数、ObjectiveC运行时的hook和调用,可以满足多种移动安全运行时分析的自动化需求。
Passionfruit通过frida注入代码到目标应用实现功能,再通过node.js服务端消息代理与浏览器通信,用户通过访问网页即可对App实现常规的检测任务。
安装和使用
请访问GitHub上的项目主页chaitin/passionfruit来获取最新的版本和更新信息。
Passionfruit的编译和安装依赖如下软件:
·THEOS用于编译Tweak的dylib
· node.js用于运行服务端。可根据个人喜好使用yarn或默认的npm作为包管理
· libimobiledevice
安装步骤
1. 安装依赖项,并配置好THEOS的环境变量。Mac下可使用brew安装libimobiledevice
2. 在越狱iOS设备上安装frida
3. 通过git将代码仓库同步到本地
4. 连接越狱设备,设置THEOS_DEVICE_IP和THEOS_DEVICE_PORT
5. 第一次使用前,在代码根目录运行npmrunbuild构建前端代码和Tweak
6. 运行npmstart运行服务端,在浏览器中访问localhost:31337
功能和演示
Passionfruit最大特点就是基于Web的图形界面。因此你甚至可以在iPadPro这样的移动设备上访问这个图形界面……(需要修改服务端监听的配置)
完全图形化的界面可以快速地找到需要hook的函数。由于C函数缺少运行时参数类型信息,因此对于这些库函数您需要手动设置一下函数原型。ObjectiveC可以直接根据反射打印出参数和返回值。
其他工具实现的checksec是基于otool检查应用的可执行文件,需要在设备上安装额外的依赖,或将文件从设备中同步到本地执行命令。Passionfruit直接分析内存中映射的内容,因此要快上很多。在文件查看方面,Passionfruit直接读取应用沙盒内的Plist、SQLite数据库,相比先scp下载然后查看可以节约一些时间。
Passionfruit在不少界面都添加了搜索功能,如模块列表、导出符号、ObjectiveC类,甚至Plist这样的序列化数据。
在iOS10中有一个非公开APIUIDebuggingInformationOverlay可用来在设备上分析界面层级,您可以在Passionfruit的UIDump面板中点击按钮来激活这个界面。
如果您有单步、界面分析等更高级的调试需求,建议还是使用debugserver等专门的调试工具。
FAQ
需要越狱吗?
需要。
虽然frida同时支持越狱和非越狱环境,但目前Passionfruit暂时只能在越狱设备上使用。原因是笔者一开始在处理Mach-O格式解析的时候偷懒没有移植到javascript的实现,直接在tweak模块里复用了C代码。如果有精力可以把这个模块使用js重写,或者将dylib重打包到IPA文件中来避免越狱。
为什么不支持NSLog查看?
本工具使用的界面是基于浏览器的,对于NSLog日志这种快速刷新的内容,实时展示会造成显著的性能问题。在现有工具(Xcode,macOS自带的Console,libimoviledevice的idevicesyslog命令)足够强大的情况下,没有必要再开发一个(更难用的)了。
|
|