ModSecurity OWASP 核心规则集 - unicode 误报

ModSecurity OWASP 核心规则集 - unicode 误报

我们运行一些网络服务。

我们将 ModSecurity 与 OWASP 核心规则集一起用于 Apache 网络服务器。

由于西里尔字母和希腊字母,我们在处理希腊语和俄语的请求时遇到了问题。

在 OWASP CRS 规则中,有如下模式

“(^[\”' ´’‘;]+|[\"'´'';]+$)”

在 ModSecurity 日志中,UTF-8 代码单元应该是 unicode 字符。所有 ascii 字母都按应有的方式显示为字符。

例子:

[匹配数据:在 ARGS:q 中找到 \x85 2 \xce\xb7\xce\xbb\xce\xb9\xce\xbf\xcf\x85\xcf\x80\xce:163 45 \xcf\x83\xce\xbf\xcf\x85\xce\xbd\xce\xb9\xce\xbf\xcf\x85 2 \xce\xb7\xce\xbb\xce\xb9\xce\xbf\xcf\x85\xcf\x80\xce\xbf\xce\xbb\xce\xb7]

[模式匹配 "(?i:(?:[\"' \\xc2\\xb4\\xe2\\x80\\x99\\xe2\\x80\\x98]\\\\s*?(x?or|div|like|between|and)\\\\s*?[\\"'\xc2\xb4\xe2\x80\x99\xe2\x80\x98]?\\d)|(?:\\\\x(?:23|27|3d))|(?:^.?[\"' \\xc2\\xb4\\xe2\\x80\\x99\\xe2\\x80\\x98]$)|(?:(?:^[\\"'\xc2\xb4\xe2\x80\x99\xe2\x80\x98\\\\]*?(?:[\\ ..."]

现在我们知道这是由希腊语的一个请求触发的:σουνιου ηλιουπολη(雅典的一条街道)这不是我们的问题。我们可以解决这个问题。

问题是 x80 是字符 ' (e2 80 99) 的一部分,并且 x80 也是希腊字母的一部分,这就是我们得到假阳性的原因。

实际触发的规则:

SecRule REQUEST_COOKIES|!REQUEST_COOKIES:/__utm/|!REQUEST_COOKIES:/_pk_ref/|REQUEST_COOKIES_NAMES|ARGS_NAMES|ARGS|XML:/* "(?i:(?:[\"' ´’‘]\s*?(x?or|div|like|between|and)\s*?[\"'´'']?\d)|(?:\\x(?:23|27|3d))|(?:^.?[\"' ´’‘]$)|(?:(?:^[\"'´''\\]?(?:[\d\"' ´’‘]+|[^\"'´'']+[\"' ´’‘]))+\s*?(?:n?and|x?x?or|div|like|between|and|not|\|\||\&\&)\s*?[\w\"'´''][+&!@(),.-])|(?:[^\w\s]\w+\s?[|-]\s*?[\"' ´’‘]\s*?\w)|(?:@\w+\s+(and|x?or|div|like|between|and)\s*?[\"'´''\d]+)|(?:@[\w-]+\s(and|x?or|div|like|between|and)\s*?[^\w\s])|(?:[^\w\s:]\s*?\d\W+[^\w\s]\s*?[\"'`´''].)|(?:\Winformation_schema|table_name\W))" "phase:2,capture,t:none,t:urlDecodeUni,block,msg:'检测经典 SQL 注入探测 1/2',id:'981242',tag:'OWASP_CRS/WEB_ATTACK/SQL_INJECTION',logdata:'匹配数据:在 %{MATCHED_VAR_NAME} 中找到 %{TX.0}: %{MATCHED_VAR}',严重性:'2',setvar:'tx.msg=%{rule.id}-%{rule.msg}',setvar:tx.sql_injection_score=+1,setvar:tx.anomaly_score=+%{tx.critical_anomaly_score},setvar:'tx.%{tx.msg}-OWASP_CRS/WEB_ATTACK/SQLI-%{matched_var_name}=%{tx.0}'”

为了解决这个问题,我们调整了一些模式,例如[\"' ´’‘] to (\"|'||\xc2\xb4|\xe2\x80\x99|\xe2\x80\x98)因此它与构成字符的 UTF-8 代码单元的实际组合相匹配。我们可以对核心规则集的所有 55 条 SQL 注入规则执行此操作,但这是一项非常耗时的任务。

我们想知道 Apache 或 ModSecurity 的解码是否存在错误配置。我们知道,所有非 ascii 字符和一些 ascii 字符都被网络浏览器使用 % 和 UTF-8 进行 URL 编码。

相关内容