Web 应用程序防火墙 (WAF)

Web 应用程序防火墙 (WAF) 是应用程序网关的功能,可以对 Web 应用程序进行集中保护,避免其受到常见的攻击和漏洞伤害。

Web 应用程序已逐渐成为利用常见已知漏洞的恶意攻击的目标。 在这些攻击中,常见的攻击包括 SQL 注入攻击、跨站点脚本攻击等。

防止应用程序代码遭受此类攻击颇具挑战性,并且可能需要对应用程序拓扑的多个层进行严格的维护、修补和监视。 集中式 Web 应用程序防火墙有助于大幅简化安全管理,为抵卸威胁或入侵的应用程序管理员提供更好的保障。 相较保护每个单独的 Web 应用程序,WAF 解决方案还可通过在中央位置修补已知漏洞,更快地响应安全威胁。 可将现有应用程序网关轻松转换为支持 Web 应用程序防火墙的应用程序网关。

WAF 基于 OWASP 核心规则集 3.0 或 2.2.9 中的规则。 它会自动更新以包含针对新漏洞的保护,而无需其他配置。

imageURLroute

应用程序网关可作为应用程序传送控制器 (ADC) 运行,并提供 SSL 终止、基于 Cookie 的会话相关性、轮循负载分发、基于内容的路由,以及托管多个网站和安全增强功能的能力。

应用程序网关提供的安全增强功能包括 SSL 策略管理和端到端 SSL 支持。 通过直接集成到 ADC 产品的 WAF(Web 应用程序防火墙),应用程序的安全性现已得到增强。 这提供了易于配置的中央位置,可用于管理和保护 Web 应用程序,使其免受常见 Web 漏洞的威胁。

优点

下面是应用程序网关和 Web 应用程序防火墙提供的核心优势:

保护

  • 无需修改后端代码即可保护 Web 应用程序免受 Web 漏洞和攻击的威胁。

  • 在应用程序网关背后同时保护多个 Web 应用程序。 应用程序网关支持在单个网关背后托管最多 20 个网站,并使用 WAF 防止所有这些网站受到 Web 攻击的威胁。

监视

  • 使用实时 WAF 日志监视 Web 应用程序受到的攻击。 此日志与 Azure Monitor 集成,让你跟踪 WAF 警报和日志并轻松监视趋势。

  • WAF 已与 Azure 安全中心集成。 使用 Azure 安全中心可在一个中心位置查看所有 Azure 资源的安全状态。

自定义

  • 可根据应用程序的要求自定义 WAF 规则和规则组,并消除误报。

功能

  • SQL 注入保护
  • 跨站点脚本保护
  • 常见 Web 攻击保护,例如命令注入、HTTP 请求走私、HTTP 响应拆分和远程文件包含攻击
  • 防止 HTTP 协议违反行为
  • 防止 HTTP 协议异常行为(例如缺少主机用户代理和接受标头)
  • 防止自动程序、爬网程序和扫描程序
  • 检测常见应用程序错误配置(例如 Apache、IIS 等的错误配置)
  • 请求大小限制 - Web 应用程序防火墙允许用户在下限和上限内配置请求大小限制。
  • 排除列表 - WAF 排除列表允许用户忽略 WAF 评估中的某些请求属性。 常见示例是 Active Directory 插入的令牌,这些令牌用于身份验证或密码字段。

核心规则集

应用程序网关支持两个规则集:CRS 3.0 和 CRS 2.2.9。 这些核心规则集是防范 Web 应用程序中的恶意活动的规则集合。

Web 应用程序防火墙中默认已预先配置 CRS 3.0,你也可以选择使用版本 2.2.9。 与版本 2.2.9 相比,CRS 3.0 的误报数更少。 提供根据需求自定义规则的功能。 Web 应用程序防火墙防范的某些常见 Web 安全漏洞包括:

  • SQL 注入保护
  • 跨站点脚本保护
  • 常见 Web 攻击保护,例如命令注入、HTTP 请求走私、HTTP 响应拆分和远程文件包含攻击
  • 防止 HTTP 协议违反行为
  • 防止 HTTP 协议异常行为(例如缺少主机用户代理和接受标头)
  • 防止自动程序、爬网程序和扫描程序
  • 检测常见应用程序错误配置(例如 Apache、IIS 等的错误配置)

