博客

WAF 如何缓解漏洞?

Lori MacVittie 缩略图
洛里·麦克维蒂
2017 年 12 月 18 日发布

在我们即将发布的《2018 年应用交付状况》报告中,我们注意到 Web应用防火墙 (WAF) 的使用多年来一直在稳步增长。 这是一件好事,因为如今应用程序是客户和公司数据的门户,而传统的网络层访问控制方法已经不够了。 这是因为,越来越多的恶意行为者将目标对准身份和应用本身,以挖掘数字黄金。

那么 WAF 究竟是如何缓解那些像花园里杂草一样不断出现的漏洞的呢? WAF 使用三种主要方法来检测和防止 Web 攻击:拒绝/允许请求、检查和拒绝以及签名。

让我们逐一探索一下,好吗?

拒绝/允许请求

拒绝/允许请求的方法非常类似于网络防火墙使用的传统门户模型。 根据可用信息,请求将被拒绝或允许。 该信息可能很简单 - 比如 IP 地址 - 也可能更复杂且特定于 HTTP,比如 OPTIONS 或 METHODS。

  • 拒绝/允许列表
    如果您知道恶意行为者来自特定 IP 地址或 IP 地址范围,请阻止他们。 如果您知道某个应用仅被授权接收来自特定 IP 地址或 IP 地址范围的请求,则仅允许这些请求。 这是最简单的保护方法,依赖于一组相当静态的信息:请求应该或不应该来自的 IP 地址/范围。

    如果您正在想,那么,为什么不直接使用网络防火墙来做到这一点呢? 毕竟,这是他们的工作。 在现场,效果很好。 但如果您有需要在公共云中保护的应用程序,这可能不是一个选择。 如果您是我们 2018 年应用交付状况调查中 59% 的受访者之一,已经在 2-6 家不同的云提供商进行了投资,那么您就不能指望各个提供商之间的网络防火墙策略是相同的。 虽然您当然可以在多个云中实施相同的规则,但在 WAF 上实施规则意味着您可以在多个环境中的同一个 WAF 中使用相同的策略。 一致性是安全成功和规模的关键。
  • 限制选项
    HTTP 依赖于一组标头来指示应用平台(和应用程序)用户想要做什么。 例如,HTTP METHODS 可用于 GET、PUT、POST 和 DELETE 资源。 OPTIONS 字段也具有一组受 RFC 限制的值,可被 WAF 轻松控制。 一些漏洞(例如 Optionsbleed)利用了这些字段。 为了消除利用此类漏洞的能力,您可以使用 WAF 将可能的值限制为仅允许应用正确执行所需的值。 在某些情况下,WAF 默认会限制这些值。 例如,BIG-IP ASM(F5 WAF)默认根本不允许 HTTP OPTIONS 方法。

签名

签名是许多不同的安全解决方案中常见的另一种保护方法。 防病毒和反恶意软件服务依赖于签名,使他们能够快速扫描病毒和恶意软件的证据并标记它们。 IPS/IDS 也严重依赖这种方法,WAF 也是如此。 有两种类型的签名:用户定义的签名和供应商管理的签名。

  • 供应商管理
    供应商管理的签名通常保存在由供应商自动维护的“数据库”中。 这包括在可以通过独特的数字签名识别新的漏洞时更新数据库。 WAF 将根据数据库扫描传入请求,如果发现与数据库中的签名匹配,则采取相应措施。 签名可以是纯文本,但通常是模糊字符串的复杂组合,这些字符串代表触发远程执行功能或以其他方式破坏应用平台并提供访问或拒绝服务的恶意代码。
  • 用户定义
    用户定义的特征使操作员能够快速将特征添加到数据库。 此功能对于确保对新漏洞(在许多情况下为零日漏洞)做出快速响应以及缓解尚未发布供应商管理签名的漏洞非常重要。

检查

最后,进行检查以确保对请求(和响应)的完全控制。 对请求的检查允许 WAF 将请求中的信息与已知的好/坏字符串和值进行比较,以确定该请求是恶意的还是合法的。 对于 HTTP应用(意味着当今互联网上的大多数应用程序),这是 WAF 应该提供的最重要的功能。 如果 WAF 不提供可编程检查,您将需要重新考虑该选择。 由于 HTTP 是基于文本且可扩展的,因此实际上没有办法提供可用于检查请求的全面“复选框”选项和方法列表。 很少有 HTTP 标头具有限制选项,因此很难限制其中可以塞入什么和不能塞入什么。 这意味着通常需要进行检查以嗅探出嵌入在标头或有效负载本身中的恶意代码。 有两种使用检查的方式:已知标头和有效载荷。

  • 已知标头
    每个 HTTP 请求都带有一组明确定义的标头。 Host、User-Agent、Content-Type等等几乎无处不在。 每个都只不过是一串文本,具有如此多种组合,以至于很难将值列入允许名单,而必须单独扫描以查找看似恶意的值。 一般来说,WAF 可以非常快速地解析出 HTTP 标头并启用其检查。 它们位于每个请求的开头,已知它们被用来对应用平台发起各种攻击: ApacheKillerOptionsbleedApache Struts是较为知名的漏洞。
  • 有效载荷检查
    有效载荷检查正如其名称所示:它检查整个有效载荷(从第一个字节到最后一个字节),查找已知的字母数字数据组合,以表明试图利用漏洞。 有效负载检查使操作员能够检查自定义 HTTP 标头以及请求正文,以查找恶意活动的特定指标。 这要求 WAF 首先保存请求的全部内容。 这是必要的,因为数据包只能容纳这么多数据,并且如果恶意数据跨越两个数据包,则仅逐个数据包检查的服务可能不会注意到它。 通过检查整个有效负载,WAF 可以确保无论恶意数据出现在何处,都可以将其找出并阻止其到达目标。

WAF 的作用远不止缓解漏洞、保护应用。 许多还包括机器人检测、速率限制、DDoS 预防等。 但 WAF 的核心目的是通过减轻漏洞来保护应用。 虽然通常会提到 SQLi、XSS 和 CSRF,但这些对于目前来说几乎已经是“老生常谈”了。 不法分子已经不再仅仅关注明显的应用程序漏洞,而是开始瞄准平台,因为平台提供了更大的可供挖掘的受害者群体。 平台漏洞(HTTP 及其框架中的漏洞)是日益严重的违规行为源头,而企业级 WAF 提供的保护则可为这些漏洞带来益处。

通过采用传统的拒绝/允许和基于签名的扫描并能够检查完整的请求(和响应),WAF 提供了当今企业所需的保护,从而保证了自身及其客户的安全。