Dun*_*ncG 43
CVE-2021-44228 Log4Shell 漏洞
如果可以,请按照Apache 日志记录站点上的安全详细信息的建议升级到 Log4j2 + Java 版本。自从我原来的帖子以来,这个网站已经改变了;始终遵循 Apache 网站推荐的指南。
Apache 站点之前针对 Log4j2 早期版本报告的 JNDI 查找漏洞提出了一些解决方法。
IMO:这是一个非常严重的漏洞,你不应该考虑这些变通办法,当你阅读本文时,它们可能无论如何都无济于事。升级 Log4j JAR 文件并查看下面关于检查位置的注释。
log4j2.formatMsgNoLookups
启动 VM 时
设置系统属性,传递为java -Dlog4j2.formatMsgNoLookups=true ...
.
将环境变量设置LOG4J_FORMAT_MSG_NO_LOOKUPS
为 true。
对于从 2.0-beta9 到 2.10.0 的版本,缓解措施是/apache/logging/log4j/core/lookup/JndiLookup.class
从类路径中删除 - 请参阅log4j-core-*.jar
.
对于某些版本,将格式模式替换%m
为%m{nolookups}
在 的 Java 源代码上LOG4J_FORMAT_MSG_NO_LOOKUPS
运行时我找不到,所以不清楚这是否有帮助。grep
2.14.0
某些 JDK 版本降低了风险:大于 6u211、7u201、8u191 和 11.0.1 的 JDK 由于应用于 LDAP 查找的默认值不受影响。尽可能升级。
一些检查 Log4j 使用的地方
检查您使用的 Java 版本是否足够新:
java -version
扫描您的应用程序发布结构、应用程序服务器、开发环境以查找可能的 Log4j 旧版本:
find yourReleaseDir -type f -name log4j\*jar
如果您不确定您在 ZIP 工具中打开 JAR 文件并查看的 Log4j 版本META-INF\MANIFEST.MF
- 可能会有一行包含版本的详细信息:
Log4jReleaseVersion: A.B.C
查看每台发布机器上正在运行的进程,看看是否有任何打开的 Log4j JAR 文件句柄:
lsof | grep log4j
同时扫描机器以验证 Java VM 是您期望的版本。这可能会发现更多要处理的应用程序:
ps -ef | egrep "(java|jdk)" #OR: | grep -v grep
扫描应用服务器上的 EAR 和 WAR 档案,以验证容器档案内没有任何嵌入式 Log4j JAR 文件。您可以使用find
andunzip
命令执行此操作,或者尝试ShowClassVersions
我编写的类来检测此答案中的 Java 编译器版本。这将打印出WAR和EAR文件中的 JAR 文件的名称:
java ShowClassVersions.java app_server_dir |grep log4j
app_server_dir/somewebapp.war => WEB-INF/lib/log4j2-core.jar
dpr*_*dpr 18
正如DuncG 所评论的,禁用 Log4j 查找的选项不是配置选项,而是系统属性
log4j2.formatMsgNoLookups
根据您的环境(Spring、独立可执行文件、Tomcat Web 应用程序等),系统属性的设置方式可能会有所不同。从 JAR 文件启动 Java 进程的最简单方法是添加
-Dlog4j2.formatMsgNoLookups=true
到你的命令行:
java -Dlog4j2.formatMsgNoLookups=true -jar myapp.jar
@AndyLester 完全正确。我认为“禁用 log4j 查找的选项不是配置选项”这句话会准确说明这一点。 (3认同)
@AndyLester 在 log4j.xml 配置中禁用查找的选项将使用 `%m{nolookups}` 而不是在每个模式中仅使用 `%m`。由于没有选项可以通过单个开关禁用对所有模式的查找,因此此选项容易出错(如果没有此参数,模式可能会丢失或稍后添加)。因此,这不是推荐的方法。 (2认同)
由于 Log4j 2.x 至少从三个来源读取属性(参见 [文档](logging.apache./log4j/2.x/manual/configuration.html#SystemProperties)),因此也可以将设置放入应用程序类路径中的“log4j2.ponent.properties”文件中。 (2认同)
小智 7
您可以这样做:%m{nolookups}
在布局中。
{nolookups}
是您log4j2.formatMsgNoLookups=true
在配置 XML 内容中设置属性的方式。
引用 Log4j 源:
public static final boolean FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS = PropertiesUtil.getProperties().getBooleanProperty("log4j2.formatMsgNoLookups", false);
及其javadoc:
LOG4J2-2109 如果为真,MessagePatternConverter 将始终像
%m{不查找}
已配置。
自从:
2.10
更多推荐
放在,配置文件,位置,formatMsgNoLookups,XML
发布评论