Web 应用程序防火墙 CRS 规则组和规则

出现常见的漏洞和攻击时,应用程序网关 Web 应用程序防火墙 (WAF) 可保护 Web 应用程序。 这种保护是由根据 OWASP 核心规则集 3.2、3.1、3.0 或 2.2.9 定义的规则实现的。 可以逐条禁用规则,也可以按单个规则设置特定操作。 本文包含当前提供的规则和规则集。 对于极少数需要更新已发布规则集的情况,将在此处对其进行介绍。

核心规则集

默认情况下,应用程序网关 WAF 预配置了 CRS 3.2,但你可以选择使用任何其他受支持的 CRS 版本。

与早期版本的 CRS 相比,CRS 3.2 提供了一个新引擎和新规则集来防御 Java 注入、一组初始文件上传检查以及误报更少。 还可以根据需求自定义规则。 详细了解新的 Azure WAF 引擎

管理规则

WAF 可针对以下 Web 漏洞提供保护:

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

CRS 在 WAF 策略的检测模式下默认启用。 可以禁用或启用核心规则集内的各个规则以满足应用程序要求。 还可以根据规则设置特定操作。 CRS 支持块、日志和异常分数操作。 Bot Manager 规则集支持允许、阻止和记录操作。

有时你可能需要忽略 WAF 评估中的某些请求属性。 一个常见的例子是用于身份验证的 Active Directory 插入令牌。 可以将排除项配置为在评估特定 WAF 规则时应用,或全局应用于所有 WAF 规则的评估。 排除规则适用于整个 Web 应用。 有关详细信息,请参阅包含应用程序网关排除列表的 Web 应用程序防火墙 (WAF)

默认情况下,当请求与规则匹配时,CRS 3.2 及更高版本将利用异常评分;默认情况下,CRS 3.1 及更低版本将阻止匹配请求。 此外,如果想要绕过核心规则集中的任何预配置规则,可以在同一 WAF 策略中配置自定义规则。

在评估核心规则集中的规则之前,自定义规则始终适用。 如果请求与某个自定义规则相匹配,将应用相应的规则操作。 请求将被阻止,或通过后端传递。 不会处理任何其他自定义规则或核心规则集中的规则。

异常评分

使用 CRS 时,WAF 默认配置为使用异常评分。 即使 WAF 处于防护模式,也不会立即阻止与任何规则匹配的流量。 相反,OWASP 规则集会为每个规则定义严重性:“严重”、“错误”、“警告”或“通知”。 这些严重性会影响请求的数值,该数值称为异常分数:

规则严重性 对异常分数的贡献值
严重 5
错误 4
警告 3
通知 2

如果异常分数为 5 或更高,并且 WAF 处于预防模式,则会阻止请求。 如果异常分数为 5 或更高,并且 WAF 处于检测模式,则会记录请求,但不会阻止请求。

例如,在预防模式下,一个“严重”规则匹配就足以让 WAF 阻止请求,因为总体异常分数为 5。 但一个“警告”规则匹配仅使异常分数增加 3,而这并不足以阻止流量。 触发异常规则时,它会在日志中显示“匹配”操作。 如果异常分数为 5 或更高,则根据 WAF 策略是处于预防模式还是检测模式,系统会使用“已阻止”或“检测到”操作触发单独的规则。 有关详细信息,请参阅异常评分模式

OWASP CRS 3.2

CRS 3.2 包括下表中所示的 14 个规则组。 每个组包含多个可以禁用的规则。 规则集基于 OWASP CRS 3.2.0 版本。

注意

CRS 3.2 仅在 WAF_v2 SKU 上可用。 由于 CRS 3.2 在新 Azure WAF 引擎上运行,因此无法降级到 CRS 3.1 或更早版本。 如果需要降级,请联系 Azure 支持部门

规则组 说明
常规 常规组
KNOWN-CVES 帮助检测新的和已知的 CVE
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 防范会话固定攻击
REQUEST-944-APPLICATION-ATTACK-JAVA 防范 JAVA 攻击

OWASP CRS 3.1

CRS 3.1 包括下表中所示的 14 个规则组。 每个组包含多个可以禁用的规则。 规则集基于 OWASP CRS 3.1.1 版本。

注意

CRS 3.1 仅在 WAF_v2 SKU 上可用。

规则组 说明
常规 常规组
KNOWN-CVES 帮助检测新的和已知的 CVE
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 防范会话固定攻击
REQUEST-944-APPLICATION-ATTACK-SESSION-JAVA 防范 JAVA 攻击

