一、攻击流程
二、影响范围
三、排查方法
1、可以通过检查日志中是否存在 jndi:ldap:// 、jndi:l:rmi等字符来发现可能的攻击行为
2、奖惩日志的相关堆栈报错,信息里面是否有JndiLookup、ldapURLContext等于jndi调用相关的堆栈信息
3、利用工具
四、修复思路
1、禁止用户请求参数出现攻击关键字;
2、禁止lookup下载远程文件;
3、禁止log4j的应用连接外网;
4、禁止log4j使用lookup;
5、从log4j jar包中删除lookup;
五、 修复方案
1、将Log4j框架升级到2.16.0版本
2、使用安全产品防护:WAF、PASP......
3、升级JDK到11.x之后 (零时方案)
4、修改Log4j配置 (零时方案)
(1)修改jvm参数 -Dlog4j2.formatMsgNoLookups=true
(2)修改配置
log4j2.formatMsgNoLookups=True
( 3)将系统环境变量
FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS 设置为 true
5、删除JndiLookup.class (零时方案)
六、spring-boot 修复
maven配置修改:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
<exclusions>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.16.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.16.0</version>
</dependency>
gradel 配置修改
configurations {
//排除对默认logging的依赖
compile.exclude module: 'spring-boot-starter-logging'
}
implementation 'org.apache.logging.log4j:log4j-api:2.16.0'
implementation 'org.apache.logging.log4j:log4j-core:2.16.0'