Android应用Retrofit接口Burp Suite抓包篡改攻击的防范方法咨询
Retrofit 网络请求防 Burp 拦截篡改的防护方案
1. 启用证书锁定(Certificate Pinning)
这是拦截 Burp 抓包最直接的手段,Burp 能抓HTTPS请求的前提是用户将Burp根证书导入设备信任列表,证书锁定会让客户端只信任你服务端的指定证书/公钥哈希,拒绝Burp签发的伪造证书,直接中断非法连接。
Retrofit 底层依赖 OkHttp,可直接配置 CertificatePinner 实现,示例代码如下:
// 替换为你的服务端域名和对应的公钥SHA256哈希 CertificatePinner pinner = new CertificatePinner.Builder() .add("your-service.com", "sha256/abcdefghijklmnopqrstuvwxyz1234567890=") .build(); OkHttpClient client = new OkHttpClient.Builder() .certificatePinner(pinner) .build(); Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://your-service.com/") .client(client) .build();
注意上线前务必关闭调试阶段的「信任所有证书」「允许代理」等测试配置。
2. 全接口请求加签名校验
即使攻击者绕过证书锁定抓到请求,也无法篡改参数后通过服务端校验:
- 客户端将所有请求参数按固定规则排序,拼接上仅客户端和服务端知晓的密钥盐,通过SHA256等哈希算法生成签名,将签名存入请求头传给服务端
- 服务端接收请求后用完全相同的规则生成签名,和请求传入的签名对比,不一致直接拒绝请求
- 签名生成逻辑建议放在JNI Native层实现,不要在Java/Kotlin层硬编码密钥,避免被反编译直接拿到密钥
3. 敏感请求 payload 对称加密
敏感业务的请求体不要明文传输,就算被拦截也无法读取、篡改内容:
- 采用AES对称加密请求体,密钥可提前约定,也可每次请求用RSA加密动态生成的AES密钥传输,避免密钥泄露
- 可自定义Retrofit的Converter.Factory统一处理所有请求/响应的加解密,无需每个接口单独适配
4. 增加客户端反调试、反Hook防护
攻击者可通过Root设备后用Frida、Xposed等工具Hook绕过证书锁定逻辑,需增加对应防护:
- 增加Root检测、调试器检测、Frida/Xposed环境检测,检测到风险直接强制退出应用
- 对核心网络逻辑代码做混淆、加固,提高反编译和Hook的成本
5. 服务端额外校验逻辑
- 校验请求头的User-Agent、设备标识等是否符合约定,异常请求直接拦截
- 高危操作(支付、账号信息修改等)额外增加二次校验,比如短信验证码、人脸验证等,避免被篡改请求后直接执行业务
- 监控异常请求频率,短时间内大量异常请求直接拉黑对应IP/设备标识
以上措施本质是提高攻击门槛,不存在100%无法破解的防护方案,只要攻击成本高于攻击者可获得的收益即可达到防护目标。
内容的提问来源于stack exchange,提问作者Amit Yadav
相关产品推荐
相关产品推荐

