V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
ChiChou
V2EX  ›  分享创造

iOS 应用安全分析工具 Passionfruit

  •  3
     
  •   ChiChou · 2017-10-15 15:28:45 +08:00 · 2451 次点击
    这是一个创建于 2356 天前的主题,其中的信息可能已经有所发展或是发生改变。

    开源! iOS 应用安全分析工具 Passionfruit

    虽然没有 Android 平台那么多的攻击面和利用姿势,iOS 应用依然有安全审计的需求。移动平台的安全目前采用的策略基本上都是扫描器加上一部分人工的逆向和动态分析。

    针对 iOS 应用攻击面分析,目前笔者了解或使用过的相关工具如下(除去逆向工程使用的调试器和反汇编工具):

    在使用中笔者多多少少遇到了一些问题,例如 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 的编译和安装依赖如下软件:

    安装步骤

    1. 安装依赖项,并配置好 THEOS 的环境变量。Mac 下可使用 brew 安装 libimobiledevice
    2. 在越狱 iOS 设备上安装 frida
    3. 通过 git 将代码仓库同步到本地
    4. 连接越狱设备,设置 THEOS_DEVICE_IP 和 THEOS_DEVICE_PORT
    5. 第一次使用前,在代码根目录运行 npm run build 构建前端代码和 Tweak
    6. 运行 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 命令)足够强大的情况下,没有必要再开发一个(更难用的)了。

    第 1 条附言  ·  2017-10-17 11:57:03 +08:00
    今天凌晨收到了 frida 作者的 PR,已经不需要越狱了 XD
    1 条回复    2017-10-15 18:52:34 +08:00
    discrete
        1
    discrete  
       2017-10-15 18:52:34 +08:00
    Web UI 界面看起来不错啊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1157 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 18:29 · PVG 02:29 · LAX 11:29 · JFK 14:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.