ModSecurity OWASP核心规则集的两种配置模式
字数 1798 2025-08-15 21:31:17
ModSecurity OWASP核心规则集配置模式详解
1. OWASP核心规则集概述
OWASP核心规则集(CRS)是ModSecurity的规则集合,用于保护Web应用程序免受各种攻击。官方GitHub地址: https://github.com/coreruleset/coreruleset
2. 两种配置模式
OWASP V3版本核心规则集支持两种配置模式:
2.1 异常评分模式(Anomaly Scoring Mode)
-
默认模式,也称为"协同检测模式"
-
工作方式:
- 检测到威胁时不会直接阻断请求
- 继续向下进行规则匹配
- 每个匹配成功的规则都会增加"异常分数"
- 请求数据检测结束时和返回数据检测结束时,都会对异常分数总和进行判断
- 如果分数大于设置的阈值,则进行阻断并返回403代码
- 审计日志记录所有匹配成功的规则信息
-
优点:
- 误报率相对较低
- 提供更全面的攻击信息
-
缺点:
- 高并发情况下效率较低
- 服务器资源占用较高
2.2 独自控制模式(Self-Contained Mode)
-
V2版本规则集的默认模式
-
工作方式:
- 只要有一条规则匹配成功,立即拦截访问
- 审计日志只记录第一次检测到威胁的规则信息
-
优点:
- 高并发情况下效率较高
- 服务器资源占用较小
- 可以配置自定义拦截提示页面
-
缺点:
- 误报率相对较高
3. 配置方法
配置在crs-setup.conf文件中进行:
3.1 异常评分模式配置
SecDefaultAction "phase:1,log,auditlog,pass"
SecDefaultAction "phase:2,log,auditlog,pass"
- 使用
pass关键字表示检测到威胁后继续下一规则的匹配 log: 记录错误日志(通常记录在WEB服务的错误日志文件中)auditlog: 记录审计日志(保存请求的详细信息)- 可删除
log或auditlog关键词来取消相应日志记录
3.2 独自控制模式配置
SecDefaultAction "phase:1,log,auditlog,deny,status:403"
SecDefaultAction "phase:2,log,auditlog,deny,status:403"
- 使用
deny关键字表示检测到威胁立即阻断 status:403: 返回403错误代码- 可配置自定义拦截提示页面(参考: http://modsecurity.cn/practice/post/8.html)
4. 审计日志对比
4.1 异常评分模式日志特点
- 记录所有匹配成功的规则
- 示例日志会显示多个规则ID(如941100、941110、941160等)
- 最终由949110规则判断总分是否超过阈值
4.2 独自控制模式日志特点
- 只记录第一个匹配成功的规则
- 示例日志只显示一个规则ID(如941100)
5. 拦截流程详解(异常评分模式)
5.1 初始化规则
在REQUEST-901-INITIALIZATION.conf中:
SecRule &TX:inbound_anomaly_score_threshold "@eq 0" \
"id:901100,\
phase:1,\
pass,\
nolog,\
setvar:'tx.inbound_anomaly_score_threshold=5'"
SecRule &TX:paranoia_level "@eq 0" \
"id:901120,\
phase:1,\
pass,\
nolog,\
setvar:'tx.paranoia_level=1'"
SecRule &TX:critical_anomaly_score "@eq 0" \
"id:901140,\
phase:1,\
pass,\
nolog,\
setvar:'tx.critical_anomaly_score=5'"
- 初始化三个变量:
tx.inbound_anomaly_score_threshold=5(阻断阈值)tx.paranoia_level=1(检测严格级别)tx.critical_anomaly_score=5(严重异常分数)
5.2 攻击检测规则
在REQUEST-941-APPLICATION-ATTACK-XSS.conf中:
SecRule REQUEST_COOKIES|!REQUEST_COOKIES:/__utm/|REQUEST_COOKIES_NAMES|REQUEST_HEADERS:User-Agent|ARGS_NAMES|ARGS|XML:/* "@detectXSS" \
"id:941100,\
phase:2,\
block,\
t:none,t:utf8toUnicode,t:urlDecodeUni,t:htmlEntityDecode,t:jsDecode,t:cssDecode,t:removeNulls,\
msg:'XSS Attack Detected via libinjection',\
logdata:'Matched Data: XSS data found within %{MATCHED_VAR_NAME}: %{MATCHED_VAR}',\
tag:'application-multi',\
tag:'language-multi',\
tag:'platform-multi',\
tag:'attack-xss',\
tag:'paranoia-level/1',\
tag:'OWASP_CRS',\
tag:'OWASP_CRS/WEB_ATTACK/XSS',\
tag:'WASCTC/WASC-8',\
tag:'WASCTC/WASC-22',\
tag:'OWASP_TOP_10/A3',\
tag:'OWASP_AppSensor/IE1',\
tag:'CAPEC-242',\
ctl:auditLogParts=+E,\
ver:'OWASP_CRS/3.2.0',\
severity:'CRITICAL',\
setvar:'tx.xss_score=+%{tx.critical_anomaly_score}',\
setvar:'tx.anomaly_score_pl1=+%{tx.critical_anomaly_score}'"
- 每次匹配成功都会通过
setvar增加分数:tx.anomaly_score_pl1=+%{tx.critical_anomaly_score}(每次加5)- 匹配三次后
tx.anomaly_score_pl1变为15
5.3 阻断评估规则
在REQUEST-949-BLOCKING-EVALUATION.conf中:
SecRule TX:PARANOIA_LEVEL "@ge 1" \
"id:949060,\
phase:2,\
pass,\
t:none,\
nolog,\
setvar:'tx.anomaly_score=+%{tx.anomaly_score_pl1}'"
SecRule TX:ANOMALY_SCORE "@ge %{tx.inbound_anomaly_score_threshold}" \
"id:949110,\
phase:2,\
deny,\
t:none,\
log,\
msg:'Inbound Anomaly Score Exceeded (Total Score: %{TX.ANOMALY_SCORE})',\
tag:'application-multi',\
tag:'language-multi',\
tag:'platform-multi',\
tag:'attack-generic',\
severity:'CRITICAL',\
setvar:'tx.inbound_anomaly_score=%{tx.anomaly_score}'"
- 规则949060: 将
tx.anomaly_score_pl1的值赋给tx.anomaly_score - 规则949110: 比较
tx.anomaly_score和tx.inbound_anomaly_score_threshold- 15 > 5,条件成立,阻断请求
6. 性能对比
通过DEBUG日志分析:
- 异常评分模式: 执行约340条规则
- 独自控制模式: 执行约282条规则
7. 实际应用建议
- 高并发环境: 建议使用独自控制模式,减少资源消耗
- 需要详细日志: 建议使用异常评分模式,获取更全面的攻击信息
- 误报敏感场景: 建议使用异常评分模式,降低误报率
8. 总结
OWASP核心规则集的两种配置模式各有优缺点,应根据实际应用场景选择合适的模式。异常评分模式提供更全面的防护和日志信息,但资源消耗较大;独自控制模式效率更高,但可能增加误报率。