Web 应用程序防火墙 (WAF)

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

Web 应用程序防火墙基于 OWASP 核心规则集 3.0 或 2.2.9 中的规则。 Web 应用程序已逐渐成为利用常见已知漏洞的恶意攻击的目标。 这些攻击中最常见的攻击包括 SQL 注入攻击、跨站点脚本攻击等。 防止应用程序代码遭受此类攻击颇具挑战性,并且可能需要对应用程序拓扑的多个层进行严格的维护、修补和监视。 集中式 Web 应用程序防火墙有助于大幅简化安全管理,为抵卸威胁或入侵的应用程序管理员提供更好的保障。 相较保护每个单独的 Web 应用程序,WAF 解决方案还可通过在中央位置修补已知漏洞,更快地响应安全威胁。 可将现有应用程序网关轻松转换为支持 Web 应用程序防火墙的应用程序网关。

imageURLroute

应用程序网关可作为应用程序传送控制器运行,并提供 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 规则和规则组,并消除误报。

功能

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

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

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

核心规则集

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

OWASP_3.0

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

RuleGroup 说明
REQUEST-910-IP-REPUTATION 包含用于防范已知垃圾邮件制造者或恶意活动的规则。
REQUEST-911-METHOD-ENFORCEMENT 包含用于锁定方法(PUT、PATCH< 等)的规则。
REQUEST-912-DOS-PROTECTION 包含用于防范拒绝服务 (DoS) 攻击的规则。
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 日志中记录此类攻击。

WAF 监视

监视应用程序网关的运行状况非常重要。 借助日志记录以及与 Azure Monitor、Azure 安全中心(即将推出)和 Log Analytics 的集成,可以监视 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 的计费方式从 2017 年 5 月 5 日开始生效,在此之前,WAF SKU 网关继续按标准费率计费。

后续步骤

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