用證書固定(Certificate Pinning):MASTG 黑盒測試實用指南)
文檔教程網(wǎng)絡(luò)安全【免費下載鏈接】mastgThe OWASP Mobile Application Security Testing Guide (MASTG) is a comprehensive manual for mobile app security testing and reverse engineering. It describes technical processes for verifying the OWASP Mobile Security Weakness Enumeration (MASWE) weaknesses, which are in alignment with the OWASP MASVS.項目地址https://gitcode.com/gh_mirrors/ow/mastg點擊查看免費下載本指南聚焦 OWASP Mobile Application Security Testing GuideMASTG中關(guān)于繞過 Android 應(yīng)用 SSL/Certificate Pinning 的完整方法論覆蓋 Frida、Objection、Xposed 等動態(tài)繞過手段以及針對自定義 Pinning 實現(xiàn)的靜態(tài)與動態(tài)手工繞過技術(shù)。讀完本文你將掌握在模擬器或真機上快速解除證書固定、攔截應(yīng)用流量的完整實戰(zhàn)流程并能處理工具無法覆蓋的自定義 Pinning 場景。理解證書固定Certificate Pinning及其繞過前提部分應(yīng)用會實現(xiàn) SSL Pinning證書固定應(yīng)用只接受其內(nèi)置的特定證書或公鑰而拒絕任何其他證書包括安全測試工具如 Burp Suite、Charles的中間人MITM代理證書。這意味著即便你在設(shè)備上安裝了代理的 CA 證書應(yīng)用也不會接受它你便無法監(jiān)控應(yīng)用與服務(wù)器之間的 HTTPS 流量。從繞過角度看絕大多數(shù)應(yīng)用可以在數(shù)秒內(nèi)完成繞過前提是該應(yīng)用使用了這些工具所覆蓋的 API 函數(shù)。如果應(yīng)用通過自定義框架或第三方庫實現(xiàn) SSL Pinning則需要手工定位并 patch 相關(guān)邏輯、使其失效這一過程可能相當耗時。本指南依次介紹基于現(xiàn)成框架的快速繞過Frida / Objection / Xposed靜態(tài)繞過自定義 Pinning修改 APK 內(nèi)嵌的證書、哈希與 Truststore動態(tài)繞過自定義 PinningFrida Hook 關(guān)鍵方法并改寫參數(shù)。快速繞過Frida、Objection 與 Xposed對于黑盒測試可依據(jù)設(shè)備上可用的框架選擇不同的繞過方式Frida使用 frida-multiple-unpinningMASTG-TOOL-0140腳本它是 Frida CodeShare 上覆蓋范圍最廣的 TLS Pinning 繞過腳本之一。Objection使用android sslpinning disable命令。Xposed安裝 TrustMeAlready 或 SSLUnpinningMASTG-TOOL-0025模塊后者是一個基于 Xposed 的模塊用于繞過 SSL 證書固定。使用 frida-multiple-unpinningMASTG-TOOL-0140 的一個核心優(yōu)勢是其動態(tài)繞過機制它檢測SSLPeerUnverifiedException類的實例化并自動 patch 拋出該異常的方法從而覆蓋多種 TLS Pinning 實現(xiàn)。直接通過 Frida 運行$ frida -U --codeshare akabe1/frida-multiple-unpinning -f YOUR_BINARY使用 Objection 一鍵繞過如果你有已 root 的設(shè)備且安裝了 frida-server可通過運行以下命令繞過 SSL Pinning非 root 設(shè)備的使用方式參見 MASTG-TECH-0004android sslpinning disable輸出示例關(guān)于該命令的更多信息可參考 Objection 的 Disabling SSL Pinning for Android 幫助文檔并可通過閱讀其 agent 源碼中的pinning.ts文件理解其底層實現(xiàn)原理。關(guān)于 Objection 的底層機制Objection 是一個 runtime mobile exploration toolkit, powered by Frida。其 Android 專屬能力見 MASTG-TOOL-0029包括將 Frida gadget 重打包進 APK、禁用常見 SSL Pinning 方法、訪問應(yīng)用存儲、執(zhí)行自定義 Frida 腳本、枚舉 Activity/Service/BroadcastReceiver 等。Objection 可通過 pip 安裝pip3 install objection在已 root 設(shè)備上Objection 可直接連接運行的 frida-server 而無需重打包若設(shè)備無法 root 或應(yīng)用帶有 RASP 反調(diào)試/反 root 檢測則可先按重打包流程MASTG-TECH-0039注入 frida-gadget 再側(cè)載部署。連接方式取決于使用場景# 連接已 patch 的 APK objection -f explore # 使用 frida-server 時先用 frida-ps 確認應(yīng)用名 $ frida-ps -Ua | grep -i telegram 30268 Telegram org.telegram.messenger # 通過應(yīng)用名或 PID 連接 $ objection -n Telegram start $ objection -n 30268 start # 通過包名 spawn 應(yīng)用 $ objection -s -n org.telegram.messenger進入 REPL 后android sslpinning disable即會 hook 并禁用常見 SSL Pinning 方法OkHTTP、TrustManager、X509 校驗等。補充說明需要留意的是frida-multiple-unpinning 腳本相比 Objection 的android sslpinning disable覆蓋了更多繞過場景。當工具無法覆蓋目標應(yīng)用的自定義實現(xiàn)時需要轉(zhuǎn)向下面的手工繞過方案。靜態(tài)繞過自定義證書固定無論采用哪種實現(xiàn)應(yīng)用中必然在某處定義端點與證書或證書哈希。反編譯 APK 后可以針對三種典型形態(tài)分別檢索與替換。檢索證書哈希grep -ri sha256\|sha1 ./smali將識別出的哈希替換為你的代理 CA 的哈希。若哈希伴隨域名出現(xiàn)還可以嘗試把域名改成不存在的域名使原域名不再被固定——這一招對混淆過的 OkHTTP 實現(xiàn)往往很有效。檢索證書文件find ./assets -type f \( -iname \*.cer -o -iname \*.crt \)將找到的證書文件替換為你的代理證書并確保格式正確。檢索 Truststore 文件find ./ -type f \( -iname \*.jks -o -iname \*.bks \)將你的代理證書加入 Truststore同樣注意格式匹配。注意應(yīng)用中可能包含無擴展名的文件最常見的存放位置是assets和res目錄這兩個目錄也應(yīng)一并排查。實戰(zhàn)示例向 BKS Truststore 注入代理證書假設(shè)應(yīng)用使用 BKSBouncyCastleTruststore存放于res/raw/truststore.bks。要繞過 SSL Pinning需要用keytool隨 Java SDK 提供把代理證書加入 Truststore執(zhí)行命令前需要準備以下值參數(shù)說明passwordTruststore 的密碼需在反編譯代碼中查找硬編碼的密碼providerpathBouncyCastle Provider jar 文件所在路徑可從 Bouncy Castle 官網(wǎng)下載proxy.cer你的代理證書aliascert用于標識代理證書的唯一別名導(dǎo)入代理證書keytool -importcert -v -trustcacerts -file proxy.cer -alias aliascert -keystore res/raw/truststore.bks -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath providerpath/bcprov-jdk15on-164.jar -storetype BKS -storepass password列出 BKS Truststore 中的證書keytool -list -keystore res/raw/truststore.bks -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath providerpath/bcprov-jdk15on-164.jar -storetype BKS -storepass password修改完成后使用 apktool 重新打包 APK 并安裝到設(shè)備上即可。原生庫場景如果應(yīng)用使用 native 庫實現(xiàn)網(wǎng)絡(luò)通信則需要進一步的逆向工程。例如可以嘗試在 smali 代碼中定位 SSL Pinning 邏輯、對其進行 patch 后重新組裝 APK。這種場景通常需要結(jié)合 IDA/Ghidra 等工具進行更深層的分析已超出本指南的快速繞過范疇。動態(tài)繞過自定義證書固定相比靜態(tài)修改動態(tài)繞過 Pinning 邏輯更加便捷無需處理應(yīng)用的完整性校驗RASP且試錯迭代速度快得多。定位正確的 Hook 方法找到適合 hook 的方法是整個過程最困難的部分耗時取決于混淆程度。由于開發(fā)者通常復(fù)用既有庫一個有效思路是搜索能標識所用庫的字符串與 license 文件一旦確認庫類型即可閱讀其未混淆的源碼尋找適合動態(tài)插樁Frida的方法。以混淆過的 OkHTTP3 庫為例官方文檔表明CertificatePinner.Builder類負責(zé)為特定域名添加 pin。若你能修改傳給Builder.add方法的參數(shù)就可以把哈希換成屬于你自己證書的哈希。定位正確方法有兩種途徑按上一節(jié)的思路搜索哈希與域名真正的 pinning 方法通常會與這些字符串鄰近出現(xiàn)或被其調(diào)用在 SMALI 代碼中搜索方法簽名。對于Builder.add方法可以運行以下 grep 命令查找候選方法grep -ri java/lang/String;\[Ljava/lang/String;)L ./該命令會搜索所有「接收一個 String 與一個字符串數(shù)組、返回復(fù)雜對象」的方法。根據(jù)應(yīng)用體積代碼中可能有一處或多處匹配。用 Frida Hook 并改寫參數(shù)逐個用 Frida hook 這些方法并打印參數(shù)。其中會有一個方法打印出域名與證書哈希確認后即可修改參數(shù)以繞過已實現(xiàn)的 Pinning 邏輯。典型流程如下// 示例思路hook CertificatePinner.Builder.add 并改寫哈希參數(shù) Java.perform(function () { var Builder Java.use(okhttp3.CertificatePinner$Builder); Builder.add.overload(java.lang.String, [Ljava.lang.String;) .implementation function (hostname, pins) { console.log(hostname: hostname); console.log(pins: JSON.stringify(pins)); // 在此替換為你的代理證書哈?;蛑苯?return this 跳過 pin return this.add(hostname, [sha256/YOUR_PROXY_CERT_HASH]); }; });由于Builder.add的 SMALI 簽名特征String 可變長 String 數(shù)組 返回復(fù)雜對象在混淆后仍然保留上述 grep 定位法在混淆場景下依然可行。總結(jié)與決策路徑場景推薦手段應(yīng)用使用標準 API / 常見庫Objectionandroid sslpinning disable或 frida-multiple-unpinning設(shè)備已 root、有 frida-serverObjection 直連 frida-server秒級繞過非 root 設(shè)備重打包注入 frida-gadgetMASTG-TECH-0039后再用 Objection基于 Xposed 的測試環(huán)境TrustMeAlready / SSLUnpinning 模塊自定義 Pinning證書/哈希/Truststore靜態(tài)替換grep哈希 →find證書/Truststore →keytool注入 → apktool 重打包混淆庫如 OkHTTP3動態(tài) Hookgrep 方法簽名 → Frida hook 打印/改寫參數(shù)native 庫實現(xiàn)網(wǎng)絡(luò)通信需要更深入的逆向與手工 patch從源碼結(jié)構(gòu)看MASTG-TECH-0012本指南對應(yīng)的完整繞過方法體系還與 MASTG-TECH-0004非 root 設(shè)備 Frida 使用、MASTG-TECH-0039APK 重打包等相鄰技術(shù)章節(jié)相互銜接可作為 Android 流量攔截測試的完整知識鏈路。建議在實戰(zhàn)中先從工具化方案入手僅在工具失效時再轉(zhuǎn)入手工靜態(tài)/動態(tài)繞過以最大化測試效率。贊分享文檔教程網(wǎng)絡(luò)安全【免費下載鏈接】mastgThe OWASP Mobile Application Security Testing Guide (MASTG) is a comprehensive manual for mobile app security testing and reverse engineering. It describes technical processes for verifying the OWASP Mobile Security Weakness Enumeration (MASWE) weaknesses, which are in alignment with the OWASP MASVS.項目地址https://gitcode.com/gh_mirrors/ow/mastg點擊查看免費下載相關(guān)推薦Android 證書固定Certificate Pinning完全指南基于 OWASP MASTG 的實現(xiàn)、測試與繞過Android 證書固定Certificate Pinning完全指南基于 OWASP MASTG 的實現(xiàn)、測試與繞過 本文基于 OWASP Mobile文檔教程網(wǎng)絡(luò)安全終極免費彩色表情字體EmojiOne Color 完整使用指南終極免費彩色表情字體EmojiOne Color 完整使用指南 EmojiOne Color 是一款基于 OpenType SVG 格式的開源彩色表情字體完設(shè)計系統(tǒng)Spacedrive 云存儲證書固定Certificate Pinning方案SEC-006 任務(wù)解讀與實現(xiàn)指引Spacedrive 云存儲證書固定Certificate Pinning方案SEC 006 任務(wù)解讀與實現(xiàn)指引 本指南圍繞 Spacedrive 倉庫中桌面應(yīng)用移動開發(fā)后端存儲數(shù)據(jù)同步上一篇cs-408計算機考研408一站式復(fù)習(xí)資源新手10分鐘上手指南下一篇Umi-OCR雙層PDF功能終極方案3分鐘讓掃描件變身可編輯文檔創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考