技术讨论 | 四种绕过iOS SSL验证和证书固定的方法

栏目: IOS · 发布时间: 6年前

内容简介:几个月前,1. 安装自己的 CA 证书

严正声明:本文仅限于技术讨论,严禁用于其他用途。

几个月前, Cody Wass 曾发表过一篇关于如何绕过Android验证和证书固定的文章。这篇文章给予了我很大的灵感,因此我决定也分享一些我在工作当中发现的,关于绕过iOS SSL验证和证书固定的方法。Cody在他的文章里重申了中间人攻击,在任何标准渗透测试当中的重要性。通过中间人攻击,我们可以拦截和fuzz所有的HTTP请求,并检查是否存在安全漏洞。在下面的例子中,我将使用Burp Suite作为我的Web代理。本文假设读者对iOS,Xcode,设置手机和在iOS使用Burp拦截HTTP流量有基本的了解。本文我将为大家介绍以下四种,绕过iOS中的SSL验证和证书固定的方法:

1. 安装自己的 CA 证书

2. 将软件安装到 iOS 设备

3. 使用 Objection 和 Frida

4. 使用反汇编程序修改 IPA 文件

方法1:安装自己的 CA 证书

安装自己的CA证书是摆脱SSL errors的第一步。在iOS中安装CA证书相对容易。首先,要做的就是将CA证书放到设备上。这可以通过打开电子邮件附件或下载证书来完成。然后,我们需要配置移动设备和Web代理,以拦截经过的网络流量。具体来说对于Burp Suite,你只需在浏览器中访问 http://burp 并单击“CA Certificate”即可。

接下来,系统将提示你“Install”证书,如下所示。

技术讨论 | 四种绕过iOS SSL验证和证书固定的方法

单击“Install”按钮后,会提示将要安装的证书添加到受信任证书列表中的警告。

技术讨论 | 四种绕过iOS SSL验证和证书固定的方法

你可以进入Settings > General > Profile来验证证书是否已被成功安装。

方法 2:将软件安装到 iOS 设备

如果仍出现SSL errors,或应用程序本身因为等待连接而发生卡死现象,则应用程序服务器可能正在使用某种TLS链验证或 SSL证书固定 。绕过SSL证书固定的最简单方法是,安装易于使用的 工具 软件来帮我们完成这个过程。以下是我所使用的两款工具:

SSLKillSwitch

Burp Mobile Assistant

具体的安装大家直接参考工具的安装说明即可。但使用这些方法,我们需要越狱的iOS设备。近年来,随着苹果公司对iOS设备安全性的不断增强,越狱的难度也变得越来越大。

方法 3:使用 Objection 和 Frida

另一种已验证过的方法是使用 Frida hooks 和  Objection .。Frida是一个非常先进的框架,允许你在运行时干扰应用程序的代码。但Frida需要设备越狱后才能使用。但是,我们可以使用具有完整框架库的Frida Gadget,这样我们就不需要越狱设备了。Objection是这个框架的包装器,将为我们自动化的完成所有工作。

首先,我们需要Apple Developer帐户的有效配置文件和代码签名证书。你可以通过在Xcode中创建测试应用程序来创建有效的配置文件,并在 这里 注册免费的开发人员帐户。

创建测试项目后,下一步是设置代码签名证书。首先,打开Xcode首选项,然后选择“Accounts”。要添加Apple ID帐户,请单击左下角的加号并登录你的帐户。然后单击右下角的“Manage Certificates”。

技术讨论 | 四种绕过iOS SSL验证和证书固定的方法

单击该按钮后,将会跳转到以下界面。要创建证书,请单击左下方框中的加号,然后选择“iOS Development”。加载后,单击“Done”,然后单击“Download Manual Profiles”,将证书加载到计算机上。

技术讨论 | 四种绕过iOS SSL验证和证书固定的方法

将代码签名证书加载到计算机上后,我们可以通过运行以下命令来找到它:

NetSPIs-MacBook-Pro:Test netspi$ security find-identity

