導航:首頁 > 操作系統 > 安卓如何防止抓包

安卓如何防止抓包

發布時間:2023-03-12 01:23:39

『壹』 HTTPS 抓包原理以及 android 端如何防止抓包

抓包的基本原理就是中間人攻擊 HTTPS 的握手過程 。Mac 上可使用 Charles 進行抓包。本質上就是兩段 HTTPS 連接,Client <--> Man-In-The-Middle 和 Man-In-The-Middle <--> Server。使用 Charles 進行抓包,需要 Client 端提前將 Charles 的根證書添加在 Client 的信任列表中。

回顧之前的 HTTPS 的握手過程 ,可以知道 SSL 的核心過程就是客戶端驗證證書鏈合法性——客戶端檢查證書鏈中是否有一個證書或者公鑰存在於客戶端的可信任列表中。
手機系統中內置了上百份不同的根證書。Certificate Pinning 的原理其實就是 app 中內置需要被信任的特定證書,app 在驗證伺服器傳過來的證書鏈時,使用這些特定證書來驗證的。

證書的主要作用是公鑰的載體,但在實踐中我們更多是去 pinning 公鑰, SubjectPublicKeyInfo(SPKI) 。這是因為很多伺服器會去定期旋轉證書,但是證書旋轉後,證書中的公鑰還是相同的公鑰。

如果私鑰泄露了,那麼伺服器端就不得不使用新的私鑰做出新的證書。客戶端為了預防這種情況,可以提前 pinning 這些新的證書。這樣,當伺服器替換新的證書時,客戶端 app 就可以不做任何改動。

從 SDK 24 開始,Android 支持通過 xml 來配置 certificate pinning,見 Network Security Configuration 。

其中 <pin> 節點接受 SubjectPublicKeyInfo 的 hash 值。

OkHttp 從 2.1 開始直接支持 Certificate Pinning 。

我在項目實踐中發現有的伺服器並不會在 ssl 握手階段 將完整的證書鏈傳輸過來——只會傳證書鏈中的根證書和葉子證書。如果安卓系統中使用 HttpUrlConnection 訪問伺服器,拋出如下類似異常:

但是瀏覽器對於這種缺失中間證書的伺服器卻能驗證通過,主要原因是瀏覽器訪問有完整證書鏈的網站時,如果發現證書鏈中有瀏覽器沒有內置的中間證書,那麼瀏覽器會將該證書緩存下來,這樣瀏覽器訪問其他沒有該中間證書的伺服器時,就可以使用這個緩存的中間證書來驗證證書鏈。
解決安卓上出現這個問題的方法是將這個中間證書通過 app 添加到信任證書列表中。我們需要將該中間證書加入到 App 運行時所用的 TrustManager 中。

使用 X509TrustManagerExtensions 可以將證書 pinning 到 app 中。 X509TrustManagerExtensions.checkServerTrusted() 允許開發者在系統對證書鏈驗證通過後,再次使用自己的方法驗證證書鏈。

使用方法如下:

『貳』 安卓7.0+https抓包新姿勢(無需Root)

在平常的安全測試過程中,我們都會攔截應用程序的HTTPS流量。通過向Android添加自定義CA,可以直接完成此操作。但是,從Android 7.0以上開始,應用程序不再信任客戶端證書,除非App應用程序自身明確啟用此功能。

在下面這篇文章中,介紹一個新的 Magisk模塊,通過Magisk模塊自動將客戶端證書添加到系統范圍的信任存儲區,這樣就可以完成對App應用程序的Https抓包了。

攔截Android上的HTTPS,只需以下幾步:

下面這些步驟做完後,就可以查看瀏覽器與伺服器之間發送的HTTPS流量了。

這種方法同樣適用於應用程序的Https流量,因為在默認情況下應用程序會信任所有已安裝的用戶證書。

補充說明

廠商阻止Https抓包的方式:
阻止應用程序流量被截獲的一種方法就是為應用程序本身安裝專有證書。這就意味著在每個SSL連接上,伺服器提供的證書將與本地存儲的證書進行比較。只有伺服器可以提供正確的標識,SSL連接才會成功。這是一個很好的安全功能,但實現起來是比較麻煩的,

