在2021年12月9日晚间出现了Apache Log4j2 远程代码执行漏洞攻击代码。该漏洞利用无需特殊配置,攻击者利用漏洞使用一段代码就可远程控制受害者服务器。

Apache Log4j2 是一款优秀的 Java 日志框架。该工具重写了 Log4j 框架,并且引入了大量丰富的特性。该日志框架被大量用于业务系统开发,用来记录日志信息。Apache Log4j被全球许多公司使用,几乎所有行业都受到该漏洞影响,包括全球多家知名科技公司、电商网站等,漏洞波及面和危害程度均堪比 2017年的“永恒之蓝”漏洞。

VMware公司在2021年12月10日发布了对 Apache
Log4j 远程代码执行漏洞的响应(CVE-2021-44228、CVE-2021-45046)公告。VMware的许多产品例如vCenter Server、Horizon、NSX等使用了Apache Log4j,会受此次事件影响。关于受到影响的产品和版本以及解决办法,VMware在https://www.vmware.com/security/advisories/VMSA-2021-0028.html中进行了详细的说明。

本文介绍应用最广泛的Horizon及vCenter
Server的补丁修复方法。


1 为VCSA启用bash shell

vCenter Server受到影响的版本是6.5.x、6.7.x和7.x的版本。对于vCenter Server,其6.5.x和6.7.x分别有Windows和预发行的vCenter
Server Appliance(应用于Linux)两个不同平台的版本。而7.x只有预发行的vCenter Server Appliance。本文以vCenter Server Appliance为例。

用于vCenter Server Appliance的补丁下载地址为:

https://kb.vmware.com/sfc/servlet.shepherd/version/download/0685G00000d7ovWQAQ

下载后的文件名为vc_log4j_mitigator.py。

默认情况下,从vCenter Server Appliance 6.5版本开始,使用的是c shell,无法通过SFTP工具上传和下载文件,要将vc_log4j_mitigator.py脚本上传到vCenter Server,需要将默认的c shell改成bash shell即可。

(1)登录vCenter Server
Appliance的设备管理界面(使用浏览器登录https://vCenter的IP地址:5480),在“访问”选项中启用“SSH登录”,如图1所示。

为vCenter和Horizon修补Apache Log4j 远程代码执行漏洞的方法_Horizon

图1 启用SSH登录

(2)使用ssh登录vCenter Server,使用root用户登录vCenter Server 命令行界面。

(3)在command命令界面输入shell。

(4)再次输入命令chsh -s
/bin/bash root,切换至bash,此时就可以使用了。如图2所示。

为vCenter和Horizon修补Apache Log4j 远程代码执行漏洞的方法_Log4j_02

图2 启用bash shell

(5)使用sftp登录vCenter Server,将下载的vc_log4j_mitigator.py脚本上传到/tmp目录中,如图3所示。

为vCenter和Horizon修补Apache Log4j 远程代码执行漏洞的方法_vCenter_03

图3 上传脚本

(6)切换到ssh登录到vCenter Server,执行上传的脚本,命令格式如下:

python /tmp/vc_log4j_mitigator.py

在A service stop and start is required to
complete this operation.  Continue?[y]提示后输入y并按回车键。脚本将会停止vCenter Server服务,然后执行修复程序,如图4所示。

为vCenter和Horizon修补Apache Log4j 远程代码执行漏洞的方法_vc_log4j_mitigator_04

图4 执行脚本

(7)执行该脚本大约需要几分钟的时间(一般3~5分钟,不会超过10分钟),执行完成后如图5所示。

为vCenter和Horizon修补Apache Log4j 远程代码执行漏洞的方法_vc_log4j_mitigator_05

图5 脚本执行完成

(8)要验证不再存在易受攻击的文件,再次执行脚本并使用-r参数:

python /tmp/vc_log4j_mitigator.py -r

显示的易受攻击的文件列表应为零,如图6所示。

为vCenter和Horizon修补Apache Log4j 远程代码执行漏洞的方法_vc_log4j_mitigator_06

图6 检查

(9)如果要将vCenter
Server还原至cshell(Appliance Shell),需要在#提示符后面输入命令

chsh -s /bin/appliancesh

然后退出并关闭ssh程序,登录到vCenter
Server进行验证。

2 Horizon解决办法

Horizon受到影响的版本是Horizon
2111、Horizon 7.13.1和7.10.3的版本。在https://kb.vmware.com/s/article/87073可以下载到修复补丁。补丁文件下载链接为https://kb.vmware.com/sfc/servlet.shepherd/version/download/0685G00000d7RJUQA2,下载后文件名为Horizon_Windows_Log4j_Mitigation.zip。

下载之后,在Windows的Horizon连接服务器、安全服务器,或者安装了Horizon Agent for Windows的模板计算机中,解压缩后,以管理员身份运行该程序,如图7所示。

为vCenter和Horizon修补Apache Log4j 远程代码执行漏洞的方法_Horizon_07

图7 执行脚本

该脚本将执行如下的操作:

(1)该脚本在安装位置下搜索文件名模式为 log4j-core*.jar 的所有 Log4J 库。然后它从 MANIFEST.MF 文件中识别 jar 的版本,如果版本在 2.0.0 到 2.15.0 之间,包括两个,那么它被认为是潜在的易受攻击的。

(2)对于每个潜在易受攻击的 JAR,检查易受攻击的类 (org.apache.logging.log4j.core.lookup.JndiLookup.class) 是否存在于 JAR 中。如果发现易受攻击的类,则将其标记为易受攻击的。

(3)从标记为易受攻击的 JAR 中删除易受攻击的 CLASS 文件。

(4)将标志
-Dlog4j2.formatMsgNoLookups=true 添加到注册表中。

(5)添加了环境变量
LOG4J_FORMAT_MSG_NO_LOOKUPS=true(仅适用于 Agent)。

(6)将原始 Log4J jar 复制到名称为 script.restore 的相同位置

(7)在恢复模式,安装位置下的所有修改过的 jars 将被 script.restore 文件替换。