IOS端渗透测试从0到1

移动安全 2年前 (2021) admin
1,225 0 0


这篇文章记录下此次APP渗透测试过程,包括从0搭建渗透测试环境,程序hook检测绕过,绕过原理。


渗透测试环境搭建


越狱


工具环境

  • IPhone 7,固件版本为12.4.1

  • 爱思助手7.0官方最新版本



操作步骤

在进行越狱前,请先确保设备上的重要数据已经备份,比如通讯录等,因为越狱过程无法保证不出现问题,而一旦出现意外设备上的重要数据可能会丢失。

首先连接手机到PC电脑,在手机上弹出的允许设备访问中选择允许访问。

第二步,在爱思助手中选择一键越狱工具。工具箱–>一键越狱。

IOS端渗透测试从0到1


IOS端渗透测试从0到1


第三步,根据设备的固件版本选择越狱工具,推荐使用第一种越狱方法(unc0ver),笔者在测试过程当中就是用的这种方法,其余两种方法在测试过程中都没有成功,可能跟固件版本有关。

第四步,选择越狱方法,点击开始越狱按钮进行越狱工具安装,这一过程会自动在iphone设备上安装unc0ver app。由于app的设备证书是自签名证书,所以在app安装完成后需要在设备管理当中信任该证书才能继续后面的操作。

IOS端渗透测试从0到1


第五步,app安装完成并信任证书后,进入app页面,点击JailBreak进行越狱(这里由于笔者是已经越狱的设备,所以这里显示是Re-JailBreak)。正常越狱的过程应该是很顺滑的,如果在越狱过程当中出现越狱失败的提示,可以在爱思助手上选择安装不同版本的unc0ver app进行尝试,笔者在测试过程当中,最新版本无法完成设备的越狱,选择低版本的app后,越狱成功。

IOS端渗透测试从0到1


IOS端渗透测试从0到1


第六步,越狱成功后,设备中会出现Cydia这个应用程序。通过Cydia可以安装第三方的app,这里笔者先安装最新版的frida server端到设备上。在cydia中添加frida源 https://build.frida.re,点击添加源进行添加。

IOS端渗透测试从0到1


添加完成后,在软件页面搜索frida进行安装。

IOS端渗透测试从0到1


第七步,为了方便以后对iphone设备的管理过程,笔者通过Cydia安装了OpenSSH,安装完成后,会自动启动,并且可通过root/mobile和默认密码alpine登录。注意,安装完成后,修改root用户和mobile用户的默认密码。

IOS端渗透测试从0到1


IOS端渗透测试从0到1


第八步,验证Frida安装情况。frida安装完成后,会自动启动。验证是否安装成功,在命令行输入frida-ps -U,查看进程输出信息。

IOS端渗透测试从0到1


出现上图类似的信息,证明安装成功,可以进行hook操作了。


实战APP流量解密

笔者这次需要测试的APP为一款采用了mpaas sdk加密的应用。在github搜索了相关的解密工具之后,笔者发现一款MpaasPentestTool,正好满足笔者需求(便捷的查看和修改请求包、返回包)。然而,当笔者使用该工具注入app进程后,进程会一段时间后结束运行退出。在经过一番实验之后,笔者确定app在检测到自身OC代码被hook之后,将会自动退出。

IOS端渗透测试从0到1


请注意笔者这里的描述,是检测到自身OC代码被hook。这是因为笔者在尝试hook native库和系统OC库之后,程序并没有检测到,也没有退出。

IOS端渗透测试从0到1


IOS端渗透测试从0到1


此时笔者大胆猜测,该APP只会检测自身OC代码是否被hook,自身native代码的检测情况这里先不管,因为跑MpaasPentestTool这个工具仅仅需要我们hook OC代码即可。接下来就是想尽办法进行绕过检测了,由于笔者IOS逆向水平处于入门水平,没有用IDA去看脱壳后的程序,分析哪里对frida hook进行了检测,这里笔者从frida hook代码编写上入手,看看能否从hook的地方绕过。

在google搜索和仔细查看了Frida官方的API文档后,笔者发现对OC代码进行hook有两者方式可以实现,一种是MpaasPentestTool采用的基于事件的方式,另一种是对函数直接进行替换。

IOS端渗透测试从0到1


IOS端渗透测试从0到1


在发现另一种hook方式之后,笔者将MpaasPentestTool原本的hook方式改为对函数直接进行替换的方式。结果出乎意料的是,竟然直接绕过了app对hook的检测。最终实现了MpaasPentestTool作者给出的效果。

IOS端渗透测试从0到1


IOS端渗透测试从0到1



绕过原理分析

app检测frida hook的原理其实是从Hook技术本身出发,检测hook的特征。通过Google学习,笔者了解到OC存在三种HOOK方式,分别是objc_msgSend、inline hook、imp替换hook。笔者分别查看这两种方式Hook前后,imp指针和函数头部指令的变化,确定这两种方式分别是哪种hook技术。

IOS端渗透测试从0到1


IOS端渗透测试从0到1


IOS端渗透测试从0到1



分别进行注入,查看输出,最后一窥究竟。

Attach实现方式其实是Inline Hook。

IOS端渗透测试从0到1


IOS端渗透测试从0到1


Implement实现方式是替换IMP指针。

IOS端渗透测试从0到1


通过分析Hook技术的实现不同,可以大胆猜测,app检测自身是否被hook采用了检测imp指针指向函数的头部指令是否是ldr + br跳转,如果是则认为自身代码被hook,那么将会直接退出程序自身。


参考资料

  • 为什么使用汇编可以 Hook objc_msgSend(下)- 实现与分析

  • 为什么使用汇编可以 Hook objc_msgSend(上)- 汇编基础

  • Objective-C的hook方案(一): Method Swizzling

  • iOS hook




知识星球介绍:

一次付费 永久免费,到期联系运营即可免费加入】 星球面向群体:主要面向信息安全研究人员. 更新周期:最晚每两天更新一次. 内容方向:WEB安全|内网渗透|Bypass|代码审计|CTF|免杀|思路技巧|实战分享|原创工具

IOS端渗透测试从0到1

原文始发于微信公众号(RedCode Team):IOS端渗透测试从0到1

版权声明:admin 发表于 2021年12月27日 上午11:00。
转载请注明:IOS端渗透测试从0到1 | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...