objection - 基于 Frida 的 iOS APP Runtime 探测工具

本文讲的是objection - 基于 Frida 的 iOS APP Runtime 探测工具

介绍

在这篇文章中,我想介绍一下我一直在研究的一个工具包,叫做objection。这个名字其实所隐含的意思就是“object”以及“injection”。objection是由Frida提供的可以对移动平台的runtime进行检测的工具包。该工具包目前只在iOS上,其旨在允许您能够在非越狱iOS设备runtime时,在其未加密的iOS应用程序上执行各种安全相关的任务。功能包括检查特定应用程序的KeyChain,以及在(或之后)执行期间检查磁盘上剩余的各种工件。

随着iOS设备的越狱越来越难以被做到,并且即将到来的iOS 11会使你不得不做出许多其他操作问题来试图阻止现有的iOS设备更新(也会无法越狱),而objection将允许您在应用程序沙箱的现有限制内执行大部分典型的移动安全评估。

为什么

很多时候,我们作为分析师都会发现自己处在一个尴尬的位置——我们需要向你解释你所拥有的史诗般的pwnage的“现实世界相关性”。通常, 你必须承认你的设备越狱了,而事实上对于您所执行的这种攻击有多么“真实”,我们都不得不产生怀疑。而这样做的目的无非是让你有root权限,并且这种技术看起来比其他任何方式都好,对吧?是的,但这不是唯一的办法。

抛开客户自身参与的案例不谈,大多数存在的工具都是要求您的设备进行越狱(而且认为这样是正确的)。但是如果您根本没有越狱设备呢?那么可能您只能够关注应用程序消耗的API端点,寄希望SSL pinning被打破后足够让您了解其工作原理。SSL pinning可以理解为证书绑定。在一些应用场景中,客户端和服务器之间的通信是事先约定好的,既服务器地址和证书是预先知道的,这种情况常见于CS架构的应用中。这样的话在客户端事先保存好一份服务器的证书(含公钥),每次请求服务器的时候,将服务器返回的证书与客户端保存的证书进行对比,如果证书不符,说明受到中间人攻击,马上可以中断请求。这样的话中间人就无法伪造证书进行攻击了。 

让我们来改变这一现状吧!

举例说明

首先我们来揭开盖子了解一下它,objection会使用  Frida  将对象注入到被打了补丁的应用程序runtime中,并在该应用程序安全上下文中执行它们从而能够执行各种任务。比较典型的任务可能是短暂的命令,例如ls 可以让您从移动应用程序角度浏览移动设备文件系统,当然也可以使用更长时间的命令,例如禁用ios sslpinning这一用于固定SSL证书的常用方法,并防止您正在使用的应用程序验证失败。

当我们谈论文件系统时,也可以直接从设备下载文件(您有读访问权限),还可以重新上传授予写入权限的文件,例如应用程序文档目录。 

objection还包括一个内联SQLite编辑器,用于操作可能存在的随机sqlite数据库。

实例展示

使用objection来检测已经打补丁和运行的iOS应用程序各个部分的示例会话如下所示:

https://sensepost.com/blog/2017/objection-mobile-runtime-exploration/

主要功能 

虽然仍在进行中,但objection已经包含了许多功能。其中一些值得注意的有:

与远程文件系统进行交互,上传和下载获得访问权限的文件。
转储当前进程内存,浏览加载的模块以及导出模块。
在远程文件系统上与SQLite数据库进行交互。
转储共享存储器的各种比特,比如NSUserDefaults,NSHTTPCookieStorage 以及iOS设备磁盘上人们可读格式的.plist 文件。
模拟越狱环境,以便在这样的环境中测试iOS应用程序的行为。
iOS SSL pining 利用众所周知的SSL-Killswitch2方法绕过模块。
转储iOS keychain。
执行iOS TouchID绕过。
执行一个类转储,它将列出可用的Objective-C类和类方法。
动态hook并观察特定类方法的方法调用。另外,objection可以尝试和转储在调用时传递的方法参数。

… 以及更多。

原文发布时间为:2017年7月17日

本文作者:Change

本文来自合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。

原文链接

时间: 2024-09-19 09:16:21

objection - 基于 Frida 的 iOS APP Runtime 探测工具的相关文章

ios-开发iOS App,服务端采用哪些语言和架构比较好?

问题描述 开发iOS App,服务端采用哪些语言和架构比较好? 开发iOS App,服务端采用哪些语言和架构比较好?对这个接触的比较少,希望大家能够指点指点 解决方案 除非在服务器端有大量的运算,否则什么语言都不要用,用Parse http://www.parse.com.简单的说Parse是专门面向移动应用的云计算解决方案.它使用no-schemajason格式数据库,并以restful的service形式暴露给第三方应用.官方提供了iOS Android javascript的SDK 也有非

如何用 React Native 创建一个iOS APP?

