众所周知,https可以保护数据传输的安全性,防止黑客监听、窃取和篡改传输的数据,避免发生中间人攻击。
一般认为,只要网站启用https协议,数据传输就很安全。
然而,事实真的如此吗?
2014年,波兰计算机安全应急响应组发表了一篇文章,文章中这样写道:“很多家用路由器存在未授权的远程修改配置漏洞导致了这次事件的发生。黑客通过网上银行页面注入了JavaScript代码,欺骗用户输入账号密码,或者验证码,最终窃取用户银行里的钱。”
当年这一事件让很多人感到十分疑惑。
大部分人都只听说过DNS劫持只会发生在http上,从来没听过https也可以发生DNS劫持,https也不安全啊!
什么是https?
简单地说,https是http的升级版,在http下加入了SSL层,以此达到保护数据传输安全的目的。
https主要通过数字证书、加密算法、非对称加密等技术,实现互联网传输安全保护。它的作用有三个:
1. 数据保密性
保护数据内容在传输过程中,不会被第三人查看。就好像商家将商品包裹得严严实实的,再通过快递发给你一样,其他人没办法知道包裹里放着什么。
2. 数据完整性
及时发现被第三人篡改的传输内容。就像快递包裹到了你的手里,发现包裹破了一个洞,我们能及时发现并拒收。
3. 身份校验
保护数据达到用户期望的目目的地。就像商家要求买家提供手机号、地址等详细信息一样,通过身份校验来确保送对了地方。
发生攻击
为什么DNS劫持也会发生在https身上?
原来,黑客使用了一款名为SSLStrip的工具,这种攻击可以阻止用户和https网站建立连接,进行中间人劫持。
SSLStrip的工作流程为:
- 发动中间人攻击,切齿http请求流量
- 将https链接全部替换为http
- 使用http与受害主机进行连接,与此同时,与网站服务器建立https连接
- 受害主机与网站服务器之间的全部通信请求,全部由黑客的服务器进行转发
要完成攻击,SSLStrip还需要解决一个问题。如果用户访问的是http,浏览器会发出警告,提醒用户没有使用SSL加密。
为了解决这个问题,SSLStrip会对URL进行重写,在域名前面增加“ssl-”的前缀,以此来迷惑用户。
黑客在实施攻击过程中,采用了SSL剥离技术,实现中间人攻击。自己与银行之前建立https,但在用于与自己之间却是http。
可以看出,黑客仍然没有办法突破https。
只不过很多人都存在一个误区,为网站安装SSL证书,不代表网站与浏览器之间的数据传输就是安全的,黑客虽然没办法绕开https的防护,但仍然可以使用其他方法,窃取用户的数据。