有关规则及其保护措施的更详细列表,请参阅核心规则集

OWASP_3.0

如下表中所示,提供的 3.0 核心规则集包含 13 个规则组。 每个规则组包含多个可以禁用的规则。

RuleGroup 说明
REQUEST-911-METHOD-ENFORCEMENT 包含用于锁定方法(PUT、PATCH)的规则
REQUEST-913-SCANNER-DETECTION 包含用于防范端口和环境扫描程序的规则。
REQUEST-920-PROTOCOL-ENFORCEMENT 包含用于防范协议和编码问题的规则。
REQUEST-921-PROTOCOL-ATTACK 包含用于防范标头注入、请求走私和响应拆分的规则
REQUEST-930-APPLICATION-ATTACK-LFI 包含用于防范文件和路径攻击的规则。
REQUEST-931-APPLICATION-ATTACK-RFI 包含用于防范远程文件包含 (RFI) 的规则
REQUEST-932-APPLICATION-ATTACK-RCE 包含用于防范远程代码执行的规则。
REQUEST-933-APPLICATION-ATTACK-PHP 包含用于防范 PHP 注入攻击的规则。
REQUEST-941-APPLICATION-ATTACK-XSS 包含用于防范跨站点脚本的规则。
REQUEST-942-APPLICATION-ATTACK-SQLI 包含用于防范 SQL 注入攻击的规则。
REQUEST-943-APPLICATION-ATTACK-SESSION-FIXATION 包含用于防范会话固定攻击的规则。

OWASP_2.2.9

如下表中所示,提供的 2.2.9 核心规则集包含 10 个规则组。 每个规则组包含多个可以禁用的规则。

RuleGroup 说明
crs_20_protocol_violations 包含用于防范协议冲突(无效字符、使用请求正文执行 GET 等等)的规则。
crs_21_protocol_anomalies 包含用于防范错误标头信息的规则。
crs_23_request_limits 包含用于防范参数或文件超出限制的规则。
crs_30_http_policy 包含用于防范受限方法、标头和文件类型的规则。
crs_35_bad_robots 包含用于防范 Web 爬网程序和扫描程序的规则。
crs_40_generic_attacks 包含用于防范普通攻击(会话固定、远程文件包含、PHP 注入等等)的规则。
crs_41_sql_injection_attacks 包含用于防范 SQL 注入攻击的规则
crs_41_xss_attacks 包含用于防范跨站点脚本的规则。
crs_42_tight_security 包含用于防范路径遍历攻击的规则
crs_45_trojans 包含用于防范后门特洛伊木马的规则。

WAF 模式

应用程序网关 WAF 可配置为在以下两种模式中运行:

  • 检测模式 - 配置为在检测模式下运行时,应用程序网关 WAF 会监视所有威胁警报并将其记录到日志文件中。 应使用“诊断”部分打开应用程序网关的日志记录诊断。 还需确保已选择并打开 WAF 日志。 在检测模式下运行时,Web 应用程序防火墙不会阻止传入的请求。
  • 阻止模式 - 配置为在阻止模式中运行时,应用程序网关主动阻止其规则检测到的入侵和攻击。 攻击者会收到 403 未授权访问异常,且连接会终止。 阻止模式会继续在 WAF 日志中记录此类攻击。

异常评分模式

OWASP 使用两种模式来确定是否阻止流量: 传统模式和异常评分模式。 在传统模式下,将独立评估与任何规则匹配的流量,无论是否也匹配其他规则。 尽管这种模式更易于理解,但它存在一种限制:不知道特定的请求激发的多少个规则。 针对这种局限,我们引入了异常评分模式,它已成为 OWASP 3.x 中的默认模式。

在异常评分模式下,上一部分所述的某个规则与流量匹配这一事实并不直接意味着将要阻止该流量(假设防火墙处于“阻止”模式)。 规则采用特定的严重性(严重、错误、警告和通知),并根据该严重性增大调用异常评分的请求的数值。 例如,一个匹配的“警告”规则的评分值为 3,而一个匹配的“严重”规则的评分值为 5。

