溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用Frida框架繞過Android應用程序的SSL Pinning

發(fā)布時間:2021-09-04 11:37:52 來源:億速云 閱讀:252 作者:chen 欄目:數(shù)據(jù)安全

這篇文章主要介紹“如何使用Frida框架繞過Android應用程序的SSL Pinning”,在日常操作中,相信很多人在如何使用Frida框架繞過Android應用程序的SSL Pinning問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”如何使用Frida框架繞過Android應用程序的SSL Pinning”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

大家好!本文我將詳細為大家解釋如何使用frida框架,繞過Android應用程序的SSL pinning。

以下是本文將涵蓋的內容:

Frida和SSL pinning簡介

要求

設置和安裝

Frida服務器設置

設置BurpSuite

推送代理的CA證書:

腳本注入繞過SSL pinning

步驟概述

疑難解答

Frida 和 SSL pinning 簡介

Frida是什么?

Frida官網上是這么說的:

它是針對本地APP的類似油猴插件的東西,用更專業(yè)的術語來說,它是一個動態(tài)代碼檢測toolkit。它可以讓你注入JavaScript代碼片段或者你自己的庫到Windows中的APP中,也可以注入到macOS,GNU/Linux,iOS,Android和QNX的APP中。Frida還提供了一些構建在Frida之上的簡單工具。這些工具你可以直接使用,也可以根據(jù)自己的需求來調整,或者是作為如何使用API的示例。

簡而言之,F(xiàn)rida就是一個讓你可以注入腳本到本地APP(此案例我們將注入到安卓APP中)中的工具,從而修改APP的行為(在這里例子中,我們可以繞過ssl pinning并執(zhí)行中間人攻擊,即使APP使用的是HTTPS/SSL連接),并且實時的進行動態(tài)測試。

如今,大多數(shù)應用程序已在其移動應用中實現(xiàn)了SSL pinning。這是為什么呢?讓我們思考一個問題,假設我們要在設備和服務器之間安全地交換一些數(shù)據(jù)。SSL傳輸層加密將使數(shù)據(jù)傳輸安全可靠?在數(shù)據(jù)傳輸之前,如果服務器的SSL證書與請求的主機名和受信任的根證書匹配,則客戶端會檢查該證書。

如何使用Frida框架繞過Android應用程序的SSL Pinning

它不能確保提供的證書是服務器為請求的主機名提供的實際證書。因此,依賴設備的可信存儲證書不會使數(shù)據(jù)傳輸“安全”。

證書鎖定(Certificate pinning)是遠程服務器在應用程序本身中信任的硬編碼證書,因此它將忽略設備證書存儲,并將信任自己的硬編碼證書,進一步的應用程序將使用該硬編碼證書“安全地”與遠程服務器通信。

當我們對大多數(shù)移動應用程序的HTTP請求進行動態(tài)分析時,SSL pinning繞過是需要完成的主要步驟,因為現(xiàn)如今組織對數(shù)據(jù)隱私和通過網絡的數(shù)據(jù)安全傳輸變得更加重視,像一些來自中間人攻擊的威脅也成為了他們重點關注的對象。

Frida是一個框架,它將腳本注入到原生應用中,以在運行時操作應用程序的邏輯,這是一種更為動態(tài)的方法,可用于移動應用的滲透測試任務。

要求

在開始使用之前我們需要進行一些設置,第一次設置可能需要花點時間,但在此之后就會變得很輕松。如果你在任何一個步驟都出現(xiàn)了問題,都可以參考文章末尾的“疑難解答”部分。建議將所有下載的內容保存在一個文件夾中。

I. 已 root 的設備/模擬器:

我們需要一個已root的設備或模擬器,因為我們需要將腳本注入到設備的根目錄。我使用的是genymotion。Genymotion非常易于設置和使用,你可以在此處下載它。

一旦完成了genymotion的安裝,我們需要安裝一個Android設備(Android 7+)。我將使用具有以下配置的“Google pixel XL”設備。

如何使用Frida框架繞過Android應用程序的SSL Pinning

II. Python frida 包安裝:

從這里安裝Python for Windows。

我們需要為frida服務器安裝一些python包。在終端中輸入以下命令:

python -m pip install Fridapython -m pip install objectionpython -m pip install frida-toolsorpip install Fridapip install objectionpip install frida-tools

III.平臺工具(adb):

從此處下載用于Windows的平臺工具。

如何使用Frida框架繞過Android應用程序的SSL Pinning

IV. 下載注入腳本:

從此處下載我們將推送到設備用于注入目標應用的注入腳本。

或者可以將此代碼另存為fridascript.js,保存在與adb相同的文件夾中。

