如何打造好用的ModSecurity系列 Part 2
字数 1515 2025-08-09 22:00:49

ModSecurity规则体系深度解析与配置指南

一、ModSecurity规则引擎配置

1.1 核心配置参数

  1. SecRuleEngine

    • On:开启WAF功能
    • Off:关闭WAF功能
    • Detection Only:只检测不阻断
  2. 请求体处理

    • SecRequestBodyAccess:控制是否检测请求体
    • 支持多种格式解析:
      • XML:匹配Content-Type(?:application(?:/soap\+|/)|text/)xml
      • JSON:匹配application/json
      • Multipart:严格格式校验
  3. 响应体处理

    • SecResponseBodyAccess:控制是否检测响应包
  4. 调试与日志

    • SecDebugLogLevel:调试日志级别(建议不要设置过高)
    • SecAuditEngine:审计日志引擎
    • SecAuditLogRelevantStatus:记录特定状态码的事务

1.2 审计日志配置

SecAuditLogParts参数控制审计日志记录内容:

  • A:审计日志头(必须)
  • B:请求头
  • C:请求体(需SecRequestBodyAccess开启)
  • I:替代C部分,不记录上传的文件
  • J:multipart上传文件信息
  • E:中间响应体
  • F:最终响应头
  • H:审计日志追踪
  • K:匹配到的所有规则(V2.5.0+)
  • Z:结尾分界线(必须)

二、ModSecurity规则体系解析

2.1 事务生命周期

  1. 阶段1:请求头处理

    • 验证请求头相关规则
    • 决定如何解析请求体
  2. 阶段2:请求体处理

    • 解析请求体数据
    • 验证请求体相关规则
  3. 阶段3:响应头处理

    • 验证响应头相关规则
  4. 阶段4:响应体处理

    • 解析响应体数据
    • 验证响应体相关规则
  5. 阶段5:日志记录

    • 记录事务信息
    • 包括命中规则和处理方式

2.2 规则分级机制(PL)

  1. 分级原理

    • PL1-PL4四个级别
    • 级别越高,漏报越少但误报越多
    • 默认PL=1
  2. 实现方式

    • 使用skipAfterSecMarker指令
    • 通过规则文件中的位置进行分级
  3. 示例配置

SecRule TX:EXECUTING_PARANOIA_LEVEL "@lt 1" "id:920011,phase:1,pass,nolog,skipAfter:END-REQUEST-920-PROTOCOL-ENFORCEMENT"
# PL1规则
SecRule TX:EXECUTING_PARANOIA_LEVEL "@lt 2" "id:920013,phase:1,pass,nolog,skipAfter:END-REQUEST-920-PROTOCOL-ENFORCEMENT"
# PL2规则
SecMarker "END-REQUEST-920-PROTOCOL-ENFORCEMENT"

2.3 检测模式

2.3.1 自主模式(Self-contained)

  • 特点

    • 命中规则直接拦截
    • 规则间无关联
    • 性能较好但误报率高
  • 配置示例

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

2.3.2 评分模式(Anomaly Scoring) - 默认模式

  • 特点

    • 规则赋予权重分数
    • 累计分数达到阈值才拦截
    • 更灵活但性能消耗较大
  • 配置示例

SecDefaultAction "phase:1,log,auditlog,pass"
SecDefaultAction "phase:2,log,auditlog,pass"

2.4 评分机制详解

  1. 权重初始化
SecAction "
  id:901200,
  phase:1,
  pass,
  t:none,
  nolog,
  setvar:'tx.anomaly_score=0',
  setvar:'tx.sql_injection_score=0',
  setvar:'tx.xss_score=0',
  ..."
  1. 规则严重级别

    • CRITICAL:5分
    • ERROR:4分
    • WARNING:3分
    • NOTICE:2分
  2. 拦截判断

SecRule TX:ANOMALY_SCORE "@ge %{tx.inbound_anomaly_score_threshold}" "
  id:949110,
  phase:2,
  deny,
  t:none,
  msg:'Inbound Anomaly Score Exceeded (Total Score: %{TX.ANOMALY_SCORE})'"
  1. 分数类型
    • 全局分数:tx.anomaly_score
    • 漏洞类型分数:如tx.xss_score
    • PL级别分数:tx.anomaly_score_pl1

三、最佳实践建议

  1. 规则分级

    • 生产环境建议从PL1开始
    • 逐步提高PL级别并监控误报
  2. 评分机制优化

    • 调整权重分数分配
    • 设置合理的拦截阈值
    • 考虑多维度评分(全局+类型+PL)
  3. 性能考量

    • 避免过高的调试日志级别
    • 合理选择审计日志记录内容
    • 根据业务特点选择检测模式
  4. 格式校验

    • 利用严格的multipart解析防御绕过
    • 注意可能导致的误报情况

四、总结

ModSecurity提供了灵活的规则体系,通过:

  • 多阶段事务处理
  • 可配置的规则分级
  • 智能的评分机制
  • 多种检测模式

管理员可以根据实际业务需求,在安全防护和性能消耗之间找到平衡点。建议初次部署时采用评分模式,从低PL级别开始,逐步调整配置参数,最终形成适合自身业务的安全防护方案。

ModSecurity规则体系深度解析与配置指南 一、ModSecurity规则引擎配置 1.1 核心配置参数 SecRuleEngine : On:开启WAF功能 Off:关闭WAF功能 Detection Only:只检测不阻断 请求体处理 : SecRequestBodyAccess :控制是否检测请求体 支持多种格式解析: XML:匹配 Content-Type 为 (?:application(?:/soap\+|/)|text/)xml JSON:匹配 application/json Multipart:严格格式校验 响应体处理 : SecResponseBodyAccess :控制是否检测响应包 调试与日志 : SecDebugLogLevel :调试日志级别(建议不要设置过高) SecAuditEngine :审计日志引擎 SecAuditLogRelevantStatus :记录特定状态码的事务 1.2 审计日志配置 SecAuditLogParts 参数控制审计日志记录内容: A:审计日志头(必须) B:请求头 C:请求体(需 SecRequestBodyAccess 开启) I:替代C部分,不记录上传的文件 J:multipart上传文件信息 E:中间响应体 F:最终响应头 H:审计日志追踪 K:匹配到的所有规则(V2.5.0+) Z:结尾分界线(必须) 二、ModSecurity规则体系解析 2.1 事务生命周期 阶段1 :请求头处理 验证请求头相关规则 决定如何解析请求体 阶段2 :请求体处理 解析请求体数据 验证请求体相关规则 阶段3 :响应头处理 验证响应头相关规则 阶段4 :响应体处理 解析响应体数据 验证响应体相关规则 阶段5 :日志记录 记录事务信息 包括命中规则和处理方式 2.2 规则分级机制(PL) 分级原理 : PL1-PL4四个级别 级别越高,漏报越少但误报越多 默认PL=1 实现方式 : 使用 skipAfter 和 SecMarker 指令 通过规则文件中的位置进行分级 示例配置 : 2.3 检测模式 2.3.1 自主模式(Self-contained) 特点 : 命中规则直接拦截 规则间无关联 性能较好但误报率高 配置示例 : 2.3.2 评分模式(Anomaly Scoring) - 默认模式 特点 : 规则赋予权重分数 累计分数达到阈值才拦截 更灵活但性能消耗较大 配置示例 : 2.4 评分机制详解 权重初始化 : 规则严重级别 : CRITICAL:5分 ERROR:4分 WARNING:3分 NOTICE:2分 拦截判断 : 分数类型 : 全局分数: tx.anomaly_score 漏洞类型分数:如 tx.xss_score PL级别分数: tx.anomaly_score_pl1 等 三、最佳实践建议 规则分级 : 生产环境建议从PL1开始 逐步提高PL级别并监控误报 评分机制优化 : 调整权重分数分配 设置合理的拦截阈值 考虑多维度评分(全局+类型+PL) 性能考量 : 避免过高的调试日志级别 合理选择审计日志记录内容 根据业务特点选择检测模式 格式校验 : 利用严格的multipart解析防御绕过 注意可能导致的误报情况 四、总结 ModSecurity提供了灵活的规则体系,通过: 多阶段事务处理 可配置的规则分级 智能的评分机制 多种检测模式 管理员可以根据实际业务需求,在安全防护和性能消耗之间找到平衡点。建议初次部署时采用评分模式,从低PL级别开始,逐步调整配置参数,最终形成适合自身业务的安全防护方案。