當前位置:
首頁 > 新聞 > 四種繞過iOS SSL驗證和證書鎖定的方法

四種繞過iOS SSL驗證和證書鎖定的方法

幾個月前,Cody Wass發布了一篇關於如何繞過Android驗證和證書鎖定(Certificate Pinning)的文章。由此,我覺得也有必要寫一篇關於iOS的。正如Cody在博客中所說的,中間人(MitM)攻擊是任何標準滲透測試的重要組成部分。通過中間人攻擊,我們能夠攔截並模糊處理所有HTTP請求,從而找到安全漏洞。在下面的示例中,我將使用Burp作為我的Web代理。本文假定各位讀者已經對iOS、Xcode、手機設置以及Burp如何攔截iOS的移動HTTP流量有基本了解。在本文中,我主要介紹四種繞過iOS中SSL驗證和證書鎖定的技術:

1、安裝自己的CA證書;

2、將軟體安裝到iOS設備;

3、使用Objection和Frida;

4、使用反彙編程序修改IPA文件。

方法1:安裝自己的CA證書

安裝自己的CA證書是繞過SSL報錯的第一步。在iOS中,安裝CA證書相對比較容易。首先,可以通過電子郵件附件或從網站下載證書的方式,將CA證書放到設備上。在這裡,需要配置移動設備和Web代理,以便能夠攔截網路流量。具體來說,如果使用Burp Suite,我們只需訪問http://burp隨後點擊「CA Certificate」即可。

接下來,系統將提示「安裝」證書,如下圖所示。

點擊「安裝」,會彈出提示將要把證書添加到受信任證書列表中的警告。

我們可以進入到「設置」-「常規」-「配置文件」來驗證證書是否已經被成功安裝。

方法2:將軟體安裝到iOS設備

如果仍然出現SSL錯誤,或者應用程序卡死在等待連接的狀態,那麼可能是因為應用程序伺服器使用了某種TLS鏈驗證或SSL證書鎖定機制。要繞過SSL證書鎖定,最簡單的方法是安裝一個軟體來完成這些工作。下面的這兩個工具在設置和運行上比較簡單:

SSLKillSwitch:https://github.com/nabla-c0d3/ssl-kill-switch2

Burp Mobile Assistant:https://portswigger.net/burp/help/mobile_testing

在工具的主頁上,已經詳細寫出了安裝說明。但是,要使用這種方法,首先需要先對iOS設備進行越獄。近年來,隨著Apple安全性的不斷加強,越高版本的iOS系統越獄就越困難。

方法3:使用Objection和Frida

另一種經過驗證的方法,是使用Frida鉤子和Objection。Frida是一個非常高級的框架,允許我們在運行時干擾應用程序的代碼。具體在這裡,就是干擾證書驗證的這個功能。同樣,該框架僅能運行在越獄後的設備上。但是,我們可以使用具有完整框架庫的Frida Gadget,這就不再需要對設備進行越獄了。Objection是這個框架的包裝器,同樣可以配合實現這種方法。

首先,我們需要Apple Developer賬戶的有效配置文件和代碼簽名證書,可以通過在Xcode中創建測試應用程序來創建有效的配置文件。我們可以在這裡註冊免費的開發人員賬戶:https://developer.apple.com/account/ 。

在創建測試項目後,下一步要設置代碼簽名證書。首先,打開Xcode首選項,然後選擇「賬戶」(Accounts)。要添加Apple ID賬戶,需要點擊左下角的加號,並登錄。然後點擊右下角的「管理證書」(Manage Certificates)。

點擊該按鈕,就會跳轉到下面的屏幕。要創建證書,需要點擊左下方框中的加號,然後選擇「iOS開發」(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(https://github.com/ios-control/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證書錯誤或證書鎖定情況下進行流量的查看和修改。如果對本文有任何疑問或指正,歡迎與我們一同討論。

參考文章

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

[2] http://dji.retroroms.info/howto/iosfrida


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 嘶吼RoarTalk 的精彩文章:

超過5億IoT設備易受到DNS Rebinding攻擊
黑吃黑事件——黑客攻擊SpyHuman監控軟體,4.4億多次通話記錄被泄漏

TAG:嘶吼RoarTalk |