诚然,React Native 结合了 Web 应用和 Native 应用的优势,可以使用 JavaScript 来开发 iOS 和 Android 原生应用.在 JavaScript 中用 React 抽象操作系统原生的 UI 组件,代替 DOM 元素来渲染等. React Native 使你能够使用基于 JavaScript 和 React 一致的开发体验在本地平台上构建世界一流的应用程序体验.React Native 把重点放在所有开发人员关心的平台的开发效率上--开发者只需学习一种语言就

app-使用HTML5开发基于Android手机的APP

问题描述 使用HTML5开发基于Android手机的APP 使用HTML5开发一个完整的基于Android手机的课程APP,可以不?都需要用到那些技术, 用什么开发工具比较好? 解决方案 phonegap或者居于phonegap的cordova都可以讲h5页面编译为Android,ios,wp的app 解决方案二: HTML5同求,...... 解决方案三: 用dcloud可以,不懂可以百度 解决方案四: 我用过APPCAN和APIcloud,感觉还是挺方便的(虽然这两个也经常被吐槽),而且官网

《iOS App界面设计创意与实践》——快速提示:iOS开发策略

快速提示:iOS开发策略 iOS App界面设计创意与实践 在我们深入iOS UI.动画和手势背后的技术之前,掌握一些基础知识很重要.对于设计师而言,虽然不要求读完本书后能够编写代码,但是有一些标准的iOS开发策略,开发者或者必须在基于iOS SDK开发中遵循,或者应该作为最佳实践来遵循.作为设计师,了解这些因素对开发人员的影响,对于理解如何设计最佳用户体验是至关重要的.作为开发人员,快速温习一下最佳实践并没有害处. 模型-视图-控制器 当谈及编码原则时,模型-视图-控制器(MVC)是最基础的.

iOS APP 中的不可变模型以及一致性数据

本文讲的是iOS APP 中的不可变模型以及一致性数据, 今年早些时候,为了给用户,尤其是大部分海外的用户更快更清晰的体验,我们全面重构了我们的 iOS 应用.这次重构的其中一个目的是将我们的应用迁移到一个不可变模型的层面上.在这篇博客中,我将会讨论这样做的动机,并探索我们的新系统是如何处理模型的更新,从 API 读取新信息,以及保持数据持久性的. 为什么选择不可变模型? 因为现今许多应用都转而使用了不可变设计,'不可变模型'已经成为了一个耳熟能详的术语.不可变性意味着再初始化后模型将不可再更改

iOS App 的逆向工程: Hacking on Lyft

About the Speaker: Conrad Kramer 2010 年,Conrad Kramer 开发了他的第一个越狱 App Graviboard,从那以后便开始了他的 iOS 开发生涯.他做一些常规的 iOS 开发,同时也在 Cocoa 社区的多个开源项目上活跃,比如:AFOAuth2Client 和 WFNotificationCenter. Conrad 现在把全部的精力投入到了 Workflow 上,Workflow 是一个 iOS 自动工具,从后台到 UI 都是他一个人在做

《iOS App界面设计创意与实践》——iOS设备

iOS设备iOS App界面设计创意与实践有一件事是肯定的:总是会有新的iPod不断推出.过去的10年中都是这样的,我认为未来的数年时间将会持续.没有人可以质疑iPod对社会产生的影响.有趣的是,在近几年iPod在更具突破性的iOS系统上简直变成了一个特性,或者说一个应用软件. 当iPhone首次在2007年夏季推出时,苹果公司发布了一个新的操作系统(OS)叫做iPhone OS.iPhone OS是当时运行在手机上的最强大的操作系统.事实上,它基于与运行在苹果桌面电脑和笔记本电脑上的操作系统M

IOS App 无代码入侵的方法hook详细介绍_IOS

iOS App 无代码入侵的方法hook 继续Objective-C runtime的研究 最近公司项目在做用户行为分析 于是App端在某些页面切换,交互操作的时候需要给统计系统发送一条消息 在几十个Controller 的项目里,一个一个地加代码那完全是不可能的,维护起来也是吃力 但这里需要处理的是 Controller, 可以有以下方式实现上述需求 1. 利用Objective-C 中的对象继承 继承 在面向对象开发中是非常常用的,像我们现在做的项目工程中都会有一个BaseViewContr

iOS - App 间的通信方式

1.前言 iOS 系统是相对封闭的系统,App 各自在各自的沙盒(sandbox)中运行,每个 App 都只能读取 iPhone 上 iOS 系统为该应用程序程序创建的文件夹 AppData 下的内容,不能随意跨越自己的沙盒去访问别的 App 沙盒中的内容. 所以 iOS 的系统中进行 App 间通信的方式也比较固定,常见的 App 间通信方式以及使用场景总结如下. 2.URL Scheme URL 协议 这个是 iOS App 通信最常用到的通信方式,App1 通过 openURL 的方法跳转