/*Android SSL Re-pinning frida script v0.2 030417-pier$ adb push burpca-cert-der.crt /data/local/tmp/cert-der.crt$ frida -U -f it.app.mobile -l frida-android-repinning.js --no-pausehttps://techblog.mediaservice.net/2017/07/universal-android-ssl-pinning-bypass-with-frida/UPDATE 20191605: Fixed undeclared var. Thanks to @oleavr and @ehsanpc9999 !*/setTimeout(function(){Java.perform(function (){console.log("");console.log("[.] Cert Pinning Bypass/Re-Pinning");var CertificateFactory = Java.use("java.security.cert.CertificateFactory");var FileInputStream = Java.use("java.io.FileInputStream");var BufferedInputStream = Java.use("java.io.BufferedInputStream");var X509Certificate = Java.use("java.security.cert.X509Certificate");var KeyStore = Java.use("java.security.KeyStore");var TrustManagerFactory = Java.use("javax.net.ssl.TrustManagerFactory");var SSLContext = Java.use("javax.net.ssl.SSLContext");// Load CAs from an InputStreamconsole.log("[+] Loading our CA...")var cf = CertificateFactory.getInstance("X.509");try {var fileInputStream = FileInputStream.$new("/data/local/tmp/cert-der.crt");}catch(err) {console.log("[o] " + err);}var bufferedInputStream = BufferedInputStream.$new(fileInputStream);var ca = cf.generateCertificate(bufferedInputStream);bufferedInputStream.close();var certInfo = Java.cast(ca, X509Certificate);console.log("[o] Our CA Info: " + certInfo.getSubjectDN());// Create a KeyStore containing our trusted CAsconsole.log("[+] Creating a KeyStore for our CA...");var keyStoreType = KeyStore.getDefaultType();var keyStore = KeyStore.getInstance(keyStoreType);keyStore.load(null, null);keyStore.setCertificateEntry("ca", ca);// Create a TrustManager that trusts the CAs in our KeyStoreconsole.log("[+] Creating a TrustManager that trusts the CA in our KeyStore...");var tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();var tmf = TrustManagerFactory.getInstance(tmfAlgorithm);tmf.init(keyStore);console.log("[+] Our TrustManager is ready...");console.log("[+] Hijacking SSLContext methods now...")console.log("[-] Waiting for the app to invoke SSLContext.init()...")SSLContext.init.overload("[Ljavax.net.ssl.KeyManager;", "[Ljavax.net.ssl.TrustManager;", "java.security.SecureRandom").implementation = function(a,b,c) {console.log("[o] App invoked javax.net.ssl.SSLContext.init...");SSLContext.init.overload("[Ljavax.net.ssl.KeyManager;", "[Ljavax.net.ssl.TrustManager;", "java.security.SecureRandom").call(this, a, tmf.getTrustManagers(), c);console.log("[+] SSLContext initialized with our custom TrustManager!");}});},0);

設置和安裝:

I. 將設備連接到 adb:

我們需要將設備連接到adb以在設備上運行命令。但首先轉到settings >> Developer options,并在設備中啟用調試模式,以便adb可以與設備通信。

轉到已提取平臺工具的文件夾,然后運行以下命令將設備連接到adb

//adb connect <ip of device:port>adb connect 192.168.1.190:5555

如果設備中出現(xiàn)彈出窗口,請單擊“允許Allow”。

如何使用Frida框架繞過Android應用程序的SSL Pinning

檢查設備是否已連接到adb:

adb devices

你應該能夠看到設備的IP以及名稱。

II.下載 frida 服務器以獲取支持 Android 設備的 arch 版本:

我們需要根據(jù)我們設備的arch版本,為我們的Android設備下載frida服務器包。

要查找設備的arch版本,請運行以下命令。

adb shell getprop ro.product.cpu.abi

如果設備配置與上面提到的相同,請下載:

frida-server-12.4.7-android-x86.xzfrida-server-12.4.7-android-x86_64.xz

IV. 在設備中安裝目標應用程序。

在我們的設備中安裝需要繞過SSL pinning的應用程序。打開應用程序并使其在后臺運行。

Frida 服務器設置:

在注入腳本之前,我們需要在設備中運行frida服務器。請按照以下步驟操作:

I. 將 frida-server 推送到設備:

現(xiàn)在,我們需要將我們的frida-server文件推送到設備中。復制adb文件夾中的“frida-server-12.4.7-android-x86.xz”文件并運行以下命令。

//adb push <path_of_frida_server_folder><space></data/local/tmp>adb push C:\ADB\frida-server /data/local/tmp

II. 授予 frida-server 權限:

adb shell chmod 777 /data/local/tmp/frida-server

設置 BurpSuite:

請遵循本指南為android設備在burp中設置代理。

推送代理的 CA 證書:

為了能夠攔截流量,frida需要訪問我們的Burpsuite CA證書。我們將在BurpSuite Setup中推送在步驟5中下載的相同證書。

將證書推送到設備并放置在與frida-server相同的位置,將其命名為cert-der.crt(因為此名稱和路徑已在fridascript.js中提到,這樣可以避免一些不必要的問題)

// adb push <path to cacert.der> /data/local/tmp/cert-der.crtadb push cacert.der /data/local/tmp/cert-der.crt

腳本注入繞過SSL pinning:

現(xiàn)在,讓我們將fridascript.js注入目標應用程序。

I. 將 fridascript.js 腳本推送到設備:

將fridascript.js復制到adb文件夾,并運行以下命令將fridascript.js推送到設備中。

//adb push <path_to_fridascript.js_folder> /data/local/tmpadb push C:\ADB\fridascript.js /data/local/tmp

II. 檢查并運行設備中的 frida 服務器

adb shell /data/local/tmp/frida-server &

III. 列出設備上所有正在運行的進程

現(xiàn)在,我們需要找出目標應用程序的ID。我們將列出設備上所有正在運行的服務,包括你的應用程序進程。

打開一個新的終端,并鍵入以下命令。

frida-ps -U

IV. 找到你應用程序的包名稱。

如何使用Frida框架繞過Android應用程序的SSL Pinning

V. 將 fridascript.js hook 到目標應用程序中:

最后,我們將使用以下命令將fridascript.js hook到原生應用程序中:

//frida -U -f <your_application_package_name> -l <path_to_fridascript.js_on_your_computer> --no-pausfrida -U -f com.twitter.android -l D:\frida\fridascript.js --no-paus

如何使用Frida框架繞過Android應用程序的SSL Pinning

VI. 繞過!

如果一切順利,那么目標應用程序的所有流量都將被BurpSuite攔截。

如何使用Frida框架繞過Android應用程序的SSL Pinning

簡而言之:

1. 在genymotion上下載并安裝設備

2. 安裝frida和objection工具

python -m pip install Frida python -m pip install frida-tools python -m pip install objection or pip install Frida pip install frida-tools pip install objection

3. 下載adb平臺工具

4. 下載frida注入腳本

5. 將設備連接到adb

//adb connect <ip of device:port>

6. 下載frida服務器以獲取支持Android設備的arch版本

7. 找出設備的arch版本

adb shell getprop ro.product.cpu.abi

8. 在設備中安裝目標應用程序。

9. 將frida-server推送到設備:

//adb push <path of frida-server folder><space></data/local/tmp>

10. 授予frida-server權限:

adb shell chmod 777 /data/local/tmp/frida-server

11. 設置burpsuite

12. 推送代理的CA證書

// adb push <path to cacert.der> /data/local/tmp/cert-der.crt

13. 將fridascript.js推送到設備:

//adb push <path to fridascript.js folder> /data/local/tmp

14. 檢查并運行設備中的frida服務器

adb shell /data/local/tmp/frida-server &

15. 列出設備上所有正在運行的進程:

frida-ps -U

16. 找到你應用程序的包名稱

17. 將fridascript.js hook到目標應用程序中

//frida -U -f <your_application_package_name> -l <path_to_fridascript.js_on_your_computer> --no-paus

18. 在BurpSuite中攔截流量。

疑難解答

1. ADB 守護程序無法連接

如果發(fā)生如下錯誤:

adb devicesadb server is out of date. killing...cannot bind 'tcp:5037'ADB server didn't ACK*failed to start daemon*error:

i. 打開 environment System properties>>Advanced>>Environment Variables

ii. 單擊路徑并刪除C:/Android條目或指向adb工具的路徑

iii. 將所有平臺工具復制到genymotion>>tools文件夾中

iv. 創(chuàng)建新路徑并添加genymotion>>tools文件夾的路徑。

2. frida/ pip 不被識別為內部或外部命令

i. 打開 environment System properties>>Advanced>>Environment Variables

ii. 創(chuàng)建新路徑并添加Python>>script文件夾的路徑

3. 將應用程序安裝到設備時出現(xiàn) Arm translation error。

i. 從此處下載arm translation文件

ii. 將文件拖放到設備模擬器中,或是在使用物理設備時從恢復中刷新此文件

iii. 重啟設備后,你將能夠拖放安裝目標應用程序

4.Failed to spawn:spawn Android apps 時不支持 argv 選項

檢查計算機上的fridascript.js路徑。路徑可能不正確。你必須給出fridascript.js文件的絕對路徑。

5. frida 服務器已啟動但無法列出服務

斷開并重新連接設備中的wifi。

到此,關于“如何使用Frida框架繞過Android應用程序的SSL Pinning”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注億速云網站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI