防御Log4Shell漏洞:ModSecurity规则详解与更新

本文详细介绍了针对CVE-2021-44228(Log4Shell)漏洞的ModSecurity防护规则,包含初始版本和改进版本的具体配置,以及规则设计原理和适用场景分析,帮助用户快速部署有效的安全防护措施。

modsecurity规则过滤CVE-2021-44228/LogJam/Log4Shell漏洞[更新]

2021年12月10日

作为一个快速解决方案,我的一个朋友制作了一个modsecurity规则来过滤CVE-2021-44228/LogJam/Log4Shell漏洞,他允许我与大家分享。

初始规则

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
SecRule \
  ARGS|REQUEST_HEADERS|REQUEST_URI|REQUEST_BODY|REQUEST_COOKIES|REQUEST_LINE|QUERY_STRING "jndi:ldap:" \
  "phase:1, \
  id:751001, \
  t:none, \
  deny, \
  status:403, \
  log, \
  auditlog, \
  msg:'Block: CVE-2021-44228 - deny pattern \"jndi:ldap:\"', \
  severity:'5', \
  rev:1, \
  tag:'no_ar'"

新版改进规则

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
SecRule \
  ARGS|REQUEST_HEADERS|REQUEST_URI|REQUEST_BODY|REQUEST_COOKIES|REQUEST_LINE|QUERY_STRING "jndi:ldap:|jndi:dns:|jndi:rmi:|jndi:rni:|\${jndi:" \
  "phase:1, \
  id:751001, \
  t:none, \
  deny, \
  status:403, \
  log, \
  auditlog, \
  msg:'DVT: CVE-2021-44228 - phase 1 - deny known \"jndi:\" pattern', \
  severity:'5', \
  rev:1, \
  tag:'no_ar'"
  
SecRule \
  ARGS|REQUEST_HEADERS|REQUEST_URI|REQUEST_BODY|REQUEST_COOKIES|REQUEST_LINE|QUERY_STRING "jndi:ldap:|jndi:dns:|jndi:rmi:|jndi:rni:|\${jndi:" \
  "phase:2, \
  id:751002, \
  t:none, \
  deny, \
  status:403, \
  log, \
  auditlog, \
  msg:'DVT: CVE-2021-44228 - phase 2 - deny known \"jndi:\" pattern', \
  severity:'5', \
  rev:1, \
  tag:'no_ar'"

评论与讨论

Ali提问:

为什么需要阶段1规则?如果攻击者在POST请求体中发送恶意模式,漏洞不会触发吗?

Robert回复:

我们需要阶段1规则,这样它就能在SAML的shibboleth插件(可能易受攻击)之前运行。但你说得对,如果攻击者适应了,我们需要更多规则——谢谢提醒。

R建议:

是否还应该包含jndi:dns和jndi:rmi?

Jakob指出:

据我所知,这无法阻止这里提到的情况:https://twitter.com/Rezn0k/status/1469523006015750146

Robert回应:

当然,没有什么能阻止那一切。这些规则只是为了在您识别所有易受攻击的系统并打补丁或应用解决方案之前,在前1-2天内保护您,为您争取更多时间。到周一现在,您应该已经为所有面向互联网的系统完成了这项工作——这就是我们大多数人在周末工作的原因。

ps:Citrix为ADC提供的官方WAF规则也存在同样的问题——大多数其他WAF也会如此。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计