背景分析
最近在进行移动支付安全研究时,有人跟我说外面流传着一种qq设置码让我研究下,然后就发现了一个关于QQ支付的有趣技术案例。通过逆向工程和网络分析,我们发现了一些值得关注的安全隐患。
技术发现
逆向分析
下单,付款,发现竟然没有qq支付。
使用jadx-gui对Android应用进行反编译分析,然后我们在支付流程中发现了关键的tokenId生成机制。这些tokenId通常呈现以下特征:
- 前缀模式:
6M
或5M
开头 - 具有固定的格式和长度
- 在应用层面可被提取和重构
抓取到的关键数据:
支付URL构造
分析发现支付URL存在两种构造模式:
https://qpay.qq.com/qr/{tokenId}
https://myun.tenpay.com/mqq/pay/qrcode.html?_wv=1027&_bid=2183&t={tokenId}
2025年5月 经此方法已行不通,最新构造我就不说了,还是很简单的,只是要的参数更多了。一个tokenid是不够的。
通过网络流量分析发现,第一个URL会通过HTTP 302重定向到第二个URL,说明这是一个标准的支付流程重定向机制。
最后我们再通过二维码生成库,把上述链接转化成二维码即可。
潜在安全风险
中间人攻击风险
当前网络上流传的qq设置码方法中,均通过安装自签名证书来抓包拦截进行HTTPS解密,这种做法主要利用该电商种的安全隐患:
- 证书信任链被破坏
- HTTPS加密通道易被监听
- 敏感支付信息的泄露
TokenId暴露风险
- tokenId可被提取和重用
- 支付流程可被重放
- 缺乏有效的防重放机制
安全建议
安全加固方案
应用层
- 实现应用完整性校验
- 防止Root/越狱设备运行
- 敏感信息加密存储
- 内存数据及时清理
传输层
- 实现双向认证
- 传输数据加密
- 防重放攻击设计
服务端
- 限流策略
- 黑名单机制
- 交易监控
针对支付平台
- 实现严格的TokenId有效期管理
- 引入动态令牌机制
- 实施请求签名验证
- 加强支付流程的完整性校验
- 通过更有效的手段,防治中间人攻击
针对移动应用
- 实现证书锁定(Certificate Pinning)
- 加强应用加固保护
- 实现代码混淆和反调试机制
- 引入设备指纹机制
针对该电商系统
实现严格的订单状态管理
javaCopypublic class OrderManager {
public void validateOrder(String orderId, String tokenId) {
// 实现订单有效性验证
// 检查订单状态
// 验证tokenId合法性
}
}
引入风控系统
javaCopypublic class RiskControl {
public boolean detectAbnormalPayment(PaymentRequest request) {
// 实现支付异常检测
// 检查支付频率
// 验证设备指纹
return false;
}
}
public class SecurityManager {
public void validateTransaction(Transaction tx) {
// 交易金额异常检测
// 交易时间合理性验证
// 交易地理位置异常检测
// 设备指纹校验
// 交易频率控制
}
}
加强API安全性
// 添加SSL Pinning示例
public class SSLPinningManager {
private static final String[] VALID_PINS = {
"sha256/XXXX=", // 替换为实际的证书指纹
};
public void validatePinning(Certificate cert) {
// 实现证书链验证
// 实现证书指纹对比
}
}
javaCopypublic class APISecurityFilter {
public void doFilter(Request request, Response response) {
// 实现请求防重放
// 验证请求签名
// 检查请求时间戳
}
}
架构优化建议:
- 引入零信任架构
- 采用多因素认证
- 实现交易行为分析
- 建立安全事件响应机制
结论
支付安全是一个持续演进的话题,需要从多个层面构建纵深防御体系。作为支付参与方,应该持续关注新的安全威胁,并不断完善安全防护措施。
建议大家进一步阅读参考
- OWASP Mobile Security Testing Guide
- Android Security Internals
- Payment Card Industry Data Security Standard (PCI DSS)
免责声明:本文仅用于安全研究和技术讨论,请勿用于非法用途。
技术交流可联系我 dGcgQGludm9rZXlvdQ== (base64)