freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Android渗透-04:安卓抓包之绕过SSL Pinning
2022-08-09 12:16:44
所属地 广东省

0x00 前言

在对Android应用进行渗透测试时,通常需要是对App产生的网络报文进行抓取。开发人员为了对抗抓包,也会采取相应的防御技术,常见的方式有:客户端检测服务端的证书、检测是否使用代理、SSL Pinning(证证书锁定)、客户端与服务端双向校验。

对于客户端校验服务端证书这种检测方式,只要将代理(比如 Charles、Burpsuite等)证书内置到系统信任的凭据中,就可以抓取Https的请求包;检测是否使用代理,可以使用代理 抓包进行绕过。对于以上两种我们在前两篇的文章已经分享过了。本篇文章,我们主要分享 SSL Pinning的实现和绕过。

0x01 SSL Pinning是什么?

SSL Pinning 也称为证书锁定,是Google官方推荐的检验方式,意思是将服务器提供的SSL/TLS证书内置到移动客户端,当客户端发起请求的时候,通过对比内置的证书与服务器的证书是否一致,来确认这个连接的合法性。

0x02 如何实现SSL Pinning ?

SSL Pinning 一般实现方式有两种,一种是在代码层进行校验,一种是通过配置文件network_security_config.xml进行配置实现校验。

2.1 代码层校验

下面是以 okhttp 网络框架举例,在代码校验证书公钥的代码如下:

1660018370_62f1dec29f5e3a597f15b.png!small?1660018371380

2.2 配置文件实现

通过res/xml/network_security_config.xml进行配置,实现SSL Pinning,配置文件可以分为两种,使用证书校验和公钥校验。

使用证书锁定,由于CA签发证书存在有效期的问题,所以在证书续期后,需要将证书重新内置到App中。

使用公钥锁定,需要提取证书中的公钥并内置到app中,公钥在证书续期后可以保持不变(即密钥对可以不变),可以避免有效期问题。

下面我们先看看证书锁定和公钥锁定的具体配置实现:

1660018380_62f1decc80d77525c1c63.png!small?1660018381136

SSL Pinning 具体的实现的代码,可以查看:https://github.com/act0rn/https-capture

这个案例代码实现了常见的证书对抗,App运行 如下:

1660018389_62f1ded565c6f0f495510.png!small?1660018389926

0x03 如何绕过 SSL Pinning?

此时,我们打开测试的App,然后点击后面三个按钮(04、05、06按钮),并使用抓包工具(例如Charles )进行抓包,发现抓包失败,提示信息如下:

1660018398_62f1dede43a9119052cbd.png!small?1660018398801

这里提示Client closed the connection before a request was made. Possibly the SSL certificate was rejected,提示证书校验失败。

那么如何绕过SSL Pinning 进行抓包呢?

我们这里使用 Frida 或者 Objection Hook工具可以实现绕过检测,关于具体Frida和Objection怎么安装,大家可以自行网上搜索,在之后会单独出 Frida 和 Objection 相关的文章。

3.1 使用Objection绕过

使用 objection 启动explore模式:objection -g com.actorn.netcapture explore

然后再输入android sslpinning disable绕过证书绑定

1660018411_62f1deebb150ba58d0bb7.png!small?1660018412710

然后再点击app的后三个按钮,就可以抓到https的请求包了

1660018418_62f1def255901faa4ff01.png!small?1660018419065

3.2 使用 Frida 进行Hook绕过

Objection 是基于 Frida的,如果不使用 objection,我们自己写 hook脚本,当然也可以实现了,这里我们参照 Objection 的脚本来写 Frida 的Hook脚本

绕过代码层检测公钥

1660018424_62f1def8f2033c311af88.png!small?1660018425662

写好hook脚本后,使用frida 加载执行:

1660018433_62f1df01333938ddc8476.png!small?1660018433896

输入hook的函数 unpinningSsl1() ,然后点击app中的第四个按钮,发现可以抓取代码层校验的包

绕过配置文件校验

代码如下:

1660018444_62f1df0c4fd3b19499791.png!small?1660018444994

加载写好的hook脚本,然后输入 unpinningSsl2() 函数:

1660018452_62f1df14711809bc172b9.png!small?1660018456163

然后在点击app中的第5和第6个按钮,发现可以抓取这两个的请求包

1660018459_62f1df1b50c9fe16dc120.png!small?1660018461073

0x04 小结

本文分享了SSL Pinning 的常见实现方式,可以通过代码层校验证书的公钥,也可以通过配置文件进行证书校验,还分享了通过 Hook 技术绕过常规的 SSL Pinning。

# android安全 # 安卓安全 # 安卓工具,移动安全 # android逆向 # 安卓渗透
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录