攻击分数流量检测使用机器学习算法对每个请求进行分类,根据请求为恶意请求的可能性分配 1 到 99 的分数。此检测是对 WAF 托管规则 的补充。
托管规则 将请求与已知攻击签名(既定攻击向量的特定模式)进行匹配。它们的误报率非常低。然而,攻击者可以修改已知载荷,例如使用模糊测试技术(一种通过发送经修改输入来发现漏洞的测试技术),从而规避精确的签名匹配。
攻击分数填补了这一空白。您可以使用该分数识别与 WAF 托管规则中任何规则不完全匹配的潜在恶意流量。
为了实现最大程度的保护,Cloudflare 建议您同时使用托管规则和攻击分数。
Cloudflare WAF 提供以下攻击分数字段:
| 字段 | 描述 | 所需套餐 |
|---|---|---|
WAF Attack Score cf.waf.score Number |
1–99 的全局分数,将每个 WAF 攻击向量的分数合并为单个分数。 | Enterprise |
WAF SQLi Attack Score cf.waf.score.sqli Number |
1–99 的分数,对 SQL 注入 ↗(SQLi)攻击向量进行分类。 | Enterprise |
WAF XSS Attack Score cf.waf.score.xss Number |
1–99 的分数,对跨站脚本 ↗(XSS)攻击向量进行分类。 | Enterprise |
WAF RCE Attack Score cf.waf.score.rce Number |
1–99 的分数,对命令注入或远程代码执行 ↗(RCE)攻击向量进行分类。 | Enterprise |
WAF Attack Score Class cf.waf.score.class String |
基于 WAF 攻击分数的当前请求攻击分数类别。 可能的值: attack、likely_attack、likely_clean 和 clean。 |
Business 或以上 |
您可以在自定义规则和速率限制规则的表达式中使用这些字段。数字分数字段的范围为 1 到 99:
- 分数为
1表示该请求几乎肯定是恶意的。 - 分数为
99表示该请求可能是正常的。
分数为 100 表示请求到达了 WAF 攻击分数系统,但系统决定不对其进行评分。
在 Logpush 数据中,分数为 0 表示请求未到达攻击分数阶段——例如,因为先前的规则或防护系统已经缓解了它。值 0 不会出现在 Cloudflare 仪表板中。
全局 WAF Attack Score 由各个攻击分数(例如 SQLi Attack Score 和 XSS Attack Score)通过数学方式推导得出,反映了它们之间的相互依赖关系。但是,全局分数不是各个分数的总和。较低的全局分数通常表示各个分数为中等到偏低,而较高的全局分数则表明各个分数较高。
根据计算出的请求攻击分数,WAF Attack Score Class 字段可以具有以下值之一:
| 仪表板标签 | 字段值 | 描述 |
|---|---|---|
| Attack | attack |
攻击分数介于 1 和 20 之间。 |
| Likely attack | likely_attack |
攻击分数介于 21 和 50 之间。 |
| Likely clean | likely_clean |
攻击分数介于 51 和 80 之间。 |
| Clean | clean |
攻击分数介于 81 和 99 之间。 |
攻击分数为特殊值 100 的请求在 Cloudflare 仪表板中会显示 WAF Attack Score Class 为 Unscored(未评分),但您不能在规则表达式中使用此类别值。
攻击分数会自动检测并解码请求中任何位置(URL、标头和正文)的 Base64、JavaScript(Unicode 转义序列)和 URL 编码内容。
不建议仅根据攻击分数阻止所有低于 50 的流量。Likely attack 范围(分数 21–50)可能包含被错误标记为恶意的合法请求(误报)。如果要根据攻击分数阻止流量,请执行以下操作之一:
-
在表达式中使用更严格的 WAF Attack Score 值。例如,阻止 WAF 攻击分数低于
20或低于15的流量(您可能需要调整确切阈值)。 -
在阻止传入流量时,将较高的 WAF Attack Score 阈值与其他过滤条件结合使用。例如,在表达式中检查特定 URI 路径,或将机器人分数作为条件的一部分。
Enterprise 客户可以创建自定义规则,阻止 WAF Attack Score 小于或等于 20(建议的初始阈值)的请求。例如:
| 字段 | 运算符 | 值 |
|---|---|---|
| WAF Attack Score | less than or equal to(小于或等于) | 20 |
- 等效规则表达式:
cf.waf.score le 20 - 操作:Block
Business 客户必须改用 WAF Attack Score Class(WAF 攻击评分类别) 字段创建自定义规则。例如,使用此字段阻止分数类别为 Attack 的传入请求:
| 字段 | 运算符 | 值 |
|---|---|---|
| WAF Attack Score Class | equals(等于) | Attack |
- 等效规则表达式:
cf.waf.score.class eq "attack" - 操作:Block
监控您创建的规则,尤其是在最初几天,以确保您为流量设置了适当的阈值(或类别)。如有需要,请更新规则。
如果您是 Enterprise 客户,并且创建的规则操作是 Log(记录),请将规则操作更改为更严格的操作,例如 Managed Challenge(托管质询) 或 Block(阻止)。
WAF 攻击分数和 机器人分数 服务于不同目的。攻击分数识别 WAF 托管规则未捕获的攻击变体。机器人分数识别请求是否来自自动化流量。