自动解决方法(推荐)
要使用统一脚本应用 CVE-2021-44228 和 CVE-2021-45046 的变通方法:
1. 下载此知识库附带的脚本 ( vc_log4j_mitigator.py )
2. 使用 SSH 客户端(使用 Putty.exe )登录到 vCSA或任何类似的 SSH 客户端)
3. 使用 WinSCP 将文件传输到 vCenter Server Appliance 上的 /tmp 文件夹
注意:在 WinSCP 工作之前必须启用 bash shell
4. 执行在步骤 1 中复制的脚本:
python vc_log4j_mitigator.py
这将停止所有 vCenter 服务,使用 formatMsgNoLookups 标志更新所有必需的文件,从设备上的所有 jar/war 文件中删除 JndiLookup.class,最后启动所有 vCenter 服务。脚本修改的文件将在脚本运行时报告。
5. 要验证不再存在易受攻击的文件,请使用试运行标志再次执行脚本:
python vc_log4j_mitigator.py -r
易受攻击的文件列表应为零
注意:某些 3rd 方 vSphere Client 插件可能会被检测为易受攻击,即使在之后修复完成。这是因为每次启动客户端时都会重新创建 jar 文件。必须通过将插件修补到未受影响的版本,将其标记为不兼容来解决这些问题,或者通过 vCenter MOB 删除插件。从 vSphere Client 禁用插件将不起作用。
这已在旧版本的Pure Storage HTML 客户端插件 4.3.1 及以下 版本中发现(需要纯登录)。持续标记为易受攻击的文件将是:/usr/lib/vmware-vsphere-ui/server/work/Catalina/localhost/ROOT/eclipse/configuration/org.eclipse.osgi/321/0/.cp/log4j-core -2.11.2.jar。
可选参数
-h, --help 显示此帮助消息并退出
-d dirnames [dirnames ...], --directories dirnames [dirnames ...]
空格分隔的目录列表以
递归检查CVE-2021-44228 易受攻击的 Java档案
文件。
-a, --accept-services-restart 接受服务的重新
启动,而无需
手动提示确认相同
-r, --dryrun 运行脚本并记录易受攻击的文件而不
减轻它们。
使用此选项不会重新启动vCenter 服务。
-b BACKUP_DIR, --backup-dir BACKUP_DIR
指定备份目录存放原始文件。
-l LOG_DIR, --log-dir LOG_DIR
指定存放日志文件的目录。
手动解决方法
VMware 强烈建议使用vc_log4j_mitigator.py脚本而不是这些手动步骤,以避免此过程中出现错误。
要将CVE-2021-44228 和 CVE-2021-45046的变通办法手动应用到 vCenter Server Appliance 7.x 和 6.x,请跳到下面的相关部分并按照那里的完整说明进行操作:
注意:对于vCenter Cloud Gateway,只需要vMon 服务、分析服务和remove_log4j_class.py脚本的步骤。
虚拟监控服务
1. 备份现有的java-wrapper-vmon文件:
cp -rfp /usr/lib/vmware-vmon/java-wrapper-vmon /usr/lib/vmware-vmon/java-wrapper-vmon.bak
2.使用vi等文本编辑器更新java-wrapper-vmon文件:
vi /usr/lib/vmware-vmon/java-wrapper-vmon
3. 在文件的最底部,用 2 个新行替换最后一行。
注意:根据您的环境中运行的 vCenter 版本执行此步骤编号“3”。以下更新(在第 3 步中提到)仅适用于下面列出的 vCenter 版本:
- vCenter 7.0 更新 3、3a、3b
- vCenter 7.0 更新 2、2a、2b、2c、2d
原始
exec $java_start_bin $jvm_dynargs $security_dynargs $original_args
更新的
log4j_arg="-Dlog4j2.formatMsgNoLookups=true"
exec $java_start_bin $jvm_dynargs $log4j_arg $security_dynargs $original_args
注意:以下更新(在第 3 步中提到)仅适用于下面列出的 vCenter 版本:
- vCenter 7.0 GA、7.0.0a、7.0.0b、7.0.0c、7.0.0d
- vCenter 7.0 更新 1、U1a、U1c、U1d
原始
exec $java_start_bin $jvm_dynargs "$@"
更新
log4j_arg="-Dlog4j2.formatMsgNoLookups=true"
exec $java_start_bin $jvm_dynargs $log4j_arg "$@"
4. 确保使用以下命令正确设置文件权限:
chown 根:cis /usr/lib/vmware-vmon/java-wrapper-vmon
chmod 754 /usr/lib/vmware-vmon/java-wrapper-vmon
5.重启vCenter服务
服务控制 --stop --all
服务控制 --start --all
更新管理器服务
1. 备份现有的start.ini文件。
cp -rfp /usr/lib/vmware-updatemgr/bin/jetty/start.ini /usr/lib/vmware-updatemgr/bin/jetty/start.ini.bak
2. 更新 start.ini 文件。
vi /usr/lib/vmware-updatemgr/bin/jetty/start.ini
3. 将以下行添加到文件末尾:
-Dlog4j2.formatMsgNoLookups=true
4. 使用以下命令重新启动 Update Manager Service:
服务控制 --restart vmware-updatemgr
分析服务
现在使用本节末尾的remove_log4j_class.py进行修复。
运行 remove_log4j_class.py 脚本
1. 下载此 KB 附带的脚本 (remove_log4j_class.py)
2. 使用 SSH 客户端(使用 Putty.exe 或任何类似的 SSH 客户端)登录到 vCSA
3. 使用WinSCP将文件传输到 vCenter Server Appliance 上的 /tmp 文件夹
注意:WinSCP需要先开启 bash shell 才能运行4. 执行第一步复制的脚本:python remove_log4j_class.py
该脚本将停止所有 vCenter 服务,继续从设备上的所有 jar 文件中删除 JndiLookup.class,最后启动所有 vCenter 服务。脚本修改的文件将在脚本运行时报告为“易受攻击的文件”。
验证更改
完成所有部分后,请使用以下步骤确认它们是否已成功实施。
1. 验证 vMon 服务是否使用新的-Dlog4j2.formatMsgNoLookups=true参数启动:
ps auxww | grep formatMsgNoLookups
检查进程是否包含 -Dlog4j2.formatMsgNoLookups=true。
2. 验证更新管理器更改显示在以下两个命令的输出中的“系统属性”下:
cd /usr/lib/vmware-updatemgr/bin/jetty/
java -jar
start.jar --list-config
系统属性:
------------------
log4j2.formatMsgNoLookups =真(/usr/lib/vmware-updatemgr/bin/jetty/start.ini)
3. 验证分析服务更改:
grep -i jndilookup /usr/lib/vmware/common-jars/log4j-core-2.8.2.jar | wc -l
注意:这应该返回 0 行。
4. 使用以下命令验证脚本是否成功从所有 java 文件中删除了 JndiLookup.class:
python remove_log4j_class.py -r
易受攻击的文件列表现在应该是空的。
2021-12-18T00:04:38 INFO main:以空运行模式运行
2021-12-18T00:05:04 INFO main :======
摘要======
易受攻击的文件列表:
====== ======================
2021-12-18T00:05:04 信息主要:完成。
虚拟监控服务
1. 备份现有的java-wrapper-vmon文件:
cp -rfp /usr/lib/vmware-vmon/java-wrapper-vmon /usr/lib/vmware-vmon/java-wrapper-vmon.bak
2. 使用vi等文本编辑器更新 java-wrapper-vmon 文件:
vi /usr/lib/vmware-vmon/java-wrapper-vmon
3. 在文件的最底部,用 2 个新行替换最后一行:
原来的
exec $java_start_bin $jvm_dynargs "$@"
更新
log4j_arg="-Dlog4j2.formatMsgNoLookups=true"
exec $java_start_bin $jvm_dynargs $log4j_arg "$@"
4. 重启 vCenter 服务:
服务控制 --stop --all
服务控制 --start --all
注意:如果服务未启动,请确保使用以下命令正确设置文件权限:
- chown 根:cis /usr/lib/vmware-vmon/java-wrapper-vmon
- chmod 754 /usr/lib/vmware-vmon/java-wrapper-vmon
安全令牌服务
注意:这些步骤仅适用于嵌入式 vCenter 和外部 PSC 节点
1. 备份和编辑 vmware-stsd文件:
cp /etc/rc.d/init.d/vmware-stsd /root/vmware-stsd.bak
vi /etc/rc.d/init.d/vmware-stsd
2. 找到标有 start_service() 的部分。在第 266 行附近插入一个新行,就在“ $DAEMON_CLASS start ”之前,带有“ -Dlog4j2.formatMsgNoLookups=true \”,如示例所示:
start_service()
{
perform_pre_startup_actions
本地 retval
JAVA_MEM_ARGS=`/usr/sbin/cloudvm-ram-size -J vmware-stsd`
$JSVC_BIN -procname $SERVICE_NAME \ -home
$JAVA_HOME \
-server \
<snip>
-Dauditlog.dir=/var/log/audit /sso-events \
-Dlog4j2.formatMsgNoLookups=true \
$DAEMON_CLASS start
3、重启vmware-stsd服务:
服务控制 --stop vmware-stsd
服务控制 --start vmware-stsd
身份管理服务
注意:这些步骤仅适用于嵌入式 vCenter 和外部 PSC 节点
1. 备份和编辑 vmware-sts-idmd文件:
cp /etc/rc.d/init.d/vmware-sts-idmd /root/vmware-sts-idmd.bak
vi /etc/rc.d/init.d/vmware-sts-idmd
2. 在“$DEBUG_OPTS\”之前的第 177 行附近插入一个新行,并使用“ -Dlog4j2.formatMsgNoLookups=true \ ”,如示例所示:
$JSVC_BIN -procname $SERVICE_NAME \
-wait 120 \
-server \
<snip>
-Dlog4j.configurationFile=file://$PREFIX/share/config/log4j2.xml \
-Dlog4j2.formatMsgNoLookups=true \
$DEBUG_OPTS \
$DAEMON_CLASS
3、重启vmware-sts-idmd服务:
服务控制 --stop vmware-sts-idmd
服务控制 --start vmware-sts-idmd
分析服务和 CM 服务
现在通过本节末尾的remove_log4j_class.py修复这些问题。
运行 remove_log4j_class.py 脚本
1. 下载此 KB 附带的脚本 (remove_log4j_class.py)
2. 使用 SSH 客户端(使用 Putty.exe 或任何类似的 SSH 客户端)登录到 vCSA
3. 使用WinSCP将文件传输到 vCenter Server Appliance 上的 /tmp 文件夹
注意:WinSCP需要先开启 bash shell 才能运行4. 执行第一步复制的脚本:python remove_log4j_class.py
该脚本将停止所有 vCenter 服务,继续从设备上的所有 jar 文件中删除 JndiLookup.class,最后启动所有 vCenter 服务。脚本修改的文件将在脚本运行时报告为“易受攻击的文件”。
验证更改
完成所有部分后,请使用以下步骤确认它们是否已成功实施。
1. 验证是否使用新的-Dlog4j2.formatMsgNoLookups=true参数启动了 stsd、idmd 和 vMon 控制的服务:
ps auxww | grep formatMsgNoLookups
检查进程是否包含-Dlog4j2.formatMsgNoLookups=true
注意:这也将验证 6.7 U3p 2 中分析服务的解决方法
。验证分析服务更改:
grep -i jndilookup /usr/lib/vmware/common-jars/log4j-core-2.8.2.jar | wc -l
注意:这应该返回 0 行。这不适用于 vCenter 6.7 U3p。
3. 验证 CM Service 更改:
grep -i jndilookup /usr/lib/vmware-cm/lib/log4j-core.jar | wc -l
注意:这应该返回 0 行。
4. 使用以下命令验证脚本是否成功从所有 java 文件中删除了 JndiLookup.class:
python remove_log4j_class.py -r
易受攻击的文件列表现在应该是空的。
2021-12-18T00:04:38 INFO main:以空运行模式运行
2021-12-18T00:05:04 INFO main :======
摘要======
易受攻击的文件列表:
====== ======================
2021-12-18T00:05:04 信息主要:完成。
虚拟监控服务
1.备份现有的java-wrapper-vmon文件
cp -rfp /usr/lib/vmware-vmon/java-wrapper-vmon /usr/lib/vmware-vmon/java-wrapper-vmon.bak
2.用vi等文本编辑器更新java-wrapper-vmon文件
vi /usr/lib/vmware-vmon/java-wrapper-vmon
3. 在文件的最底部,用 2 个新行替换最后一行。
原来的
exec $java_start_bin $jvm_dynargs "$@"
更新
log4j_arg="-Dlog4j2.formatMsgNoLookups=true"
exec $java_start_bin $jvm_dynargs $log4j_arg "$@"
4. 重启 vCenter 服务:
服务控制 --stop --all
服务控制 --start --all
注意:如果服务未启动,请确保使用以下命令正确设置文件权限:
- chown 根:cis /usr/lib/vmware-vmon/java-wrapper-vmon
- chmod 754 /usr/lib/vmware-vmon/java-wrapper-vmon
安全令牌服务
注意:这些步骤仅适用于嵌入式 vCenter 和外部 PSC 节点
1. 备份和编辑 vmware-stsd文件:
cp /etc/rc.d/init.d/vmware-stsd /root/vmware-stsd.bak
vi /etc/rc.d/init.d/vmware-stsd
2. 找到标有 start_service() 的部分。在第 266 行附近插入一个新行,就在“ $DAEMON_CLASS start ”之前,带有“ -Dlog4j2.formatMsgNoLookups=true \”,如示例所示:
start_service()
{
perform_pre_startup_actions
local retval
$JSVC_BIN -procname $SERVICE_NAME \ -home $
JAVA_HOME \
-server \
<snip>
-Dauditlog.dir=/var/log/audit/sso-events \
-Dlog4j2.formatMsgNoLookups=true \
$DAEMON_CLASS开始
3.重启vmware-stsd服务
服务控制 --stop vmware-stsd
服务控制 --start vmware-stsd
身份管理服务
注意:这些步骤仅适用于嵌入式 vCenter 和外部 PSC 节点
1. 备份和编辑 vmware-sts-idmd文件:
cp /etc/rc.d/init.d/vmware-sts-idmd /root/vmware-sts-idmd.bak
vi /etc/rc.d/init.d/vmware-sts-idmd
2. 在“$DEBUG_OPTS\”之前的第 177 行附近插入一个新行,并使用“ -Dlog4j2.formatMsgNoLookups=true \ ”,如示例所示:
$JSVC_BIN -procname $SERVICE_NAME \
-wait 120 \
-server \
<snip>
-Dlog4j.configurationFile=file://$PREFIX/share/config/log4j2.xml \
-Dlog4j2.formatMsgNoLookups=true \
$DEBUG_OPTS \
$DAEMON_CLASS
3、重启vmware-sts-idmd服务:
服务控制 --stop vmware-sts-idmd
服务控制 --start vmware-sts-idmd
PSC 客户服务
注意:这些步骤仅适用于嵌入式 vCenter 和外部 PSC 节点
1. 备份和编辑vmware-psc-client文件
cp -rfp /etc/rc.d/init.d/vmware-psc-client /root/vmware-psc-client.bak
vi /etc/rc.d/init.d/vmware-psc-client
2. 在第 300 行附近插入一个新行,就在“ $DAEMON_CLASS start ”之前,使用“ -Dlog4j2.formatMsgNoLookups=true \ ”,如示例所示:
$JSVC_BIN -procname $SERVICE_NAME \ -home $
JAVA_HOME \
-server \
<snip>
-Djava.io.tmpdir="$CATALINA_BASE/temp" \
-Dlog4j2.formatMsgNoLookups=true \
$DAEMON_CLASS start
3、重启vmware-psc-client服务:
服务控制 --stop vmware-psc-client
服务控制 --start vmware-psc-client
CM服务
现在使用本节末尾的remove_log4j_class.py进行修复。
运行 remove_log4j_class.py 脚本
1. 下载此 KB 附带的脚本 (remove_log4j_class.py)
2. 使用 SSH 客户端(使用 Putty.exe 或任何类似的 SSH 客户端)登录到 vCSA
3. 使用WinSCP将文件传输到 vCenter Server Appliance 上的 /tmp 文件夹
注意:WinSCP需要先开启 bash shell 才能运行4. 执行第一步复制的脚本:python remove_log4j_class.py
该脚本将停止所有 vCenter 服务,继续从设备上的所有 jar 文件中删除 JndiLookup.class,最后启动所有 vCenter 服务。脚本修改的文件将在脚本运行时报告为“易受攻击的文件”。
验证更改
完成所有部分后,请使用以下步骤确认它们是否已成功实施。
1. 验证是否使用新的-Dlog4j2.formatMsgNoLookups=true参数启动了 stsd、idmd、psc-client 和 vMon 控制的服务:
ps auxww | grep formatMsgNoLookups
检查进程是否包含-Dlog4j2.formatMsgNoLookups=true
2.验证CM服务更改:
grep -i jndilookup /usr/lib/vmware-cm/lib/log4j-core.jar | wc -l
注意:这应该返回 0 行。
3. 使用以下命令验证脚本是否成功从所有 java 文件中删除了 JndiLookup.class:
python remove_log4j_class.py -r
易受攻击的文件列表现在应该是空的。
2021-12-18T00:04:38 INFO main:以空运行模式运行
2021-12-18T00:05:04 INFO main :======
摘要======
易受攻击的文件列表:
====== ======================
2021-12-18T00:05:04 信息主要:完成。
vCenter Server Appliance 6.0 U3j 不再受到普遍支持,但由于性能图表服务,它也被确定为易受 CVE-2021-44228 攻击。在 vCenter 6.0 中未验证 remove_log4j_class.py 脚本。请使用以下手动步骤删除类。已确定的缓解步骤如下:
1. 备份并编辑设备上的/usr/lib/vmware-perfcharts/wrapper/conf/wrapper.conf并在“ wrapper.java.additional.13=-Dlog4j.configurationFile=file:/etc ”下方添加一个新行/vmware-perfcharts/log4j2.xml ”(第 72 行),内容如下:
wrapper.java.additional.14=-Dlog4j2.formatMsgNoLookups=true
2:备份log4j-core-2.11.2.jar文件
cp -rfp /usr/lib/vmware/common-jars/log4j-core-2.11.2 .jar /usr/lib/vmware/common-jars/log4j-core-2.11.2.jar.bak
3. 运行 zip 命令禁用类
zip -q -d /usr/lib/vmware/common-jars/ log4j-core-2.11.2.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
3.停止服务,然后通过service-control启动:
服务控制 --stop vmware-perfcharts
服务控制 --start vmware-perfcharts
注意:vCenter Server Appliance 版本 6.0GA-6.0U3i不易受到攻击。但是,发现版本 6.0 U3a/b/c/d/e/f 包含以下未使用的易受攻击的 jar 文件。删除这些 jar 文件后,没有观察到对产品的影响。
-
/opt/pivotal/pivotal-tc-server-standard/templates/gemfire-p2p/lib/log4j-core-2.1.jar
-
/opt/pivotal/pivotal-tc-server-standard/templates/gemfire-p2p/lib/log4j-api-2.1.jar
-
/opt/pivotal/pivotal-tc-server-standard/templates/gemfire-cs/lib/log4j-core-2.1.jar
-
/opt/pivotal/pivotal-tc-server-standard/templates/gemfire-cs/lib/log4j-api-2.1.jar