Android抓包技术研究

本文详细介绍了Android设备上的抓包工具,如Fiddler、Burpsuite和Charls等,并探讨了抓包原理,包括MITM Server如何伪装以及MITM Client的伪装。对于HTTPS抓包,文章讨论了证书锁定、公钥锁定以及针对不同Android版本和目标SDK版本的解决策略。此外,还涵盖了TCP/UDP抓包和Flutter应用的抓包方法。
摘要由CSDN通过智能技术生成

Android抓包工具

  • Fiddler
  • Burpsuite
  • Charls
  • HttpCanary
  • Packet Capture
  • Tcpdump
  • Wireshark

抓包原理

在这里插入图片描述
从上面这个原理图,可以看出抓包的核心问题主要是两个:

  • MITM Server如何伪装成真正的Server;
  • MITM Client如何伪装成真正的Client。

  第一个问题,MITM Server要成为真正的Server,必须能够给指定域名签发公钥证书,且公钥证书能够通过系统的安全校验。

  比如Client发送了一条https://www.baidu.com/的网络请求,MITM Server要伪装成百度的Server,必须持有www.baidu.com域名的公钥证书并发给Client,同时还要有与公钥相匹配的私钥。MITM Server的处理方式是从第一个SSL/TLS握手包Client Hello中提取出域名www.baidu.com,利用应用内置的CA证书创建www.baidu.com域名的公钥证书和私钥。创建的公钥证书在SSL/TLS握手的过程中发给Client,Client收到公钥证书后会由系统会对此证书进行校验,判断是否是百度公司持有的证书,但很明显这个证书是抓包工具伪造的。

  为了能够让系统校验公钥证书时认为证书是真实有效的,我们需要将抓包应用内置的CA证书手动安装到系统中,作为真正的证书发行商(CA),即洗白。这就是为什么HTTPS抓包一定要先安装CA证书。

  第二个问题,MITM Client伪装成Client。大部分服务器Server并不会校验客户端client证书,此为单向认证。当然存在部分应用使用双向认证,即Server也校验Client的证书。因此需要伪装成Client则需要Client内置的证书以及对应的密钥,而这两部分存在于Client端,因此可以提取并进行伪造。

抓包协议及其抓包解决方案

HTTP

最简单的一种,直接上抓包工具进行抓包就可以了。不需要任何额外配置。

HTTPS
  1. 单向认证
    校验方式

    1. 客户端没有进行校验(形同虚设)
        虽然没有客户端没有进行校验,但是由于整个认证校验流程需要走完,因此也是需要有绕过方法。

    2. 证书锁定(Certificate Pinning)
        需要在客户端代码内置仅接受指定域名的证书,而不接受操作系统或浏览器内置的CA根证书对应的任何证书,通过这种授权方式,保障了APP与服务端通信的唯一性和安全性,因此客户端与服务端(例如API网关)之间的通信是可以保证绝对安全。但是CA签发证书都存在有效期问题,缺点是在 证书续期后需要将证书重新内置到APP中。

    3. 公钥锁定( Public Key Pinning)
        提取证书中的公钥并内置到客户端中,通过与服务器对比公钥值来验证连接的正确性。制作证书密钥时,公钥在证书的续期前后都可以保持不变(即密钥对不变),所以可以避免证书有效期问题,一般推荐这种做法。

    解决方法

    • 针对1的解决方法

      • Android 7.0 以上 且 targetSdkVersion >= 24

        • AndroidManifest中配置networkSecurityConfig.[2]
        • 平行空间/Virtual
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值