四種繞過iOS SSL驗證和證書鎖定的方法
來自專欄嘶吼RoarTalk4 人贊了文章
幾個月前,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 BasicMatching identities1) A[REDACTED]1 "iPhone Developer: [REDACTED]@netspi.com ([REDACTED])"2) 0[REDACTED]C "iPhone Developer: [REDACTED]@netspi.com ([REDACTED])"2 identities found Valid identities only1) 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]CUsing latest Github gadget version: 12.0.3Remote 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.xzDownloading 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.3No 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.015176Found a valid provisioning profileWorking with app: NetSPI.appBundle identifier is: com.netspi.testCodesigning 13 .dylibs with signature 0[REDACTED]CCode signing: libswiftDarwin.dylibCode signing: libswiftUIKit.dylibCode signing: libswiftCoreImage.dylibCode signing: libswiftos.dylibCode signing: libswiftObjectiveC.dylibCode signing: libswiftCoreGraphics.dylibCode signing: FridaGadget.dylibCode signing: libswiftCore.dylibCode signing: libswiftCoreFoundation.dylibCode signing: libswiftMetal.dylibCode signing: libswiftQuartzCore.dylibCode signing: libswiftFoundation.dylibCode signing: libswiftDispatch.dylibCreating 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. MAPens iPad.------ Install phase ------[ 0%] Found 3ff9c90d2b23beadeefdf7bc240211730c84adef (P105AP, iPad mini, iphoneos, armv7) a.k.a. MAPens 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 Explorationby: @leonjza from @sensepost [tab] for command suggestionscom.netspi.test on (iPad: 9.0.1) [usb] #
現在剩下的工作,就是運行繞過證書驗證的內置命令,然後就可以開始代理流量。
com.netspi.test on (iPad: 9.0.1) [usb] # ios sslpinning disableJob: 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: SSLHandshakeJob: 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
如若轉載,請註明原文地址: http://www.4hou.com/mobile/13742.html
推薦閱讀: