滥用SSL/TLS实现WAF绕过

介绍

最近几年web安全成为了信息安全的重头戏。由于web的各种优势,很多关键性服务被开发成了网站应用。公司对他们网络应用的安全除了注重安全的开发标准流程,还额外的加入了一层安全防护。 应用防火墙WAF 是OSI第七层防火墙,用于检测网站流量从而'试着'规避掉、过滤攻击风险。这篇文章我会介绍一个我在部署审计的过程中发现的一个有趣的绕过方法。

“漏洞”产生的原因

最近领导安排我审计一家公司部署 WAF的情况。 我肯定不可以告诉你是哪家公司和用到的设备,但是原理都基本一样。部署的结构大致如下图:

在我获得需要的信息之后,我就开始想着怎么样能绕过它。委托方给了我对WAF操作的权限来做各种测试。在我发现的各种绕过方式中,有一种有趣的绕过方式是利用滥用SSL加密实现的。当我第一次登录进WAF的管理系统中的时候,不支持SSL加密的警告很快就引起了我的注意。看到之后,我马上就开始了对这款产品的技术文档的研究,并且试着去找到所有支持的SSL加密方式。不过首先我先给你们很快的讲一下SSL连接的基本工作原理。

SSL的握手有3个主要阶段:

1.ClientHello/ServerHello 阶段.

握手先由客户端向服务器发送一个 ClientHello 请求。这个请求里包含了所有服务器所需要的信息,比如客户端所支持的SSL/TLS加密算法的版本。之后服务器回发一个 SeverHello的请求,这个请求里有客户端所需要的类似的内容。服务器也会返回他支持的SSL/TLS加密算法的版本。

2.证书互换阶段.

在连接初始化之后,服务器需要向客户端证明自己的身份。服务器发送自己的SSL证书给客户,客户端检查其证书是否可信并决定是否与其继续保持会话连接。

3.密钥互换阶段.

上面步骤结束之后服务器端和客户端之间安全隧道就建立成功了,此时他们互换密钥。次密钥用来进行对数据的加密以及解密。

攻击思路

我之前脑洞一开想到了这个攻击思路: 假如我们用在WAF上所谓的 “不支持的”SSL 加密方式(但Web服务器支持)去对Web服务器进行初始化连接,由于WAF不支持解密所以看不见数据包里面的数据,就能达到绕过的效果。

所以之后我开始对这家WAF厂商的技术文档进行了深入研究。我从中找到了如下所有支持的SSL 加密方式。

SSLv3

SSL_RSA_WITH_NULL_MD5

SSL_RSA_WITH_NULL_SHA

SSL_RSA_WITH_RC4_128_MD5

SSL_RSA_WITH_RC4_128_SHA

SSL_RSA_WITH_DES_CBC_SHA

SSL_RSA_WITH_3DES_EDE_CBC_SHA

SSL_RSA_EXPORT_WITH_RC4_40_MD5

SSL_RSA_EXPORT_WITH_DES40_CBC_SHA

TLS/1.0-1.2

TLS_RSA_WITH_NULL_SHA256

TLS_RSA_WITH_AES_128_CBC_SHA

TLS_RSA_WITH_AES_256_CBC_SHA

TLS_RSA_EXPORT1024_WITH_RC4_56_MD5

TLS_RSA_EXPORT1024_WITH_RC4_56_SHA

TLS_RSA_WITH_AES_128_CBC_SHA256

TLS_RSA_WITH_AES_256_CBC_SHA256

TLS_RSA_WITH_RC4_128_MD5 = { 0x000x04 }

TLS_RSA_WITH_RC4_128_SHA = { 0x000x05 }

TLS_RSA_WITH_DES_CBC_SHA = { 0x000x09 }

下一步我们看下网站服务器支持什么类型的 SSL加密。

我们这时候有很多办法去查看服务器支持那些加密算法。我这使用的是sslscan,这东西用起来方便而且扫出来的细节信息也多。

上面的命令用来显示所有web服务器支持的 SSL/TLS的版本以及加密方式。

现在我们利用技术文档和扫描结果进行对比,我发现一些WAF不支持但是服务器支持的加密算法。

例如: Accepted TLSv1 256 bits ECDHE-RSA-AES256-SHA

上面这个加密算法就是其中一个

为了测试我的推论,我在WAF上开了一条禁止所有访问 /ssl-cipher-test目录的请求。

理论上访问这个路径会被防火墙拒绝连接。

具体化客户端ssl加密算法只用那个防火墙不支持的算法,就是一个快速利用绕过的办法。

你可以在 curl 里使用--ciphers来具体化加密方式, 这里我只用 ECDHE-RSA-AES256-SHA 加密.

从回显来看我们已经成功的绕过了WAF。

提要

我们原计划在发这篇文章之前要开发一个扫描所有支持SSL加密方式的扫描器来找到能绕过防火墙的加密算法。然后用开一个代理来转发所有用那个加密算法加密的流量。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180705B19XUG00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券