ModSecurity规则防御Log4Shell漏洞实战指南

本文详细介绍了针对CVE-2021-44228/LogJam/Log4Shell漏洞的ModSecurity防护规则,包含两个阶段的过滤规则配置,可有效拦截jndi恶意请求,为系统修复争取宝贵时间。

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

作为一个快速解决方案,我的一个朋友制作了一个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天的保护,为您争取更多时间。到周一为止,您应该已经为所有面向互联网的系统完成了这项工作——这就是我们大多数人在周末工作的原因。

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