异常评分有一个设置为 5 的阈值,低于该阈值的流量不会删除。 这意味着,单个匹配的“严重”规则就足以让处于“阻止”模式的 Azure WAF 阻止请求(因为根据上一段落所述,“关键”规则会将异常评分增加 5)。 但是,一个“警告”级别的匹配规则只会将异常评分增加 3。 由于 3 仍低于阈值 5,因此不会阻止流量,即使 WAF 处于“阻止”模式。

请注意,当 WAF 规则与流量匹配时记录的消息会包含值为“Blocked”的 action_s 字段,但这不一定意味着真正阻止了流量。 若要真正阻止流量,异常评分必须至少达到 5。

WAF 监视

监视应用程序网关的运行状况非常重要。 借助日志记录以及与 Azure Monitor 的集成,可以监视 Web 应用程序防火墙及其保护的应用程序的运行状况。

诊断

Azure Monitor

每个应用程序网关日志与 Azure Monitor 集成。 这样,你便可以跟踪包括 WAF 警报和日志在内的诊断信息。 门户中“诊断”选项卡上的“应用程序网关”资源中提供了此功能,也可以通过 Azure Monitor 服务直接访问此功能。 若要详细了解如何为应用程序网关启用诊断日志,请参阅应用程序网关诊断

日志记录

应用程序网关 WAF 提供有关检测到的每个威胁的详细报告。 日志记录与 Azure 诊断日志集成,警报以 JSON 格式记录。

imageURLroute

{
  "resourceId": "/SUBSCRIPTIONS/{subscriptionId}/RESOURCEGROUPS/{resourceGroupId}/PROVIDERS/MICROSOFT.NETWORK/APPLICATIONGATEWAYS/{appGatewayName}",
  "operationName": "ApplicationGatewayFirewall",
  "time": "2017-03-20T15:52:09.1494499Z",
  "category": "ApplicationGatewayFirewallLog",
  "properties": {
    "instanceId": "ApplicationGatewayRole_IN_0",
    "clientIp": "104.210.252.3",
    "clientPort": "4835",
    "requestUri": "/?a=%3Cscript%3Ealert(%22Hello%22);%3C/script%3E",
    "ruleSetType": "OWASP",
    "ruleSetVersion": "3.0",
    "ruleId": "941320",
    "message": "Possible XSS Attack Detected - HTML Tag Handler",
    "action": "Blocked",
    "site": "Global",
    "details": {
      "message": "Warning. Pattern match \"<(a|abbr|acronym|address|applet|area|audioscope|b|base|basefront|bdo|bgsound|big|blackface|blink|blockquote|body|bq|br|button|caption|center|cite|code|col|colgroup|comment|dd|del|dfn|dir|div|dl|dt|em|embed|fieldset|fn|font|form|frame|frameset|h1|head|h ...\" at ARGS:a.",
      "data": "Matched Data: <script> found within ARGS:a: <script>alert(\\x22hello\\x22);</script>",
      "file": "rules/REQUEST-941-APPLICATION-ATTACK-XSS.conf",
      "line": "865"
    }
  }
} 

应用程序网关 WAF SKU 定价

Web 应用程序防火墙在新的 WAF SKU 中提供。 此 SKU 仅在 Azure Resource Manager 预配模型中可用,在经典部署模型中不可用。 此外,WAF SKU 仅提供中型和大型应用程序网关实例大小。 应用程序网关的所有限制同样适用于 WAF SKU。

定价基于每小时网关实例费和数据处理费。 WAF SKU 的每小时网关定价不同于标准 SKU 费用,具体请参阅应用程序网关定价详细信息。 数据处理费保持不变。 不会按规则或规则组收费。 可以使用同一个 Web 应用程序防火墙保护多个 Web 应用程序,并且无需为多个应用程序的支持付费。

后续步骤

了解 WAF 后,请参阅如何在应用程序网关上配置 Web 应用程序防火墙