记一次APP双向认证抓包
字数 1395 2025-08-18 11:39:04
APP双向认证抓包突破指南
一、双向认证概述
双向SSL认证(Mutual SSL Authentication)是一种安全机制,要求客户端和服务器端互相验证对方的证书。与单向认证(仅客户端验证服务器证书)相比,双向认证增加了服务器验证客户端证书的环节。
双向认证流程
- 客户端发起HTTPS请求
- 服务器返回其证书
- 客户端验证服务器证书
- 服务器要求客户端提供证书
- 客户端发送其证书
- 服务器验证客户端证书
- 验证通过后建立安全连接
二、判断双向认证的方法
-
常规抓包现象:
- 开启代理后APP提示网络异常
- Burp Suite等工具只记录到请求包而没有响应包
- 错误信息:"400 No required SSL certificate was sent"
-
排除SSL Pinning:
- 使用ssl-kill-switch2等工具绕过证书固定后
- 仍然出现上述400错误,基本可确认是双向认证
三、突破双向认证的技术路线
1. 获取客户端证书
- 解压APP文件(.ipa或.apk)
- 在payload目录中查找.p12或.cer等证书文件
- 常见证书命名:client.p12, cert.pem等
2. 获取证书密码
证书通常有密码保护,获取方式包括:
方法一:静态分析
- 对APP进行砸壳(iOS)或反编译(Android)
- 使用IDA Pro等工具分析二进制文件
- 在字符串中搜索证书文件名或关键词(如"client")
- 跟踪相关代码找到硬编码的密码
方法二:动态调试
- 使用Frida或Xposed框架hook证书加载函数
- 捕获密码输入或解密过程
方法三:流量分析
- 捕获APP首次安装时的网络流量
- 可能包含证书下载和密码传输
3. 配置代理工具使用客户端证书
以Burp Suite为例:
-
导入客户端证书:
- 进入Proxy → Options → SSL Pass Through
- 点击"Client SSL Certificates"的"Add"
- 填写目标主机(如:*.example.com)
- 选择.p12证书文件并输入密码
-
验证配置:
- 重新抓包测试
- 成功时应有完整的请求和响应
四、高级技巧与注意事项
-
多证书处理:
- 某些APP可能使用多个证书
- 需要为每个域名配置对应的证书
-
证书绑定检测:
- 即使配置了正确证书,APP仍可能检测代理环境
- 需要配合其他绕过技术(如禁用证书固定)
-
Android特殊处理:
- 可能需要将证书导入系统证书库
- 使用Magisk模块或修改系统分区
-
证书有效期:
- 检查证书是否过期
- 过期的证书即使密码正确也无法使用
五、防御措施(开发角度)
- 避免硬编码证书密码
- 实现证书动态获取机制
- 增加环境检测(如代理检测)
- 使用证书公钥绑定(Public Key Pinning)
六、参考工具列表
-
静态分析:
- IDA Pro
- Hopper
- Jadx(Android)
- otool(iOS)
-
动态分析:
- Frida
- Xposed
- Cydia Substrate
-
抓包工具:
- Burp Suite
- Charles
- mitmproxy
-
其他工具:
- ssl-kill-switch2(iOS)
- Objection(运行时分析)
- apktool(Android反编译)
通过以上方法,可以有效突破APP的双向认证机制,为安全测试提供基础。请注意,这些技术仅应用于合法授权的安全测试。