log4j2漏洞原理及修复方案

近期披露的Apache Log4j2 远程代码执行漏洞,漏洞利用方法已在网上公开,该漏洞影响范围极广。

主要原理是利用log4j2的日志输出jndi远程对象时,调用远程对象没做检查导致。

 当用户浏览器注入变量 

后台应用程序对变量做了日志输出就会发生远程对象的调用,远程对象又没有经过检查,直接在我们的应用程序中运行。

 防护方法

1、目前官方已发布Apache Log4j 2.15.1-rc2(测试版)及Apache Log4j 2.15.0(稳定版)修复该漏洞,建议受影响用户可将Apache Log4j所有相关应用到以上版本,下载链接:https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.1-rc2或https://logging.apache.org/log4j/2.x/download.html

官方版本修复的原理是添加可访问jndi服务器地址列表,控制jndi的访问。

2 临时防护措施
若相关用户暂时无法进行升级操作,可先用下列措施进行临时缓解:
1、添加jvm参数启动:-Dlog4j2.formatMsgNoLookups=true
2、在应用的classpath下添加log4j2.component.properties配置文件,文件内容为:log4j2.formatMsgNoLookups=true
请各组安排人员对受影响的系统进行评估并及时修复该漏洞。如果不能升级Apache Log4j2,可采用临时防护措施缓解此漏洞带来的影响。请各组及时反馈漏洞修复结果。

3、设置系统环境变量 LOG4J_FORMAT_MSG_NO_LOOKUPS=true
注:当且仅当Apache Log4j >= 2.10版本时,可使用1、2、3的任一措施进行防护。
4、使用下列命令,移除log4j-core包中的JndiLookup 类文件:
zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
5、采用人工方式禁用JNDI,例:在spring.properties里添加spring.jndi.ignore=true
6、建议使用JDK在11.0.1、8u191、7u201、6u211及以上的高版本,可在一定程度防止RCE。
7、限制受影响应用对外访问互联网,并在边界对dnslog相关域名访问进行检测。

 

猜你喜欢

转载自blog.csdn.net/weixin_41701609/article/details/121916781