揭秘安卓应用抓包技术:绕过SSL Pinning和抓取HTTPS包的方法

文章关键词:电子数据取证、手机取证、云取证、介质取证、计算机取证

前提

在协助某地公安局侦办一起电信诈骗案件中,发现了多个具有不同涉案类型的手机应用程序,办案人员通过抓包工具(例如Fiddler/Charles)对应用的https请求进行抓取时,发现大部分的App都提示网络异常/无数据等等信息。经过研究发现不是Fiddler内置证书的问题,而是App内置证书的问题 — SSL Pinning机制(也可称为证书绑定)。如果不绕过SSL去抓包的话,所有返回的请求都抓不到。本文将探究如何绕过SSL Pinning和抓取HTTPS包。

Trusted Certificate Authorities:

安卓在7.0版本之后对证书的信任引入了新的机制,默认不再信任用户添加的证书颁发机构(CA)。当我们反编译一个apk后,在AndroidManifest.xml文件中的networkSecurityConfig一项指定了相关的配置文件:

对应res资源目录下xml文件夹里的network_security_config.xml,内容如下:

这里我们可以看到,这个apk只相信cas这个证书以及系统证书。如果我们要使其相信我们安装的fiddler或burpsuite的证书,则需要在network_security_config.xml中添加如下语句:

这样重打包apk后,我们就可以抓到HTTPS包了。但很遗憾,到这里,你可能还会遇到抓不到包的情况,那便是SSL Pinning了。

SSL Pinning:

SSL Pinning主要就是来防止中间人攻击的,安卓应用会在HTTPS建立时对服务端返回的证书作校验,如果不一致则无法建立连接,我们用到的抓包工具fiddler或burpsuite实际上就是在起一个中间人的作用。安卓应用中设置SSL Pinnning的方法有以下几种:TrustManager、OkHttp的CertificatePinner、Network Security Configuration。

这里我推荐一款开源工具objection,利用它提供的android sslpinning disable模块便可bypass SSL Pinnning。它的原理就是利用frida来hook实现SSL Pinning的这些函数,修改其返回值。

objection下载的地址:

https://github.com/sensepost/objection,安装和使用方法可以参考它的wiki:

https://github.com/sensepost/objection/wiki/Screenshots。

如果大家有root的手机,那在手机上运行frida-server,电脑上运行objection即可,否则就需要使用objection重打包应用。

启动objection的android sslpinning disable模块后,就能抓到HTTPS包了:

如果还是遇到了抓不到HTTPS包的情况,这里猜测可能是手机的wifi代理并没有强制app所有的流量都要走代理,所以我推荐大家可以用我接下来介绍的方法PPTP+MITM

这个方法的中心思想其实就是通过VPN将手机流量引到一台主机,在主机上进行抓包,这里我是在ubuntu系统上搭建PPTP VPN以及mitmproxy代理。

1.将虚拟机的网络模式设置成为桥接,目的是使其与手机处在同一个局域网:

2.安装pptp:

3.编辑/etc/pptpd.conf配置,使用默认的localip和remoteip:

4.编辑/etc/ppp/chap-secrets,设置VPN登录用户:

对应的格式如下:

第一个*代表服务可以是PPTPD也可以是L2TPD,第二个*代表随机分配ip。

5.在/etc/sysctl.conf配置中开启ipv4转发:

然后执行以下命令使配置生效:

6.iptables添加转发规则:

第一条是将所有流量转发到ens33这个网卡,第二条、第三条就是将80和443端口的流量转发到8080端口,8080端口即为mitmproxy监听的端口。

7.以透明代理的模式启动mitmproxy,透明代理本人的理解应该就是指客户端对代理无感知:

如果想要用Host值而非IP来显示URL的话,可以加--showhost参数:

Openvpn+Burpsuite

搭建pptp的过程还是有点繁琐,另外MITM虽然有着web界面,但不如burpsuite好使,因此这里推荐一种更好的方式,即Openvpn+Burpsuite。

Openvpn用该脚本一键安装即可:

https://link.zhihu.com/target=https%3A//github.com/angristan/openvpn-install,然后在手机上安装Openvpn的客户端用来连接VPN服务器,然后同样需要在VPN服务器上设置iptables:

这里重点介绍一下Burpsuite配置,在Proxy的设置里修改监听地址和启用透明代理:

设置监听All interfaces,可能是我设置iptables的时候没有指定127.0.0.1:8080所以导致burpsuite必须监听all interfaces:

开启透明代理,在Request handling里勾选Support invisible proxying即可:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值