攻击原理
SSL握手的过程中,在协商加密算法时服务器CPU的开销是客户端开销的15倍左右。攻击者利用这一特点,在一个TCP连接中不停地快速重新协商(这种行为是被SSL所允许的),从而耗尽服务器CPU资源,这种攻击叫做SSL-DoS。
如果多个僵尸主机向服务器发起SSL-DoS,则叫做SSL-DDoS攻击。,利用该SSL漏洞的攻击的详细过程如下图所示:
攻击过程分析
上述报文可以看到SSL服务器的资源如何被耗尽。
SSL客户端发送一条ClientHello消息来初始化一次新的握手,该消息大约100字节左右,不需要加密。
服务器端响应ClientHello消息,需要连续发出3个消息,ServerHello、Certificate、ServerHelloDone,这3个消息一般在3000字节左右,需要用高级加密标准AES或流加密算法簇RC-4进行加密后再发送。
每次握手,SSL服务端发送的数据比客户端多了30倍,还要进行加密,从而导致服务端CPU计算资源大量占用。
抓包分析:
攻击一段时间,服务器不能响应
防御方法
针对Pushdo僵尸的垃圾报文攻击,可以在建立TCP连接后进行报文规格检查。
严格的规格检查:
对SSL连接中的所有报文进行检查,如果其不符合ssl报文规格,则丢弃该报文并对源ip进行封禁。
优点,可以发现任何类型的ssl垃圾报文,准确度高;
缺点,如果出现ssl分段报文,无法检测或者检测代价高;
宽松的规格检查:
对建立tcp连接后的一个或者几个ssl报文,如对client hello、change cipher spec进行规格检查;
优点,检测效率高;
缺点,不能对检测范围外的ssl垃圾报文进行防护;
针对thc-ssl-dos及类似的以ssl握手协商过程进行dos的攻击,可以对源ip或者一条ssl连接内的协商报文(change cipher spec报文)速率进行统计。
如果协商报文速率异常,则丢弃该连接的所有报文。
还有一些网络安全公司提出了关闭重握手(Renegotiation)以防止该漏洞被利用的解决方案,但这只能延缓SSL服务被攻击所导致的宕机到来时间, 还会导致SSL扩展服务无法使用。相关用户应尽快进行SSL服务器安全检查,并且及时调整相关安全产品的安全规则,以应对此漏洞带来的安全风险。