答案1
更新:2021-12-18...
请记住始终从下面列出的资源中查看最新信息
CVE-2021-45105... 2.16.0 和 2.12.2 不再是有效的补救措施!当前修复版本是 2.17.0 (Java 8) 和 2.12.3 (Java 7)。所有其他 Java 版本都必须采取权宜之计(从 log4j-core JAR 中移除/删除 JndiLookup.class 文件)。
我已相应地更新了下面的消息。
直接回答问题:
去https://www.reddit.com/r/blueteamsec/comments/rd38z9/log4j_0day_being_exploited/
和cntl+f.class and .jar recursive hunter
- 更多资源
补救措施:
CVE-2021-45046...CVE-2021-44228...CVE-2021-45105
虽然大多数需要知道的人可能已经知道足够多的信息来做他们需要做的事情,但我认为我还是会把它放在一边以防万一......
- 遵循这些资源中的指导...它可能会改变,但
截至 2021-12-18
这基本上
- 如果可能的话删除 log4j-core JAR 文件
- 从两台跑步机上立即修复并且
- 在您的源代码/源代码管理文件中,以防止将来的构建/发布/部署覆盖更改
- 如果无法实现(由于依赖性),请升级它们
- 如果您正在运行 Java8,那么您可以升级到 log4j 2.17.0+
- 如果您正在运行早期版本的 Java,则可以升级到 log4j 2.12.3
- 如果您正在运行旧版本的 Java,则需要升级到最新版本的 Java,然后使用最新版本的 Log4J
- 再次强调,这些变化必须同时在运行的机器和代码中发生
- 如果由于某种原因这两种情况都不可能实现......那么就只能采取非补救措施,即从 log4j-core JAR 中删除 JndiLookup.class 文件。
zip
在 Linux 上,使用大多数 Linux 发行版默认附带的命令, 有一个用于临时解决方案的单行命令。zip -q -d "$LOG4J_JAR_PATH" org/apache/logging/log4j/core/lookup/JndiLookup.class
- 在撰写本文时,大多数关于 Windows 权宜之计选项的在线指南都建议执行以下操作(再次...假设您无法执行上述删除 JAR 或升级选项之一):
- 安装类似 7-zip 的程序
- 找到所有 log4j-core JAR 文件并对每个文件执行以下操作...
- 重命名 JAR 以将扩展名更改为
.zip
- 使用 7-zip 解压 JAR(现在有
.zip
扩展名) - 从解压的文件夹中找到并删除 JndiLookup.class 文件
- 路径是
\\path\\to\\unzippedFolder\\org\\apache\\logging\\log4j\\core\\lookup\\JndiLookup.class
- 路径是
- 删除旧的 JAR 文件(现在扩展名为 .zip)
- 使用 7-zip 重新压缩该文件夹
- 重命名新的 .zip 文件夹,将扩展名更改为
.jar
- 还有一些使用 Power Shell 的选项
- Reddit 帖子:log4j_0day_being_exploited
- ctrl+f表示“PowerShell”
如果您只需要处理 1 或 2 个 JAR 文件,并且您不介意安装 7-zip,或者可以使用 PowerShell 来执行此操作,那么这种方法就没问题。但是,如果您有大量 JAR 文件,或者您不想安装 7-zip 并且无法访问 Power Shell,我创建了一个开源 VBS 脚本,它可以为您完成此操作,而无需安装任何其他软件。https://github.com/CrazyKidJack/Windowslog4jClassRemover
阅读 README 和发行说明https://github.com/CrazyKidJack/Windowslog4jClassRemover/releases/latest
答案2
可能有点晚了,因为我看到你正在使用 Syft,但可以使用 PowerShell 中的 System.IO.Compression.FileSystem 库,并调用 OpenRead() 来查看内存中的内容。我编写了一个 PowerShell 脚本来检查我们的每台机器,重要的代码片段如下:
[Reflection.Assembly]::LoadWithPartialName( "System.IO.Compression.FileSystem" ) #loads the required library
...
$openedJarFile = [System.IO.Compression.ZipFile]::OpenRead($jarFile)
一旦在 opensJarFile 变量中有了数据,您就可以编写一个循环来遍历每个条目,搜索 Log4J。
如果您需要参考,请参阅我的脚本这里。
祝您狩猎愉快!