内容简介:几个月前,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”证书,如下所示。
单击“Install”按钮后,会提示将要安装的证书添加到受信任证书列表中的警告。
你可以进入Settings > General > Profile来验证证书是否已被成功安装。
方法 2:将软件安装到 iOS 设备
如果仍出现SSL errors,或应用程序本身因为等待连接而发生卡死现象,则应用程序服务器可能正在使用某种TLS链验证或 SSL证书固定 。绕过SSL证书固定的最简单方法是,安装易于使用的 工具 软件来帮我们完成这个过程。以下是我所使用的两款工具:
具体的安装大家直接参考工具的安装说明即可。但使用这些方法,我们需要越狱的iOS设备。近年来,随着苹果公司对iOS设备安全性的不断增强,越狱的难度也变得越来越大。
方法 3:使用 Objection 和 Frida
另一种已验证过的方法是使用 Frida hooks 和 Objection .。Frida是一个非常先进的框架,允许你在运行时干扰应用程序的代码。但Frida需要设备越狱后才能使用。但是,我们可以使用具有完整框架库的Frida Gadget,这样我们就不需要越狱设备了。Objection是这个框架的包装器,将为我们自动化的完成所有工作。
首先,我们需要Apple Developer帐户的有效配置文件和代码签名证书。你可以通过在Xcode中创建测试应用程序来创建有效的配置文件,并在 这里 注册免费的开发人员帐户。
创建测试项目后,下一步是设置代码签名证书。首先,打开Xcode首选项,然后选择“Accounts”。要添加Apple ID帐户,请单击左下角的加号并登录你的帐户。然后单击右下角的“Manage Certificates”。
单击该按钮后,将会跳转到以下界面。要创建证书,请单击左下方框中的加号,然后选择“iOS Development”。加载后,单击“Done”,然后单击“Download Manual Profiles”,将证书加载到计算机上。
将代码签名证书加载到计算机上后,我们可以通过运行以下命令来找到它:
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而言,最常用的反汇编程序是 Hopper 和 IDA 。你只需将二进制文件加载到应用程序,并观察移动应用程序尝试与应用程序服务器建立SSL连接时调用的函数背后的逻辑,就可以找到证书固定发生的位置。修改IPA很可能会破坏已签名的应用程序,并导致其无法在iOS设备上进行安装。通过重签名IPA文件,可以帮你解决这个问题。
总结
就像本文开头说的,能够查看和修改从移动应用程序发送至服务器的HTTP请求,是渗透测试工作的重要组成部分。这能够让我们测试人员对应用程序的功能,有更为全面的了解。本文中介绍的方法,都是我们在评估期间常用到的方法,用于在出现SSL证书错误和固定时查看和操纵流量。如果你对文中所提及的内容有任何的疑问,或是你有更好的方法。那么,欢迎你在下面的评论中告诉我!
参考文献
http://dji.retroroms.info/howto/iosfrida
*参考来源: netspi , FB小编secist编译,转载请注明来自FreeBuf.COM
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 技术讨论 | 在HTTP协议层面绕过WAF
- 技术讨论 | Fuzz绕过安全狗4.0实现SQL注入
- 技术讨论 | 自动化Web渗透Payload提取技术
- 技术讨论 | 如何编写一段内存蠕虫?
- 技术讨论 | Largebin attack漏洞利用分析
- 技术讨论 | Glibc中堆管理的变化
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。