近期披露的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相关域名访问进行检测。 ?
|