简要描述一下最近的OpenSSL漏洞以及它连带引起的其它软件的漏洞的细节。
大家都知道OpenSSL是最常用的开源加密库,用来做加密,签名,验证签名等事情。最近出现一个漏洞,就是OpenSSL在验证签名的时候存在问题,会把一个畸形的错误签名验证为可信的签名,导致攻击者在被MIM(中间人)攻击的时候,本应报警签名验证失败的错误信息,变成了验证通过,被MIM劫持而不自知。也就是说,以前访问HTTPS网站时被劫持了会有证书无效的警告,现在攻击者使用特别的畸形证书,客户端不会报警了。因此,这个是一个客户端漏洞。
顺便讲一下DNSSEC,DNSSEC是为了解决DNS spoofing attack(DNS欺骗,大量数据包暴力匹配DNS Query ID的攻击手法)问题提出的方案,和HTTPS有一些类似。当我们的DNS服务器去上级DNS服务器请求域名解析的时候,上级服务器会把他的response信息做签名,一起发到我们的DNS服务器。我们的DNS服务器去验证这个响应的签名,如果正确就加入到缓存,签名验证失败就丢弃响应,这个签名验证是OpenSSL库做的。因此现在OpenSSL出现签名验证问题,会导致DNSSEC接收错误签名的响应包。
这样即使启用了DNSSEC依然存在被投毒的可能性。但是构造这样的签名,以及匹配DNS Query ID很难,所以危害并不大。简单的说,无OpenSSL漏洞但启用DNSSEC的DNS服务安全性 > 有OpenSSL签名漏洞的启用DNSSEC的DNS服务 >>>> 未启用DNSSEC的DNS服务。前几天的MD5碰撞伪造证书,危害和这个类似,或许更小,因为找MD5碰撞更难,而且很多签名是SHA1做的,而这个OpenSSL漏洞则是对所有签名算法的验证漏洞。