使用真实攻击对云WAF进行测试

北京知名皮炎医院 http://m.39.net/disease/a_9506104.html

许多团队认为在实现Web应用程序时,使用Web应用程序防火墙(WAF)是一种最佳实践或法律合规要求。所有防火墙都用于控制和监视流量。WAF是一种特定的防火墙,用于识别和防止来自web应用程序流量的攻击。WAF能防止针对web应用程序的命令注入攻击、跨站点脚本攻击、协议冲突和其他常见攻击。

云WAF在阻止常见的web应用程序攻击方面有什么好处吗?我们决定找出答案,结果令人惊讶。

在过去,WAF是保护内部应用程序的物理设备。今天,越来越多的应用程序在云中,它们使用云中提供的WAF进行保护。云服务商商提供了一系列WAF产品。它们还提供自己的内部WAF,这些WAF与各自的负载平衡器集成得很好。他们的安全性能是否达到顶级产品的水平?

根据魔力象限发布的客户评论,一位软件工程师认为AWSWAF是“WEB防御最好的产品”。另一位专家称之为“正是我们需要的”。至于Azure,评论似乎更为复杂。尽管许多架构师认为它“易于实现和使用”,但多数人认为它“仍然落后于专用设备”。

对于一个安全解决方案,有效性的主要衡量标准应该是保护应用程序的能力。云WAF在阻止常见的web应用程序攻击方面有什么好处吗?我们决定找出答案,结果令人惊讶。

测试设置

我们在AWS和Azure中构建了一个测试环境,将云WAF放入测试中。我们的设置包括以下内容:

l攻击者的主机向特定目标web主机执行数千个脚本化测试用例。进行HTTPGET注入及压力测试。

l在云容器平台中运行容器化自定义web服务器的目标web主机-AWS弹性容器服务ECS或Azure容器实例ACI。此web服务器用HTTP响应代码“OK”响应所有传入的HTTP请求。

l一个支持WAF的云负载平衡器(AWS弹性负载平衡器ELB或AzureWeb应用程序网关)位于目标Web主机前面。

l梭子鱼WAF从AzureMarketplace提供,将流量定向到AzureACI上的目标web主机。

在选择产品时,我们希望将AWS和Azure内部解决方案与在云中作为托管服务提供的商业产品进行比较。为测试选择的服务如下:

lAzure应用网关WAF,使用来自OpenWeb应用程序安全项目(OWASP)的CRS3.1规则

l梭子鱼(Barracuda)WAF-as-a-Service(WaaS),使用梭子鱼管理的规则由AzureMarketplace提供

l使用Amazon托管规则的AWSWAF

l使用Fortinet管理规则的AWSWAF

l使用Azure云时,总体测试架构如下所示。在AWS云上构建了一个相同的设置。

测试梭鱼WAF-as-a-service需要另一个设置。我们在Azure云上设置了该服务,对安装程序实现了最小的更改。

用于在Azure中测试梭子鱼WAF-as-a-service的高级体系结构。

我们在2月19日进行了测试,使用了当天这些服务上可用的托管默认值。为了准确反映使用这些服务的最常见方式,我们没有删除或添加任何可能影响检测或阻止攻击能力的规则或定义。对于AWS管理的规则,必须选择规则组,因为可以同时激活的规则组的数量是有限制的。我们选择了一个组合,我们认为它将最好地覆盖OWASP的前10个威胁,并提供对我们的测试用例的最佳保护。选定的规则组是:

lAWS-AWSManagedRulesSQLiRuleSet

lAWS-AWSManagedRulesLinuxRuleSet

lAWS-AWSManagedRulesKnownBadInputsRuleSet

lAWS-AWSManagedRulesCommonRuleSet

lAWS-AWSManagedRulesPHPRuleSet

lAWS-AWSManagedRulesAdminProtectionRuleSet

测试用例

为了测试WAF,我们收集了一些真实的攻击和规避。我们正在通过HTTP对一个自定义web服务器发起这些攻击,该服务器跟踪通过WAF的请求。

测试用例包含了以下用于报告结果的组(解释改编自owasp.org):

l命令执行。通过注入应用程序的命令可用于危害系统。

l服务器端包括(SSI)注入。SSI是Web应用程序上的指令,用于向HTML页面提供动态内容。服务器端Includes攻击允许通过在HTML页面中注入脚本或远程执行任意代码来利用web应用程序。

lSQL注入。攻击包括通过从客户端到应用程序的数据输入或“注入”SQL查询。

l路径遍历。路径遍历攻击(也称为目录遍历)旨在访问存储在web根文件夹之外的文件和目录。

lXML文档格式不正确。格式错误的文档可用于消耗资源或插入恶意命令。

此测试集合表示针对网站的典型攻击。测试用例的目的不是表示业务逻辑弱点或任何其它漏洞,在这些弱点中,特定的应用程序逻辑会被恶意利用。

试验结果

试验结果见下表。

跨站点脚本(XSS)。跨站点脚本(XSS)攻击是一种注入类型,其中恶意脚本通过web浏览器从恶意网站注入其它良性和可信的网站。

此测试集合表示针对网站的典型攻击。测试用例的目的不是表示业务逻辑弱点或任何其他漏洞,在这些弱点中,特定的应用程序逻辑会被恶意利用。

结果显示安全性能有了很大的提高。使用CRS3.1规则的AzureWAF比其他服务有更好的性能。它也是唯一在我们的测试用例集中稳定执行的测试服务。

有趣的是,无论是否使用URL字符编码,WAFS的安全性能都是不同的。在一些测试用例中,差异是显著的。例如,梭子鱼阻止了所有未编码的SSI测试用例,并且有一半是在编码时阻止的。从攻击者的角度来看,尝试不同的编码是逃避WAF保护的有效方法。我们将在以后的帖子中对此进行更深入的研究。

除了在使用我们的测试集时比较服务的相对性能之外,这些结果不打算在任何其他上下文中解释。

实例

lAWS管理的WAF是所选WAF服务中最允许的服务之一,允许通过以下攻击负载:

lGET请求中的命令执行:echo“?phpsystem($_GET[‘cmd’]);?”cmd.php

l简单的SQLi负载:UNIONALLSELECT

VERSION,USER(),SLEEP(5)--

lAWS中的Fortinet管理的WAF和Azure中的梭子鱼WAF-as-a-Service也支持这两个例子。

从有效载荷和被拒绝的响应来看,很难对WAF的内部工作得出许多结论。有时,这种行为会让人完全困惑和搞笑,例如:

lAWS管理的WAF处理POST和GET请求的方式似乎完全不同。以下请求在GET请求中被阻止,并在POST请求的主体中被允许:%2e%2e//etc/passwd

lAWS管理的WAF会阻止有效载荷ls-l/var/


转载请注明:http://www.aierlanlan.com/rzdk/5269.html