当前位置:首页 » 黑客技术 » 正文

分类页和文章页“当前位置”下方广告(PC版)
领先漏洞博客,一个值得收藏的网站!个人QQ/微信 : 947691002 技术交流QQ群:144650234

HTTPS真的万能么?

353 人参与  2017年11月30日 17:14  分类 : 黑客技术  评论

0xFF 一点文章无关的废话

本来来知乎没打算写啥东西,但是前几天被一个大神怼

你不懂啥是Wireshark还来装x

大神还说

HTTPS在任何情况下都是安全的

突然就想写点东西了…我很菜,希望轻喷啊各位…


0x00 这篇文章说什么?

这篇文章主要针对HTTPS常见的各种攻击进行复现,证明HTTPS并不是绝对的安全,并且提供一些简单的防护建议


正文开始


0x01 什么是HTTPS? 为什么能保证安全?

HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer)简单的说就是HTTP的安全加强版,通过在HTTP与TCP层之间添加一层SSL(Secure Sockets Layer,安全套接层)/TLS(Trassport Layer Security,传输层安全)协议,解决了主机信任,数据的泄密和恶意篡改的问题

简单地说,就是保证将数据正确的送到目的地,其他第三方看不到传送的数据,数据是原封不动的送达

不过SSL现在已经老了,我们就谈谈TLS吧

TLS包含三个基本阶段:

  1. 对等协商支援的密钥算法

  2. 基于私钥加密交换公钥、基于PKI证书的身份认证

  3. 基于公钥加密的数据传输保密

OK,这里提到两个很关键的词:数字证书和公钥加密

数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件。

最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名。数字证书还有一个重要的特征就是只在特定的时间段内有效。

数字证书是一种权威性的电子文档,可以由权威公正的第三方机构,即CA(例如中国各地方的CA公司)中心签发的证书,也可以由企业级CA系统进行签发。
它以数字证书为核心的加密技术(加密传输、数字签名、数字信封等安全技术)可以对网络上传输的信息进行加密和解密、数字签名和签名验证,确保网上传递信息的机密性、完整性及交易的不可抵赖性。使用了数字证书,即使您发送的信息在网上被他人截获,甚至您丢失了个人的账户、密码等信息,仍可以保证您的账户、资金安全

而什么是公钥加密呢?

公钥加密,也叫非对称(密钥)加密(public key encryption),属于通信科技下的网络安全二级学科,指的是由对应的一对唯一性密钥(即公开密钥和私有密钥)组成的加密方法。它解决了密钥的发布和管理问题,是目前商业密码的核心。在公钥加密体制中,没有公开的是私钥,公开的是公钥。

基础原理说到这里就够了,希望详细了解的同学可以参考各大百科:)

所以我们总结一下,如果想攻击这套安全体系,可以从这些方面下手:

  1. 既然HTTPS是HTTP的扩展,我们就别让他走HTTPS了,直接走HTTP吧

  2. TLS比较安全,我们就让退休的SSL来干活,这样就好欺负了

  3. 数字证书是由CA签发的,要是我们有CA的本事不就可以为所欲为了么

  4. 既然这一堆方案的安全性都基于非对称加密,我们把非对称加密搞定了不就行了

  5. 使用这么广泛的协议,肯定存在漏洞,找到漏洞不就行啦

ok,接下来就通过实验一条条分析这些攻击的可行性

0x02 SSL剥离攻击与HSTS

经典的问题:这是啥?

SSL剥离攻击就是我们说的强制HTTPS走HTTP流量,而HSTS则是针对这种攻击的保护

咋实现呢?

仔细想想,是不是平时访问网站总是直接输入xxx.com而不是https://xxx.com呢?

有同学说了,我这样访问不是最后也会跳转到HTTPS么?但是,这样是极其危险的,不相信?来和我一起做:

打开火狐浏览器,跳到about:blank,然后按F12打开控制台,切换到网络标签,现在,输入www.zhihu.com(没办法,刚好管理员没启用)

可以看到,第一条请求记录是这样的

>GET / HTTP/1.1
>
>Host: www.zhihu.com
>
>User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0(别看我UA,这不是重点)
>
>Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
>
>Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
>
>Accept-Encoding: gzip, deflate
>
>Cookie: xxxxxxx(别想打我Cookie)

此时,如果你曾经登陆过某乎并且保存过密码的话,理论上我就可以通过中间人攻击拿走你的Cookie之后登陆你的某乎,给我涨几个赞了~

接下来,让我们看看服务器是怎么回应我们的:

>HTTP/1.1 302 Found
>
Date: Fri, 11 Nov 2016 17:46:31 GMT

>Content-Type: text/html; charset=UTF-8
>
>Location: https://www.zhihu.com/
>
>content-security-policy: (略)
>
>Set-Cookie: (略)

服务器告诉我们,网页转移啦!去https://www.zhihu.com看吧!

但是,此时我们已经陷入了被动,如果坏人更进一步,会发生什么呢?(此处仅考虑理想情况)

由于HTTP流量完全是明文,完全可以将HTTP头中的各种保护剔除,再告诉你

根本没啥HTTPS,你就接着用HTTP吧

如果服务器刚好提供了HTTP服务,我们的所有信息都会落到坏银手里

怎么办?

这就是HSTS(HTTP Strict Transport Security)出场的时候啦,正如他的名字,使用了之后会强制浏览器使用安全连接

HSTS的作用是强制客户端(如浏览器)使用HTTPS与服务器创建连接。

简单地说,就是告诉浏览器记住了,别去试HTTP,和我聊天只能用HTTPS

现在让我们重复刚才的步骤,只不过目标换成了百度,第一条不再是HTTP 302跳转了,而是直接访问HTTPS的链接了,压根没试有没有HTTP

HSTS还有一个好处,在证书不正确时,只要设置过HSTS就不允许忽略这个错误(除了某些奇葩不理会这个头…)

说了这么多,怎么开启HSTS呢?其实很简单,只要在HTTPS的返回头中加上一条就够了

Strict-Transport-Security: max-age=63072000; includeSubDomains

这个头声明了两点:

在接下来的63072000秒(两年)中,必须通过HTTPS访问该网站

除了主域名(xxx.com),子域名(???.xxx.com)也应该被相同对待

只要有一次成功的HTTPS链接,就可以保证接下来两年的安全,是不是很划算?

但是一次HTTPS链接都没成功过呢

好吧,大大们已经有解决方案了,那就是Preloading HSTS

简单的说,就是在浏览器中内置了一个列表,告诉浏览器,不管有没有收到过HSTS的头,都应该按照HSTS的规范去访问这个网站,详细的可以看这里:

https://blog.mozilla.org/security/2012/11/01/preloading-hsts/


本篇涉及到的参考:

百度百科中关于HTTPS,SSL,TLS的段落


来源:领先漏洞(QQ交流群:144650234),转载请保留出处和链接!

本文链接:http://www.sickbug.com/post/53.html

文章底部广告(PC版)
领先漏洞博客,一个值得收藏的网站!个人QQ/微信 : 947691002 技术交流QQ群:144650234

本文标签:

加入【领先技术交流】QQ群:144650234(加群验证:领先博客)

<< 上一篇 下一篇 >>
评论框上方广告(PC版)
领先漏洞博客,一个值得收藏的网站!个人QQ/微信 : 947691002 技术交流QQ群:144650234

  • 评论(0)
  • 相关文章

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

SEO最好模板

文章投稿 | 有偿服务 | 本站主题 | 友链申请 | 负责申明

Copyright Your WebSite.Some Rights Reserved.