我們知道從Android7.0開始,默認情況下,應用程序已經不再信任用戶證書。
在開發階段,開發人員可以通過更改應用程序中的AndroidManifest.xml文件,來配置networkSecurityConfig屬性,選擇接受用戶證書,即可完成對應用程序的Https抓包分析測試。

還有一種方法是反編譯App,修改和重新編譯應用程序,如果該App應用程序有加殼,加密,等配置,那反編譯的過程將非常困難。可以在warroom.securestate.com上找到App的反編譯教程。

還有另一種方法是將用戶證書添加到系統存儲中。存儲目錄位於:/system/etc/security/cacerts,包含每個已安裝根證書的文件。但這是需要對/system/etc/security/cacerts目錄有讀、寫的許可權,正常的手機沒有Root,是不具備此項功能的。如果把手機Root,並且這是一項非常危險的操作。

Magisk是一個「通用無系統介面「,可以在不改變系統本身的情況下創建系統的修改掩碼。」Magisk不修改/ system分區目錄,所以這是一個非常好的抓包解決方式,其中應用程序已經增強了root檢測。通過目標應用程序來激活「Magisk Hide」,使Magisk變得完全不可見。

Magisk還支持相當容易創建的自定義模塊。為了將任何用戶證書識別為系統證書,我們製作了一個簡單的Magisk模塊,可以在我們的github上找到: https://github.com/NVISO-BE/MagiskTrustUserCerts

該模塊的功能如下,非常基礎:

安裝完後,Magisk模塊的內容安裝在/magisk/trustusercerts/上。此文件夾包含多個文件,但最重要的是系統目錄。此目錄自動與real/ system目錄合並,實際上不會觸及到/system分區目錄。因此,/magisk/trusteusercerts/etc/security/中的所有證書都將以/system/etc/ security結尾。

該模塊使用如下:

安裝後,證書將顯示在系統范圍的信任存儲中,並受應用程序信任:

當然,如果應用程序自身已做了專用SSL連接,仍然無法攔截HTTPS流量,但這個小模塊使Android7.0+應用程序的運行方式與Android之前的7.0以下應用程序相同。

英文原版鏈接: https://blog.nviso.be/2017/12/22/intercepting-https-traffic-from-apps-on-android-7-using-magisk-burp/

『叄』 手機抓包軟體禁止了怎麼解開

首先找到手機裡面的設置,點開之後發現很多菜單。往下翻,找到帶有「安全」字樣的選項。打開安全選項,可以看到裡面有「未知來源」這個選項,在選項上面打勾,打勾之後,會有個安全警示,點確定,這個勾就能打上了,否則就打不上勾。
然後就可以去找到之前下載的安裝包,也就是以.apk結尾的文件,點一下之後,就可以安裝了,之前的禁止安裝提示也不會冒出來,就是這么簡單。

閱讀全文

與安卓如何防止抓包相關的資料

熱點內容
subsample演算法 瀏覽:893
蘋果免費看書app哪個最好 瀏覽:880
c語言加密怎麼弄 瀏覽:837
c語言編譯的錯誤提示 瀏覽:763
驗機蘋果app哪個最好 瀏覽:663
光遇國際服安卓如何購買禮包 瀏覽:52
163app怎麼下載 瀏覽:244
電腦程序員下場 瀏覽:42
編譯原理ll1文法判斷 瀏覽:723
qt用vs2015編譯 瀏覽:547
結婚日子最好的演算法 瀏覽:791
安卓怎麼把數據傳到蘋果里 瀏覽:501
編譯器標識 瀏覽:789
編程珠璣第三章 瀏覽:782
windows如何開啟tftp伺服器 瀏覽:107
歐姆龍plc編程指令表 瀏覽:186
程序員遠程收入不穩定 瀏覽:860
演算法原理怎麼寫 瀏覽:469
有個動漫女主藍頭發是程序員 瀏覽:998
雲伺服器資源評估 瀏覽:882