记一次APP SSL pinnig 抓包

先了解下背景,APP证书校验的几种实现方式[1]

  1. 不校验,只走Https流量
  2. 系统信任证书校验
    • Android7以后,系统不再信任用户级的证书,只信任系统级的证书,所以要抓包就需要把我们的代理程序证书安装至Android的系统目录中
  3. 公钥校验Public Key Pinning
    • HTTPS网站防止攻击者利用数字证书认证机构(CA)错误签发的证书进行中间人攻击的一种安全机制,用于预防CA遭受入侵或其他会造成CA签发未授权证书的情况。采用公钥固定时,网站会提供已授权公钥的哈希列表,指示客户端在后续通讯中只接受列表上的公钥。
  4. 证书全内容校验 SSL Certificate Pinning

下面记录了一次抓包过程:

  • 打开Charles, 启用ssl proxy,手机配好代理,开始如图所示,提示握手失败
  • 看来有做证书校验,试试第二种系统证书校验,把charles证书装到手机上
  • No luck, 尝试第3种 公钥校验,这里用到 frida(手机需root),
    • 手机端, 参考 官方文档
      • 下载frida-server对应架构版本
      • 手机用数据线连接到电脑
      • 把二进制执行文件复制到手机 /data/local/tmp/
      • 手工执行: /data/local/tmp/frida-server &
      • 如果使用了Magisk, 需要关闭MagiskHide
frida -U -c akabe1/frida-multiple-unpinning --no-pause -f "app包名" 
  • 而 SSL Certificate Pinning 证书全内容校验,比公钥验证多了一个服务器端验证客户端证书的过程。这种方式会把客户端证书打包进APP,需要反编译apk找到证书文件,这种情况下次再补充。

参考:

  1. APP优雅进行SSL证书校验——(一)服务器篇
  2. JustTrustMe
  3. TrustMeAlready
  4. Always Trust User Certificates
  5. frida
  6. frida-doc-android
  7. frida-multiple-unpinning

Leave a Reply

Your email address will not be published. Required fields are marked *