OWASP CRS 3.0

CRS 3.0 包含下表中所示的 13 个规则组。 每个组包含多个可以禁用的规则。 规则集基于 OWASP CRS 3.0.0 版本。

规则组 说明
常规 常规组
KNOWN-CVES 帮助检测新的和已知的 CVE
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 CRS 2.2.9

CRS 2.2.9 包含下表中所示的 10 个规则组。 每个组包含多个可以禁用的规则。

注意

新的 WAF 策略不再支持 CRS 2.2.9。 我们建议升级到最新的 CRS 版本。

规则组 说明
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 防范后门特洛伊木马

机器人规则

可以启用托管机器人防护规则集,以便针对来自所有机器人类别的请求执行自定义操作。

规则组 说明
BadBots 防范恶意机器人
GoodBots 识别善意机器人
UnknownBots 标识未知机器人

在应用程序网关上使用 Web 应用程序防火墙时可以使用以下规则组和规则。

3.2 规则集

常规

RuleId 说明
200002 未能分析请求正文。
200003 多部分请求正文严格验证。
200004 可能的多部分不匹配边界。

KNOWN-CVES

RuleId 说明
800100 有助于检测和缓解 log4j 漏洞 CVE-2021-44228CVE-2021-45046 的规则
800110 Spring4Shell 交互尝试
800111 尝试使用 Spring Cloud 路由表达式注入 - CVE-2022-22963
800112 尝试使用 Spring Framework 不安全类对象利用 - CVE-2022-22965
800113 尝试 Spring Cloud 网关执行器注入 - CVE-2022-22947

REQUEST-911-METHOD-ENFORCEMENT

RuleId 说明
911100 方法不受策略允许

REQUEST-913-SCANNER-DETECTION

RuleId 说明
913100 找到了与安全扫描程序关联的用户代理
913101 找到了与脚本/通用 HTTP 客户端关联的用户代理
913102 找到了与 Web 爬网程序/bot 关联的用户代理
913110 找到了与安全扫描程序关联的请求标头
913120 找到了与安全扫描程序关联的请求文件名/参数

REQUEST-920-PROTOCOL-ENFORCEMENT

RuleId 说明
920100 无效的 HTTP 请求行
920120 尝试了多部分/表单数据绕过
920121 尝试了多部分/表单数据绕过
920160 Content-Length HTTP 标头不是数字。
920170 包含正文内容的 GET 或 HEAD 请求。
920171 包含 Transfer-Encoding 的 GET 或 HEAD 请求。
920180 POST 请求缺少 Content-Length 标头。
920190 范围:最后一个字节值无效。
920200 范围:字段太多(6 个或以上)
920201 范围:pdf 请求的字段太多(35 个或以上)
920202 范围:pdf 请求的字段太多(6 个或以上)
920210 找到了多个/有冲突的连接标头数据。
920220 URL 编码滥用攻击尝试
920230 检测到多个 URL 编码
920240 URL 编码滥用攻击尝试
920250 UTF8 编码滥用攻击企图
920260 Unicode 全角/半角滥用攻击企图
920270 请求中的字符无效(null 字符)
920271 请求中的字符无效(不可列显的字符)
920272 请求中的字符无效(不属于 ascii 127 下面的可列显字符)
920273 请求中的字符无效(不属于极严格集)
920274 请求标头中的字符无效(不属于极严格集)
920280 请求缺少 Host 标头
920290 Host 标头为空
920300 请求缺少 Accept 标头
920310 请求包含空的 Accept 标头
920311 请求包含空的 Accept 标头
920320 缺少用户代理标头
920330 用户代理标头为空
920340 请求包含内容但缺少 Content-Type 标头
920341 请求包含内容,但需要 Content-Type 标头
920350 Host 标头是数字 IP 地址
920420 请求内容类型不受策略允许
920430 HTTP 协议版本不受策略允许
920440 策略限制了 URL 文件扩展名
920450 策略限制了 HTTP 标头 (%{MATCHED_VAR})
920460 转义字符异常
920470 Content-Type 标头非法
920480 在 content-type 标头中限制字符集参数

REQUEST-921-PROTOCOL-ATTACK