Policy: X.509 Basic
Matching identities
1) A[REDACTED]1 "iPhone Developer: [REDACTED]@netspi.com ([REDACTED])"
2) 0[REDACTED]C "iPhone Developer: [REDACTED]@netspi.com ([REDACTED])"
2 identities found

Valid identities only
1) A[REDACTED]1 "iPhone Developer: [REDACTED]@netspi.com ([REDACTED])"
2) 0[REDACTED]C "iPhone Developer: [REDACTED]@netspi.com ([REDACTED])"
2 valid identities found

我们想要加载Frida Gadget动态库,以能够在运行时修改应用程序。在iOS应用程序的上下文中,我们想要提取IPA文件,修改二进制文件以加载FridaGadget.dylib,对二进制文件和dylib进行代码签名,然后重新打包更新的IPA文件。如上所述,我们可以使用Objection来自动帮我们完成所有这些工作。只需运行以下简单命令即可,其中-s是IPA文件,-c是代码签名证书。

NetSPIs-MacBook-Pro:NetSPI netspi$ objection patchipa -s netspi_test.ipa -c 0[REDACTED]C
Using latest Github gadget version: 12.0.3
Remote FridaGadget version is v12.0.3, local is v12.0.1. Downloading...
Downloading from: https://github.com/frida/frida/releases/download/12.0.3/frida-gadget-12.0.3-ios-universal.dylib.xz
Downloading iOS dylib to /Users/netspi/.objection/ios/FridaGadget.dylib.xz...
Unpacking /Users/netspi/.objection/ios/FridaGadget.dylib.xz...
Cleaning up downloaded archives...
Patcher will be using Gadget version: 12.0.3
No provision file specified, searching for one...
Found provision file /Users/netspi/Library/Developer/Xcode/DerivedData/test-fbleootdcdwdyafhyzjmvihvfiga/Build/Products/Debug-iphoneos/test.app/embedded.mobileprovision expiring in 307 days, 1:40:03.015176
Found a valid provisioning profile
Working with app: NetSPI.app
Bundle identifier is: com.netspi.test
Codesigning 13 .dylib's with signature 0[REDACTED]C
Code signing: libswiftDarwin.dylib
Code signing: libswiftUIKit.dylib
Code signing: libswiftCoreImage.dylib
Code signing: libswiftos.dylib
Code signing: libswiftObjectiveC.dylib
Code signing: libswiftCoreGraphics.dylib
Code signing: FridaGadget.dylib
Code signing: libswiftCore.dylib
Code signing: libswiftCoreFoundation.dylib
Code signing: libswiftMetal.dylib
Code signing: libswiftQuartzCore.dylib
Code signing: libswiftFoundation.dylib
Code signing: libswiftDispatch.dylib
Creating new archive with patched contents...
Codesigning patched IPA...
Cannot find entitlements in binary. Using defaults

Copying final ipa from /var/folders/1k/mw7w1kfd4c96jkvkw5mp3qfm0000gn/T/netspi_test-frida-codesigned.ipa to current directory...
Cleaning up temp files...

一旦命令执行完毕,就会为我们生成一个名为netspi_test-frida-codesigned.ipa的新IPA文件,我们可以将其部署到iOS设备上。有一个名为 ios-deploy 的工具,可以和未越狱的iOS设备配合使用。我们可以使用多种不同的选项,具体取决于你要完成的任务(例如,运行调试器,通过USB部署应用程序等)。

要使用ios-deploy,我们需要解压缩IPA文件并运行ios-deploy命令。在下面的示例中,我指定了我想通过USB (-W)部署应用程序,以及我要部署的包(-b)。

