上周写了一篇关于HTTPS的浅析,从基本的网络交互和性能对比来对HTTPS做了一个简单的介绍。应 浩哥(百度云技术大牛) 的指导和约稿写一篇如何构建一个更加安全可靠的HTTPS服务。
首先介绍两个网址:
测试服务端SSL: https://www.ssllabs.com/ssltest/
测试浏览器SSL:https://www.poodletest.com/
主流浏览器对于SSL支持应该都比较全面,本文我们主要是从服务端来探讨如何使服务端的加密服务更加安全可靠。
首先我们从我们目前还未大规模部署HTTPS服务的说起,看看我们自身的评级以及存在的漏洞说起。
先看检测结果:
四个字:不(fen)容(shu)乐(hen)观(di)
我们一条一条的来做分析
-
Experimental: This server is vulnerable to the DROWN attack. Grade set to F. MORE INFO »
-
This server supports SSL 2, which is obsolete and insecure, and can be used against TLS (DROWN attack). Grade set to F. MORE INFO »
DROWN attack: 2016年3月1号 公布的HTTPS的漏洞,我们来看一下官方的解释:(https://drownattack.com)
DROWN is a serious vulnerability that affects HTTPS and other services that rely on SSL and TLS, some of the essential cryptographic protocols for Internet security. These protocols allow everyone on the Internet to browse the web, use email, shop online, and send instant messages without third-parties being able to read the communication.
DROWN allows attackers to break the encryption and read or steal sensitive communications, including passwords, credit card numbers, trade secrets, or financial data. Our measurements indicate 33% of all HTTPS servers are vulnerable to the attack.
看前提:从官方的描述来看,该漏洞是发生在同时支持SSL不同版本的server上面
看攻击:攻击者通过劫持TLS的握手信息,然后利用SSL2的漏洞来访问相同的服务器,可以通过拿到的私钥进行后续的信息交互来达到攻击的目的
看结果:从目前的扫面来看全球有33%的服务器存在该漏洞
那么这个问题这么严重,应该如何预防和修复这个漏洞呢?
一个简单的办法就是将漏洞发生的前提禁掉那么相应的漏洞也就不会发生了,简单粗暴的方法:将服务器对SSL2的禁掉,全面支持高版本的SSL那么该漏洞就没发生的前提了。
-
This server is vulnerable to the POODLE attack. If possible, disable SSL 3 to mitigate. Grade capped to C. MORE INFO »
POODLE attack:该漏洞是利用的浏览器的兼容逻辑,通过SSL3的漏洞,利用网络攻击提取出针对SSL连接部分的明文信息,通过可以拿到用户的cookie信息。(https://www.imperialviolet.org/2014/10/14/poodle.html)(https://googleonlinesecurity.blogspot.com.au/2014/10/this-poodle-bites-exploiting-ssl-30.html)
看前提:该攻击还是利用了SSL低版本的漏洞来提取信息的,该类攻击的前提是发生在浏览器,浏览器为了保证请求的成功率,在HTTPS请求失败后,会尝试使用低版本的SSL来进行后续的尝试,因此给攻击者提供了可以进行攻击的空子。
看攻击:攻击者通常利用运行在浏览器中的JavaScript等,复制加密之后的请求数据块来服务器进行访问。SSL3的设计缺陷不会拒绝该类模拟攻击的请求,也不会断开连接,那么在多次尝试之后,总有可能获取到携带cookie的数据库,来进行后面的数据窃取。从参考文献中看,该类攻击的成功率比较高。
看修复:该类请求主要是发生在浏览器,那么可以通过集中方式进行预防。
a)浏览器禁用SSL3的版本(釜底抽薪的办法)
b)服务端进行修复:对SSL3中进行CBC模式的加密;或者支持TLS_FAILBACK_SCSV解决重试链接失败的问题,防止浏览器从高版本回退到低版本
-
Certificate has a weak signature and expires after 2015. Upgrade to SHA2 to avoid browser warnings. MORE INFO »
很简单,从上面扫描的结果来看,证书的的签名太弱,应该及时的升级到SHA2
-
The server supports only older protocols, but not the current best TLS 1.2. Grade capped to C. MORE INFO »
-
This server accepts RC4 cipher, but only with older protocol versions. Grade capped to B. MORE INFO »
这个是由于服务器的SSL版本太低导致的,对于数据安全性较高的服务,应及时的升级SSL的版本
-
There is no support for secure renegotiation. MORE INFO »
不支持安全重连协议:从服务上看,出现不支持的情况,可能是在开发的过程中一方面为了保证可靠安全的服务,另一方面为了减少开发成本才不支持安全重连的协议。此问题可以根据实际的情况来看,如果对于业务的影响不大,可以考虑选择性的支持
-
The server does not support Forward Secrecy with the reference browsers. MORE INFO »
不支持根据浏览器的完美安全协议,具体的安全协议可以参考:https://en.wikipedia.org/wiki/Forward_secrecy
从上面可以看出,想要搭建一个完美安全的HTTPS服务其实不是一件容易的事情,安全与不安全都是相对而言,随着攻击者道行越来越高,所谓安全的加密协议都会得到攻破,随之而来的是更加复杂更加完美的安全协议得到应用。
文章评论