RuleId 说明
921110 HTTP 请求走私攻击
921120 HTTP 响应拆分攻击
921130 HTTP 响应拆分攻击
921140 通过标头展开的 HTTP 标头注入攻击
921150 通过有效负载展开的 HTTP 标头注入攻击(检测到 CR/LF)
921151 通过有效负载展开的 HTTP 标头注入攻击(检测到 CR/LF)
921160 通过有效负载展开的 HTTP 标头注入攻击(检测到 CR/LF 和标头名称)
921170 HTTP 参数污染
921180 HTTP 参数污染 (%{TX.1})

REQUEST-930-APPLICATION-ATTACK-LFI

RuleId 说明
930100 路径遍历攻击 (/../)
930110 路径遍历攻击 (/../)
930120 OS 文件访问企图
930130 受限文件访问企图

REQUEST-931-APPLICATION-ATTACK-RFI

RuleId 说明
931100 可能的远程文件包含 (RFI) 攻击:使用 IP 地址的 URL 参数
931110 可能的远程文件包含 (RFI) 攻击:对 URL 有效负载使用常见 RFI 漏洞参数名
931120 可能的远程文件包含 (RFI) 攻击:在 URL 有效负载中使用尾随问号 (?)
931130 可能的远程文件包含 (RFI) 攻击:域外引用/链接

REQUEST-932-APPLICATION-ATTACK-RCE

RuleId 说明
932100 远程命令执行:Unix 命令注入
932105 远程命令执行:Unix 命令注入
932106 远程命令执行:Unix 命令注入
932110 远程命令执行:Windows 命令注入
932115 远程命令执行:Windows 命令注入
932120 远程命令执行:找到 Windows PowerShell 命令
932130 远程命令执行:找到了 Unix Shell 表达式或 Confluence 漏洞 (CVE-2022-26134) 或 Text4Shell (CVE-2022-42889)
932140 远程命令执行:找到 Windows FOR/IF 命令
932150 远程命令执行:直接 Unix 命令执行
932160 远程命令执行:找到 Unix Shell 代码
932170 远程命令执行:Shellshock (CVE-2014-6271)
932171 远程命令执行:Shellshock (CVE-2014-6271)
932180 受限文件上传企图
932190 远程命令执行:通配符绕过方法尝试

REQUEST-933-APPLICATION-ATTACK-PHP

RuleId 说明
933100 PHP 注入攻击:找到开始/结束标记
933110 PHP 注入攻击:找到 PHP 脚本文件上传
933111 PHP 注入攻击:找到 PHP 脚本文件上传
933120 PHP 注入攻击:找到配置指令
933130 PHP 注入攻击:找到变量
933131 PHP 注入攻击:找到变量
933140 PHP 注入攻击:找到 I/O 流
933150 PHP 注入攻击:找到高风险的 PHP 函数名称
933151 PHP 注入攻击:找到中等风险的 PHP 函数名称
933160 PHP 注入攻击:找到高风险的 PHP 函数调用
933161 PHP 注入攻击:找到低值 PHP 函数调用
933170 PHP 注入攻击:序列化对象注入
933180 PHP 注入攻击:找到可变函数调用
933190 PHP 注入攻击:找到 PHP 结束标记
933200 PHP 注入攻击:检测到包装器方案
933210 PHP 注入攻击:找到可变函数调用

REQUEST-941-APPLICATION-ATTACK-XSS

RuleId 说明
941100 检测到通过 libinjection 展开的 XSS 攻击
941101 检测到通过 libinjection 展开的 XSS 攻击。
此规则检测带有 Referer 标头的请求。
941110 XSS 筛选器 - 类别 1:脚本标记向量
941120 XSS 筛选器 - 类别 2:事件处理程序向量
941130 XSS 筛选器 - 类别 3:属性向量
941140 XSS 筛选器 - 类别 4:Javascript URI 向量
941150 XSS 筛选器 - 类别 5:不允许的 HTML 属性
941160 NoScript XSS InjectionChecker:HTML 注入
941170 NoScript XSS InjectionChecker:属性注入
941180 节点验证器方块列表关键字
941190 使用样式表的 XSS
941200 使用 VML 帧的 XSS
941210 使用经过模糊处理的 JavaScript 或 Text4Shell (CVE-2022-42889) 的 XSS
941220 使用经过模糊处理的 VB Script 的 XSS
941230 使用“embed”标记的 XSS
941240 使用“import”或“implementation”属性的 XSS
941250 IE XSS 筛选器 - 检测到攻击。
941260 使用“meta”标记的 XSS
941270 使用“link”href 的 XSS
941280 使用“base”标记的 XSS
941290 使用“applet”标记的 XSS
941300 使用“object”标记的 XSS
941310 US-ASCII 格式错误编码 XSS 筛选器 - 检测到攻击。
941320 检测到可能的 XSS 攻击 - HTML 标记处理程序
941330 IE XSS 筛选器 - 检测到攻击。
941340 IE XSS 筛选器 - 检测到攻击。
941350 UTF-7 编码 IE XSS - 检测到攻击。
941360 检测到 JavaScript 混淆。

