导语:objection工具包目前只在iOS上,其旨在允许您能够在非越狱iOS设备runtime时,在其未加密的iOS应用程序上执行各种安全相关的任务。
介绍
在这篇文章中,我想介绍一下我一直在研究的一个工具包,叫做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可以尝试和转储在调用时传递的方法参数。
… 以及更多。