应用抓包进阶
做移动安全测试时,有时候我们设置好了代理,但抓不到应用包,本篇介绍如何对抗应用反抓包。
防护手段大致分为如下几种:
1. SSL证书绑定(单向校验和双向校验)。
2. 代理检测、VPN检测、利用发包框架强制不走代理。
3. 自定义Soket、ssl库等。
一、SSL证书绑定
什么是证书绑定呢?
网上叫法蛮多的,SSL证书绑定、英文名字:SSL Pinning或者证书检验。总之无论怎么叫都是检验证书是否可信任。
CA证书
我们知道从HTTP到HTTPS数据在传输过程中添加了一层SSL/TLS,让我们数据流量处于加密状态,不再是明文可见。这时候便有了CA证书。我们在抓取https数据包的时候,做的就是利用安装的假的CA证书,来实现中间人劫持数据。一旦app校验了证书的指纹信息,我们的证书不再受信任了,自然而然就无法建立连接。所以必须想办法让app信任,才能继续抓包。
当然这个分为两种情况:
1.单项校验-客户端校验服务端的证书。
2.双向认证-客户端不仅仅要校验服务端的证书,也会在app内放一张证书;服务端也会检验客户端里的证书。
二、单向校验
Android 系统中已经提供了检验证书的api,我们只需要重写实现以下方法即可:
①checkClientTrusted
②checkServerTrusted
③verify
这类的对抗需要我们将这些函数的校验进行置空,默认信任所有证书即可。
典型的 xposed 插件 SSLUnping
Frida objection 中的
android ansslpinning disable
三、双向认证
APP 除了校验服务端的证书,服务端还会校验 APP 的证书。https 双向证书校验在实际中几乎很少用到,因为服务器端需要维护所有客户端的证书,这无疑增加了很多消耗,因此大部分厂商选择使用单向证书绑定。
对抗双向认证需要完成两个环节
(1) 让客户端认为 burp 是服务端
这一步就是破解 ssl Pinning,方法和上述过程完全相同。
(2) 让服务端认为 burp 是客户端
这一步我们需要导入客户端的证书burp,客户端的证书一定会存在于本地代码中,而且可能还会有密码,在这种情况下需要逆向客户端 app,找到证书和密码,并转为 pkcs12 格式导入到 burp。
User options->SSL->Client SSCertificate。
通常情况下应用会将证书放置在资源目录app/asset下,后缀名为p12、pfx的文件。当然也可能会伪装成其他文件,例如图片文件等。
怎么找到证书密码呢?
一般逆向分析找到密码,还可以通过hook api java.security.KeyStore使密码自吐。
1.jadx中搜索证书的名字、或者证书链x509certificate分析定位到关键位置。
2. 服务器对客户端进行校验过程中,客户端将证书公钥发送给服务器,以及从服务器获取session和私钥解密过程中,需要API进行操作。
由于API存在于java层框架内,所以我们使用的是hook框架层代码:java.security.KeyStore,使密码自吐。
Burp 导入客户端中的证书教程:
https://bbs.pediy.com/thread-265404.html
四、代理检测
手机中去设置代理到我们的电脑,设置代理有两种方式。
第一种方法
第二种方法
adb shell settings put global http_proxy 192.168.xx.xxx:8888
获取当前系统是否设置代理,可以根据不同的Api Level,通过以下方法检测:System.getProperty()和android.net.proxy.getXxx()
五、利用框架强制不走代理
对于一些常用的网络库,其实是提供了我们设置的代理的接口,我们只需要将其设置成无代理的模式,它就不会走应用系统默认的代理进行网络请求。即使我们设置了代理也是会被忽略。最直观的表现就是,明明设置了代理,抓包工具中没有app的流量但是app与服务器可以正常交互运行。
例如比较常用的 OkHttp就可以直接设置 NO_PROXY。
六、VPN检测
当我们抓不到包时,有时候会采用VPN抓包,VPN 抓包的本质是在网络层/路由层抓包,例如小黄鸟常见的检测方式是:tun0 PPP0和Transpoart 等特征。
检测tun0 PPP0
检测 Transpoart
七、如何应对代理检测、
强制不走代理、VPN检测
1.hook相关函数。
2.反编译修改代码逻辑。
3.可以使用iptables对请求进行强制转发,ProxyDroid全局代理工具底层原理通过iptables实现的,所以使用ProxyDroid开启代理,可以比较有效的绕过代理检测。
iptables路由重定向
· 设置重定向:
iptables -t nat -A OUTPUT -d 0.0.0.0/0 -p tcp -j DNAT --to <电脑IP地址>
· 取消重定向:
iptables -t nat -D OUTPUT -d 0.0.0.0/0 -p tcp -j DNAT --to <电脑IP地址>
4.okhttp3中因设置NO_PROXY,不走系统代理情况的frida hook脚本。
5.同理我们知道VPN检测也是通过api获取判断,所以我们对api进行hook隐藏。
总结
攻防永无止境,有的开发者采用的是自身的SSL框架,这时候我们再去hook ssl库中的函数自然而然就无效了,还有的采用的是一些app内置Vray、Shadowsocks ,这些也可以一定程度上对抗抓包,但是最终还是需要具备比较强的逆向分析能力以及对系统的理解。
联想GIC全球安全实验室(中国)
原文始发于微信公众号(联想全球安全实验室):应用抓包进阶
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论