REQUEST-942-APPLICATION-ATTACK-SQLI

RuleId 说明
942100 检测到通过 libinjection 展开的 SQL 注入攻击
942110 SQL 注入攻击:检测到常见注入测试
942120 SQL 注入攻击:检测到 SQL 运算符
942130 SQL 注入攻击:检测到 SQL 同义反复。
942140 SQL 注入攻击:检测到常用 DB 名称
942150 SQL 注入攻击
942160 检测到使用 sleep() 或 benchmark() 的盲注 sqli 测试。
942170 检测到包含条件查询的 SQL 基准和休眠注入企图
942180 检测到基本 SQL 身份验证绕过尝试 1/3
942190 检测到 MSSQL 代码执行和信息收集尝试
942200 检测到 MySQL 注释/空间经过模糊处理的注入和反引号终止
942210 检测链式 SQL 注入尝试次数 1/2
942220 查找整数溢出攻击,这些攻击来自 skipfish,但 3.0.00738585072007e-308 是“幻数”故障
942230 检测到条件 SQL 注入企图
942240 检测 MySQL 字符集开关和 MSSQL DoS 尝试
942250 检测 MATCH AGAINST、MERGE 和 EXECUTE IMMEDIATE 注入
942251 检测 HAVING 注入
942260 检测到基本 SQL 身份验证绕过尝试 2/3
942270 正在查找基本 sql 注入。 针对 mysql、oracle 和其他系统的常见攻击字符串。
942280 检测 Postgres pg_sleep 注入、waitfor 延迟攻击和数据库关闭尝试
942290 查找基本 MongoDB SQL 注入企图
942300 检测到 MySQL 注释、条件和 ch(a)r 注入
942310 检测链式 SQL 注入尝试次数 2/2
942320 检测 MySQL 和 PostgreSQL 存储过程/函数注入
942330 检测到经典 SQL 注入探测 1/2
942340 检测到基本 SQL 身份验证绕过尝试 3/3
942350 检测 MySQL UDF 注入和其他数据/结构操作企图
942360 检测到连接的基本 SQL 注入和 SQLLFI 尝试
942361 检测基于关键字 alter 或 union 的基本 SQL 注入
942370 检测到经典 SQL 注入探测 2/2
942380 SQL 注入攻击
942390 SQL 注入攻击
942400 SQL 注入攻击
942410 SQL 注入攻击
942420 受限 SQL 字符异常情况检测 (cookie):已超出特殊字符数 (8)
942421 受限 SQL 字符异常情况检测 (cookie):已超出特殊字符数 (3)
942430 受限 SQL 字符异常情况检测 (args):已超出特殊字符数 (12)
942431 受限 SQL 字符异常情况检测 (args):已超出特殊字符数 (6)
942432 受限 SQL 字符异常情况检测 (args):已超出特殊字符数 (2)
942440 检测到 SQL 注释序列。
942450 识别到 SQL 十六进制编码
942460 元字符异常检测警报 - 重复的非单词字符
942470 SQL 注入攻击
942480 SQL 注入攻击
942490 检测经典 SQL 注入探测 3/3
942500 检测到 MySQL 内联注释。

REQUEST-943-APPLICATION-ATTACK-SESSION-FIXATION

RuleId 说明
943100 可能的会话固定攻击:在 HTML 中设置 Cookie 值
943110 可能的会话固定攻击:包含域外引用方的 SessionID 参数名称
943120 可能的会话固定攻击:不包含引用方的 SessionID 参数名称

REQUEST-944-APPLICATION-ATTACK-JAVA

RuleId 说明
944100 远程命令执行:Apache Struts、Oracle WebLogic
944110 检测潜在的有效负载执行
944120 可能的有效负载执行和远程命令执行
944130 可疑的 Java 类
944200 利用 Java 反序列化 Apache Commons
944210 可能使用 Java 序列化
944240 远程命令执行:Java 序列化
944250 远程命令执行:检测到可疑的 Java 方法
944300 Base64 编码的字符串匹配可疑关键字

后续步骤