暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

log4j 漏洞

生有可恋 2022-02-11
1473

对于不是 java 技术栈的可能搞不清楚 log4j 的作用以及影响范围。我们看一下漏洞说明:


漏洞说明
 Log4j 受影响版本
Apache Log4j2 某些功能存在递归解析功能,攻击者可直接构造恶意请求,触发远程代码执行漏洞

2021年11月24日,阿里云安全团队向 Apache 官方报告了 Apache Log4j2 远程代码执行漏洞,现已修复

2.x<=2.14.1


Refer:  https://help.fanruan.com/finereport/doc-view-4473.html


log4j 有两个大的版本 log4j 2.x 和 log4j 1.x, 因为 log4j 1.x 已达产品周期就算有漏洞也不会再修复。这次的漏洞受影响的版本是 log4j 2.x。官网给出的信息为:


Important: Security Vulnerability CVE-2021-44832

Summary: Apache Log4j2 vulnerable to RCE via JDBC Appender when attacker controls configuration.

Details

Apache Log4j2 versions 2.0-beta7 through 2.17.0 (excluding security fix releases 2.3.2 and 2.12.4) are vulnerable to a remote code execution (RCE) attack where an attacker with permission to modify the logging configuration file can construct a malicious configuration using a JDBC Appender with a data source referencing a JNDI URI which can execute remote code. This issue is fixed by limiting JNDI data source names to the java protocol in Log4j2 versions 2.17.1, 2.12.4, and 2.3.2.


漏洞提示低版本的 log4j 会通过 JNDI URL 请求到攻击者的 java class 代码,从而触发远程代码执行攻击 (RCE attack)。


目前漏洞已经修复,各家杀软厂商都给出了排查方法和漏洞修复方法:


序号

安全厂商

链接地址

1

奇安信科技集团股份有限公司

https://mp.weixin.qq.com/s/um4yi15P5bYC5kY1SDR3Uw

2

绿盟科技集团股份有限公司

http://blog.nsfocus.net/apache-log4j2/

3

上海斗象信息科技有限公司

https://vas.riskivy.com/vuln-detail?id=105

4

深信服科技股份有限公司

https://mp.weixin.qq.com/s/XL8Br8mGoJe71IWU4wyuGQ

5

北京数字观星科技有限公司

https://mp.weixin.qq.com/s/fFBaMAls7TFVg8UpEtZAgg

6

杭州安恒信息技术股份有限公司

https://mp.weixin.qq.com/s/jp_jBd9SN8pHy3jYc1rnTg

7

安天科技股份有限公司

https://www.antiy.com/response/20211210.html

8

启明星辰信息技术集团股份有限公司

https://mp.weixin.qq.com/s/SgBhyUfRff4YISsH5_PVTA

9

北京天融信网络安全技术有限公司

https://mp.weixin.qq.com/s/IT312b89Nh-cCDUGC-b-Zw

10

远江盛邦(北京)网络安全科技股份有限公司

https://mp.weixin.qq.com/s/cjvxyKhhZuwmp3qD1wBEqQ

11

东软集团股份有限公司

https://mp.weixin.qq.com/s/TOX6hbZ_6pNRvuYCjHPC-g


我们通过一段代码了解一下 log4j 的工作原理和作用。

import org.apache.log4j.Logger;


public class Test {


private static Logger log=Logger.getLogger(Test.class);
public static void main(String[] args) {

log.info("this is info message");
log.debug("this is debug message");
log.warn("this is warn message");
log.error("this is error message");
}
}


对代码进行编译

javac Test.java -cp log4j-1.2.17.jar

执行代码

d:\javast\logging-log4j\src>java  -cp .;log4j-1.2.17.jar Test
log4j:WARN No appenders could be found for logger (Test).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.


执行时提示 log4j 没有初始化,log4j 在代码的使用上很方便,但配置比较复杂,需要提示对 log4j 进行配置。log4j 是由配置文件来控制如何写日志的,在配置文件中指定不同级别的日志的输出位置。比如 infor 级别的日志输出到 console 上,warn 和 error 级别的日志输出到文件。


通过配置 log4j.xml 指定输出位置后,我们再次执行代码

d:\javast\logging-log4j\src>java  -cp .;log4j-1.2.17.jar;apache-log4j-extras-1.1.jar Test
log4j: reset attribute= "false".
log4j: Threshold ="null".
log4j: Level value for root is [debug].
log4j: root level set to DEBUG
...
log4j: setFile called: ./log/error_2022-01-16.log, true
log4j: setFile ended
log4j: Adding appender named [log4jError] to category [root].
2022-01-16 22:03:56 下午 [Thread: main][ Class:Test Method: Test.main(Test.java:8) ]
INFO:this is info message
2022-01-16 22:03:56 下午 [Thread: main][ Class:Test Method: Test.main(Test.java:9) ]
DEBUG:this is debug message
2022-01-16 22:03:56 下午 [Thread: main][ Class:Test Method: Test.main(Test.java:10) ]
WARN:this is warn message
2022-01-16 22:03:56 下午 [Thread: main][ Class:Test Method: Test.main(Test.java:11) ]
ERROR:this is error message


最终测试代码中日志输出按照事先的约定正确打印。同时在当前目录中会生成一个log目录,部分日志也输出到文件。



配置文件较长,可以参考下文:


http://www.cnblogs.com/alterhu/p/3189177.html


为简化配置,测试代码以及 java 包都放在同一级目录。演示使用的是 log4j 1.x,原理与 log4j 2.x 类似,但 1.x 的配置文件与 2.x 不同。



log4j 2.x 的配置可以参考


https://www.liaoxuefeng.com/wiki/1252599548343744/1264739436350112


因为大量项目使用 log4j,首先需要排查的就是服务器中有没有用到 log4j,同时排查 log4j 的版本,可以通过查找文件的形式进行初步排查。


find / -iname "*log4j*"


常用的 jar 包和配置文件名如下:

  • commons-logging-x.x.jar

  • log4j-api-2.x.x.jar

  • log4j-core-2.x.x.jar

  • log4j-jcl-2.x.x.jar

  • log4j2.xml


通过查找文件即可知道项目中是否使用了 log4j,然后再选择修复方案。


文章转载自生有可恋,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论