爬虫技术必会技能,不知道ssl-pinning是啥?那你Out了!

发现问题

在使用charles对FaceBook/Twitter进行抓包时,所有的请求最终都失败了。第一感觉是手机上安装的HTTPS证书被删除了,到设置中检查发现证书没有问题,手机上其它APP的https请求也能够正常抓取。看来应该是碰到新情况了,Google了下,了解到FaceBook/Twitter等应用使用了一种名叫ssl-pinning的技术来防止中间人攻击。

HTTPS

在这里插入图片描述

这张图比较形象地道出了HTTPS实际上是由HTTP协议与TLS协议组合而成的一个协议。
TLS协议作用于HTTPS建立前客户端与服务端通信建立信任的过程,其过程与TCP协议中的三次握手过程较为相似,有些同学可能会将二者混为一谈,注意二者本质上是完全不同的。
HTTP协议作用于客户端与服务端的正式通信过程,但二者通信的数据是被TLS协议最终生成的密钥加密过。

在这里插入图片描述
客户端与服务端经过通信交换获得了三个随机数,通过这三个随机数,客户端与服务端能够使用相同的算法生成后续HTTP通信过程中对称加密算法使用的密钥。也就是说HTTPS协议中非对称加密只是在协议建立时使用,协议建立后使用的是对称加密。

中间人攻击

市面上的各种抓包软件的实现原理就是中间人攻击。TLS建立时客户端生成的随机数1、服务端生成的随机数2都是明文的,只有随机数据3使用非对称加密技术加密。中间人攻击的关键就是截获服务器返回的证书并伪造证书发送给客户端骗取信任,获取随机数3,进而达成盗取信息的目的。

那么客户端为什么这么容易被骗呢?客户端主要通过下面三种方式来校验证书的合法性:

  • 查看证书是否过期
  • 服务器证书上的域名是否和服务器的实际域名相匹配
  • 校验证书链

市面上大量的应用在证书检验方面做的都不够,还有很多的应用完全末做验证。而即使是完整的校验了整个证书链体系,中间人攻击同样还是可以通过在终端上手动添加信任根证书的方式发动。这也正是Charles/Fiddler等抓包软件在抓取HTTPS协议数据前,要求在终端上安装证书的原因。这个证书可以确保伪造的证书通过客户端的证书链校验。

在这里插入图片描述

ssl-pinning

那么开篇提到的FaceBook/Twitter是如何做到防止Charles/Fiddler等抓包工具中间人攻击的呢?原来它是在开发时就将服务端证书一块打包到客户端里。这样在HTTPS建立时与服务端返回的证书比对一致性,进而识别出中间人攻击后直接在客户端侧中止连接。
ssl-pinning技术在AFNetworking中已经得到支持,参照这篇 文章

突破ssl-pinning

有矛就有盾,开发者已经突破了ssl-pinning的限制达成了Facebook/Twitter的抓包需求。其实现的基本原理很简单,客户端不是会做两个证书间的一次性校验吗,那么就通过hook的方式将此次校验的结果返回true或者干脆不让其做校验。当然这种做法只能在越狱环境下实现,但对于抓包来说,这已经足够了。该方案已开源,其实现的基本原理在这篇文章中.

总结

没有破解不了的应用,只有破解成本高到无法承受的应用,愿这个世界更美好。。。。。。。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值