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: 记录审计日志(保存请求的详细信息)
  • 可删除logauditlog关键词来取消相应日志记录

3.2 独自控制模式配置

SecDefaultAction "phase:1,log,auditlog,deny,status:403"
SecDefaultAction "phase:2,log,auditlog,deny,status:403"

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_scoretx.inbound_anomaly_score_threshold
    • 15 > 5,条件成立,阻断请求

6. 性能对比

通过DEBUG日志分析:

  • 异常评分模式: 执行约340条规则
  • 独自控制模式: 执行约282条规则

7. 实际应用建议

  • 高并发环境: 建议使用独自控制模式,减少资源消耗
  • 需要详细日志: 建议使用异常评分模式,获取更全面的攻击信息
  • 误报敏感场景: 建议使用异常评分模式,降低误报率

8. 总结

OWASP核心规则集的两种配置模式各有优缺点,应根据实际应用场景选择合适的模式。异常评分模式提供更全面的防护和日志信息,但资源消耗较大;独自控制模式效率更高,但可能增加误报率。

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 异常评分模式配置 使用 pass 关键字表示检测到威胁后继续下一规则的匹配 log : 记录错误日志(通常记录在WEB服务的错误日志文件中) auditlog : 记录审计日志(保存请求的详细信息) 可删除 log 或 auditlog 关键词来取消相应日志记录 3.2 独自控制模式配置 使用 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 中: 初始化三个变量: tx.inbound_anomaly_score_threshold=5 (阻断阈值) tx.paranoia_level=1 (检测严格级别) tx.critical_anomaly_score=5 (严重异常分数) 5.2 攻击检测规则 在 REQUEST-941-APPLICATION-ATTACK-XSS.conf 中: 每次匹配成功都会通过 setvar 增加分数: tx.anomaly_score_pl1=+%{tx.critical_anomaly_score} (每次加5) 匹配三次后 tx.anomaly_score_pl1 变为15 5.3 阻断评估规则 在 REQUEST-949-BLOCKING-EVALUATION.conf 中: 规则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核心规则集的两种配置模式各有优缺点,应根据实际应用场景选择合适的模式。异常评分模式提供更全面的防护和日志信息,但资源消耗较大;独自控制模式效率更高,但可能增加误报率。