NetSPIs-MacBook-Pro:NetSPI netspi$ ios-deploy -W -b ./Payload/NetSPI.app
[....] Waiting for iOS device to be connected
[....] Using 3ff9c90d2b23beadeefdf7bc240211730c84adef (P105AP, iPad mini, iphoneos, armv7) a.k.a. 'MAPen's iPad'.
------ Install phase ------
[ 0%] Found 3ff9c90d2b23beadeefdf7bc240211730c84adef (P105AP, iPad mini, iphoneos, armv7) a.k.a. 'MAPen's iPad' connected through USB, beginning install
[ 5%] Copying /Users/netspi/test/NetSPI/Payload/NetSPI.app/META-INF/ to device
[TRUNCATED]
[ 52%] CreatingStagingDirectory
[ 57%] ExtractingPackage
[ 60%] InspectingPackage
[ 60%] TakingInstallLock
[ 65%] PreflightingApplication
[ 65%] InstallingEmbeddedProfile
[ 70%] VerifyingApplication
[ 75%] CreatingContainer
[ 80%] InstallingApplication
[ 85%] PostflightingApplication
[ 90%] SandboxingApplication
[ 95%] GeneratingApplicationMap
[100%] Installed package ./Payload/NetSPI.app

现在,我们已在iOS设备上安装了应用程序。接下来要做的是打开应用程序并通过Objection与它建立连接。

NetSPIs-MacBook-Pro:NetSPI netspi$ objection explore
_ _ _ _
___| |_ |_|___ ___| |_|_|___ ___
| . | . | | | -_| _| _| | . | |
|___|___|_| |___|___|_| |_|___|_|_|
|___|(object)inject(ion) v1.3.0

Runtime Mobile Exploration
by: @leonjza from @sensepost

[tab] for command suggestions
com.netspi.test on (iPad: 9.0.1) [usb] #

建立连接后,我们只需运行绕过证书验证的内置命令,代理流量即可。

com.netspi.test on (iPad: 9.0.1) [usb] # ios sslpinning disable
Job: b748974e-ed6d-4aaf-b5ea-3fb35a13720a - Starting
[3fb35a13720a] [ios-ssl-pinning-bypass] [NSURLSession] Found 1 matches for URLSession:didReceiveChallenge:completionHandler:
[3fb35a13720a] [ios-ssl-pinning-bypass] [NSURLConnection] Found 5 matches for connection:willSendRequestForAuthenticationChallenge:
[3fb35a13720a] [ios-ssl-pinning-bypass] Hooking lower level method: SSLSetSessionOption
[3fb35a13720a] [ios-ssl-pinning-bypass] Hooking lower level method: SSLCreateContext
[3fb35a13720a] [ios-ssl-pinning-bypass] Hooking lower level method: SSLHandshake
Job: b748974e-ed6d-4aaf-b5ea-3fb35a13720a - Started

方法 4:使用反汇编程序修改 IPA 文件

如果以上三种方法都尝试失败,那么你可以选择使用反汇编程序来修改IPA文件的方法绕过证书验证。对iOS的反汇编内容已超出了本文的讨论范围。对于iOS而言,最常用的反汇编程序是 HopperIDA 。你只需将二进制文件加载到应用程序,并观察移动应用程序尝试与应用程序服务器建立SSL连接时调用的函数背后的逻辑,就可以找到证书固定发生的位置。修改IPA很可能会破坏已签名的应用程序,并导致其无法在iOS设备上进行安装。通过重签名IPA文件,可以帮你解决这个问题。

总结

就像本文开头说的,能够查看和修改从移动应用程序发送至服务器的HTTP请求,是渗透测试工作的重要组成部分。这能够让我们测试人员对应用程序的功能,有更为全面的了解。本文中介绍的方法,都是我们在评估期间常用到的方法,用于在出现SSL证书错误和固定时查看和操纵流量。如果你对文中所提及的内容有任何的疑问,或是你有更好的方法。那么,欢迎你在下面的评论中告诉我!

参考文献

https://www.nccgroup.trust/us/about-us/newsroom-and-events/blog/2015/january/bypassing-openssl-certificate-pinning-in-ios-apps/

http://dji.retroroms.info/howto/iosfrida

  *参考来源: netspi FB小编secist编译,转载请注明来自FreeBuf.COM


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Elements of Programming

Elements of Programming

Alexander A. Stepanov、Paul McJones / Addison-Wesley Professional / 2009-6-19 / USD 39.99

Elements of Programming provides a different understanding of programming than is presented elsewhere. Its major premise is that practical programming, like other areas of science and engineering, mus......一起来看看 《Elements of Programming》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

URL 编码/解码
URL 编码/解码

URL 编码/解码

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具