
文档教程网络安全【免费下载链接】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的 MASTG-TECH-0011 技术条目系统讲解如何在 Android 测试环境中搭建 HTTP(S) 拦截代理覆盖模拟器与真机两类场景的代理配置、CA 证书信任安装以及针对 Android 7.0 网络安全配置Network Security Configuration与各类安全控件的绕过方案。读完本文你将掌握从零搭建可用的 Android 流量拦截环境并能应对客户端隔离、非代理感知应用、代理检测等真实测试中的障碍为授权、会话管理等后续安全测试打下网络层基础。拦截代理与 MITM 定位对依赖 HTTP(S) 协议的应用进行网络分析时**拦截代理Interception Proxy**是最核心的工具。在 MASTG 体系中最常用的两个拦截代理是 Burp SuiteMASTG-TOOL-0077与 OWASP ZAPMASTG-TOOL-0079。拦截代理使测试者获得 Machine-in-the-MiddleMITM 位置从而能够读取甚至修改应用发出的所有请求与服务端返回的响应——这是测试授权Authorization、会话Session管理等逻辑的前提。MASTG 通用技术 MASTG-TECH-0120 指出拦截代理通常运行在宿主机上测试者只需在移动设备上配置系统级代理将流量指向代理即可。对使用标准 HTTP API 或okhttp等流行库的应用系统代理设置会自动生效。但由于代理会破坏 SSL 证书校验设备还必须信任代理的自签名 CA 证书代理才能解密并审查 HTTPS 流量。以下内容即围绕配置代理 信任 CA这两条主线展开并针对 Android 平台特有的安全机制给出绕过路径。虚拟设备AVD上的代理配置通过模拟器 GUI 设置 Web 代理以下流程适用于 Android Studio 3.x 自带的 Android 模拟器将你的代理设置为监听 localhost例如端口 8080在模拟器设置中配置 HTTP 代理点击模拟器菜单栏中的三个点扩展控制面板打开Settings菜单点击Proxy标签页选择Manual proxy configuration手动代理配置在Host Name字段输入127.0.0.1在Port number字段输入代理端口如8080点击Apply应用配置。完成上述步骤后HTTP 与 HTTPS 请求应被路由到宿主机的代理上。若未生效可尝试切换飞行模式开关先关闭再开启刷新网络状态。通过命令行配置 AVD 代理代理也可以在启动 AVD 时通过 emulator 命令行参数 配置。以下示例启动Nexus_5X_API_23模拟器并将代理设置为127.0.0.1:8080emulator Nexus_5X_API_23 -http-proxy 127.0.0.1:8080在虚拟设备上安装 CA 证书让代理能够解密 HTTPS 流量需要先将代理的 CA 证书安装到设备证书库。以下以 PortSwiggerBurpCA 证书为例启动 Burp在宿主机浏览器访问burp/点击 CA Certificate 按钮下载cacert.der将文件扩展名从.der改为.cer将文件推送到模拟器adb push cacert.cer /sdcard/进入Settings-Security-Install from SD Card向下滚动并点击cacert.cer。系统随后会提示确认安装证书若尚未设置设备 PIN还会要求先设置。该流程已在 Genymotion VM 上验证将证书安装到用户证书库。若需将证书放入系统证书库root store可执行以下步骤以 root 身份运行 adbadb root随后进入adb shell在/data/misc/user/0/cacerts-added/找到新安装的证书将证书复制到/system/etc/security/cacerts/重启 Android 虚拟机。重要从 Android 7.0API level 24开始应用默认不再信任用户 CA 证书除非应用显式声明因此对 Android 7.0 需按下文绕过 Network Security Configuration章节的方法处理。物理设备上的拦截代理设置网络前提首先评估网络方案测试用移动设备与运行拦截代理的宿主机必须连接到同一个 Wi-Fi 网络。可以使用现有接入点也可以自行创建 ad-hoc 无线网络。配置步骤网络连通后还需完成以下工作将设备代理配置指向拦截代理将拦截代理的 CA 证书加入 Android 设备证书库的受信证书中证书存储菜单的位置因 Android 版本及厂商定制而有所不同注意部分应用如 Chrome 浏览器在叶子证书有效期过长时会报NET::ERR_CERT_VALIDITY_TOO_LONG错误。Chrome 对有效期超过 39 个月的叶子证书会拒绝信任Burp 默认 CA 签发的叶子证书与 CA 证书有效期相同因此会触发该问题。解决办法是自行生成 CA 证书并导入 Burp Suite使签发的叶子证书有效期可控。完成上述步骤并启动应用后请求即应出现在拦截代理中。关于使用 ZAPMASTG-TOOL-0079配合 Android 设备进行拦截的视频演示可参见相关厂商安全站点资料。Android 高版本下的行为差异需注意几个版本差异从 Android 8.0API level 26起当 HTTPS 流量经由另一连接隧道传输时应用的网络行为会发生变化从 Android 9API level 28起握手出错时SSLSocket与SSLEngine的错误处理行为也略有不同。更重要的是如前述从 Android 7.0API level 24开始系统默认不再信任用户 CA 证书下文给出两种绕过该安全控制的方案。绕过 Network Security Configuration本节介绍绕过 Android Network Security Configuration网络安全配置的多种方法。仓库中的相关网络测试用例如 MASTG-TEST-0236、MASTG-TEST-0242、MASTG-TEST-0243、MASTG-TEST-0244在检测相关缺陷时均会引用本技术条目足见其在动态分析流程中的基础地位。向网络安全配置添加自定义用户证书Network Security Configuration 支持通过src属性添加非系统 CACustom Trust语法如下certificates src[system | user | raw resource] overridePins[true | false] /其中每个证书来源可以是raw resource指向包含 X.509 证书的文件的资源 IDsystem系统预装 CA 证书user用户添加的 CA 证书。应用可同时信任系统 CA 与用户 CA。由于测试者通常已把拦截代理证书作为用户 CA 安装到 Android 中这里重点采用user配置强制应用信任该证书。配置示例如下network-security-config base-config trust-anchors certificates srcsystem / certificates srcuser / /trust-anchors /base-config /network-security-config应用该配置的实操步骤如下使用 apktool 等反编译工具解包应用apktool d filename.apk创建包含certificates srcuser /的网络安全配置如上文所示使应用信任用户证书进入 apktool 解包生成的目录重新构建应用新 APK 将生成在dist目录中apktool b重打包后需要重新签名具体流程参见 MASTG-TECH-0004Repackaging Apps若需对重打包过程做整体了解可参考 Android 开发者文档中关于手动签名的说明。该方法虽然简单但主要缺点在于每测试一个应用都要重复一次重打包操作对测试流程是额外开销。注意如果被测应用存在额外加固措施如校验应用签名重打包后你可能无法再启动应用——因为重打包会用你自己的密钥重新签名签名变化会触发这类校验并导致应用立即终止。此时需要在重打包过程中补丁禁用这些校验或通过 Frida 等动态插桩手段处理。仓库中存在一个可自动化上述步骤的 Python 脚本Android-CertKiller它能从已安装应用提取 APK、反编译、使应用可调试、注入允许用户证书的 Network Security Configuration、构建并签名新 APK最后安装带 SSL Bypass 的新 APK。运行输出示例python main.py -w *************************************** Android CertKiller (v0.1) *************************************** CertKiller Wizard Mode --------------------------------- List of devices attached 4200dc72f27bc44d device --------------------------------- Enter Application Package Name: nsc.android.mstg.owasp.org.android_nsc Package: /data/app/nsc.android.mstg.owasp.org.android_nsc-1/base.apk I. Initiating APK extraction from device complete ------------------------------ I. Decompiling complete ------------------------------ I. Applying SSL bypass complete ------------------------------ I. Building New APK complete ------------------------------ I. Signing APK complete ------------------------------ Would you like to install the APK on your device(y/N): y ------------------------------------ Installing Unpinned APK ------------------------------ Finished使用 Magisk 将代理证书加入系统信任 CA为避免为每个应用单独配置 Network Security Configuration可以强制设备将代理证书视为系统受信证书。有一个Magisk 模块会自动把所有用户安装的 CA 证书同步到系统受信 CA 列表中。使用方式从该模块的 GitHub Release 页面下载最新版本将文件推送到设备在 Magisk Manager 的 Module 视图点击按钮导入最后由 Magisk Manager 提示重启使更改生效。此后凡是通过 Settings - Security location - Encryption credentials - Install from storage菜单位置可能因版本而异安装的用户 CA 证书都会被该模块自动推入系统信任库。重启后可在 Trusted credentials 中确认 CA 证书已列入系统信任。手动将代理证书加入系统信任 CA不借助模块时也可手工完成同样目标使/system分区可写仅限已 root 设备。运行mount命令确认/system可写mount -o rw,remount /system若该命令失败可尝试mount -o rw,remount -t ext4 /system将代理 CA 证书转换为系统证书格式。先以der格式导出代理证书Burp 的默认导出格式再执行$ openssl x509 -inform DER -in cacert.der -out cacert.pem $ openssl x509 -inform PEM -subject_hash_old -in cacert.pem | head -1 mv cacert.pem hash.0将hash.0文件复制到/system/etc/security/cacerts然后执行chmod 644 hash.0完成上述步骤后任何应用都会信任代理证书除非应用使用了 SSL Pinning否则其流量均可被拦截。潜在障碍与应对应用中常实现 root 检测、证书固定certificate pinning等安全控制增加安全审查难度。理想情况下应同时取得开启与关闭这些控制的两个版本先分析控制本身的实现是否恰当再用弱安全版本继续后续测试。若无法做到则需在黑盒环境中绕过这些控制本节即针对常见网络层障碍给出方案。无线网络中的客户端隔离配置好拦截代理并获得 MITM 位置后可能仍看不到任何流量。原因之一是应用自身限制见下节但也可能是所在 Wi-Fi 启用了客户端隔离Client Isolation——该安全特性禁止无线客户端之间互相通信常见于访客网络和 BYOD SSID。应对方法将 Android 设备代理指向127.0.0.1:8080通过 USB 连接宿主机使用 adbMASTG-TOOL-0004做反向端口转发adb reverse tcp:8080 tcp:8080此后设备上所有发往127.0.0.1:8080的代理流量经 adb 重定向到宿主机的127.0.0.1:8080流量即可出现在 Burp 中。借助这一技巧即使所在 Wi-Fi 启用了客户端隔离也能完成拦截。非代理感知应用Non-Proxy Aware Apps即便配置好代理并取得 MITM 位置仍可能看不到任何 HTTP 请求主要原因有二应用使用跨平台框架不读取 Android 系统代理设置应用主动检测是否设置了代理并在检测到时拒绝通信。两种场景都需要额外手段才能看到流量。下文给出两个纯软件方案iptables与bettercap也可使用自己控制的接入点重定向流量但需额外硬件本文聚焦软件方案。使用这两种方案前都需要在 Burp 的Proxy Tab / Options / Edit Interface中开启 Support invisible proxying支持隐形代理。使用 iptables 重定向流量可在 Android 设备上用 iptables 将所有流量重定向到拦截代理。以下命令将 80 端口流量重定向到运行在 8080 端口的代理iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination Your-Proxy-IP:8080验证 iptables 规则与目标 IP/端口$ iptables -t nat -L Chain PREROUTING (policy ACCEPT) target prot opt source destination Chain INPUT (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination DNAT tcp -- anywhere anywhere tcp dpt:5288 to:Your-Proxy-IP:8080 Chain POSTROUTING (policy ACCEPT) target prot opt source destination Chain natctrl_nat_POSTROUTING (0 references) target prot opt source destination Chain oem_nat_pre (0 references) target prot opt source destination如需重置 iptables 配置可清空规则iptables -t nat -F使用 bettercap 进行 ARP 欺骗运行代理的宿主机与 Android 设备需在同一无线网络。更好的更底层的方案是 ARP 欺骗其前置准备与完整操作可参见 MASTG-TECH-0123Achieving a MITM Position via ARP Spoofing——该技术作为 Layer 2 攻击不依赖应用是否感知代理对任何设备与操作系统均有效但需注意现代系统对加密 DNS、MAC 随机化与 ARP 欺骗检测的防御会降低其有效性。启动 bettercap 并将下方 IPX.X.X.X替换为 Android 设备的 IP$ sudo bettercap -eval set arp.spoof.targets X.X.X.X; arp.spoof on; set arp.spoof.internal true; set arp.spoof.fullduplex true; bettercap v2.22 (built for darwin amd64 with go1.12.1) [type help for a list of commands] [19:21:39] [sys.log] [inf] arp.spoof enabling forwarding [19:21:39] [sys.log] [inf] arp.spoof arp spoofer started, probing 1 targets.bettercap 会自动把数据包发送给无线网络网关从而嗅探设备流量。2019 年初 bettercap 增加了对全双工 ARP 欺骗的支持。代理检测部分应用会检测系统是否设置了代理一旦检测到即视为异常并拒绝正常工作。绕过思路有三使用 bettercap、配置 iptables两者都无需在 Android 设备上设置代理或使用 Frida。Android 应用常通过查询ProxyInfo类并检查getHost()与getPort()方法来判断系统代理是否设置具体类名与方法名需反编译 APK 确认。以下 Frida 脚本样板可用于重载isProxySet方法即校验代理是否设置的函数使其恒返回false——即使代理已配置应用也会认为未设置代理而正常工作setTimeout(function(){ Java.perform(function (){ console.log([*] Script loaded) var Proxy Java.use(package-name.class-name) Proxy.isProxySet.overload().implementation function() { console.log([*] isProxySet function invoked) return false } }); });延伸阅读MASTG-TECH-0120Intercepting HTTP Traffic Using an Interception Proxy拦截代理的通用原理与证书信任要求MASTG-TOOL-0077Burp SuiteBurp 作为代理平台的整体能力说明MASTG-TECH-0123Achieving a MITM Position via ARP Spoofingbettercap 在 Layer 2 实现 MITM 的完整流程与网络分析器Wireshark/tcpdump过滤建议MASTG-TECH-0004Repackaging Apps重打包与签名细节配合 NSC 修改使用0x05g-Testing-Network-Communication.mdAndroid 网络通信测试的完整章节包含 Network Security Configuration 的权威说明0x04f-Testing-Network-Communication.mdMITM 与流量拦截的网络层背景。赞分享文档教程网络安全【免费下载链接】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点击查看免费下载相关推荐如何在 YDoc 中使用 Markdown 扩展让文档更丰富的实用技巧如何在 YDoc 中使用 Markdown 扩展让文档更丰富的实用技巧 YDoc 是一个更懂你的文档站构建工具基于 markdown 轻松生成完整静态站点。JustTrustMe在Android 7.0上的特殊配置应对Network Security Configuration的终极指南JustTrustMe在Android 7.0上的特殊配置应对Network Security Configuration的终极指南 JustTrus网络安全应用安全渗透测试精通Requestly HTTP拦截器从基础配置到高级实战精通Requestly HTTP拦截器从基础配置到高级实战 你是否曾因无法拦截和修改网络请求而困扰作为前端开发者和QA工程师网络请求的调试和监控是日常工作文档开发工具接口测试上一篇5 分钟用 sndcpy 把 Android 音频转发到电脑下一篇在 QMK Firmware 中构建 CannonKeys DB60 J-02硬件支持、布局定义与编译刷写指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考