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