热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Log4j被曝核弹级漏洞,开发者炸锅了!

大家好,我是鱼皮,开门见山,知名的开源项目ApacheLog4j出事了!2021年12月9日,该项目被曝存在严重安全漏洞,攻击者只需要向目标机传入一段特殊代码,

大家好,我是鱼皮,开门见山,知名的开源项目 Apache Log4j 出事了!

2021 年 12 月 9 日,该项目被曝存在 严重安全漏洞 ,攻击者只需要向目标机传入一段特殊代码,就能触发漏洞,***地在远程执行任意代码来控制目标机器!

老实说,光听到这个消息,我就觉得很可怕了。因为 Log4j 作为 Java 的知名日志记录框架,凭借其灵活高效的日志生成能力,不仅被众多自研项目所使用,还被很多明星项目作为了基础框架使用,像 Redis、Kafka、Elasticsearch、Apache Flink、Apache Druid 等等。可以想象这个漏洞的影响范围有多大,甚至被很多媒体称之为 “核弹级” 漏洞!

在漏洞被曝光之后,第一时间做出行动的不是无辜躺枪的程序员们,而是那些坏的一批的小子们。据说,在漏洞被公开的第一天,就发生了近万次利用该漏洞的攻击行为!

漏洞细节

根据 CVE 漏洞公开网站的记录,该漏洞存在于 Apache log4j <= 2.14.1 的版本(但事实上,影响的版本范围比这更大)。攻击者可以通过 log4j 的 lookup 替换功能向其配置文件的任意位置注入代码(类似 SQL 注入,把 ${变量} 替换为 ${实际代码}),再加上这些版本中用到的 JNDI 特性并没有为 LDAP 提供足够的保护,使得注入的任意代码都能被肆无忌惮地执行。

JNDI:Java 命名与目录接口,提供了用名称来访问资源的能力

LDAP:轻型目录访问协议,定义了如何访问目录服务中的内容

两者配合,可以完成对服务器目录的操作,比如增删改查。

CVE 漏洞记录

有一些用 Minecraft Java 版本开服的小伙伴就被坑了,因为该项目用到了 log4j 来记录用户聊天日志,因此玩家只需要在聊天窗口输入一些这个那个的命令代码,就被注入执行了,从而轻松作弊。

解决方案

我整理了三种解决方案,可以根据实际情况选用。

1. 升级版本

目前 Apache 官方已经针对该漏洞发布了补丁版本 2.15.0-rc2,默认禁用了 lookup 行为,在确保升级该版本不会对项目的其他依赖产生冲突的情况下,建议升级。

该方案虽然比较简单粗暴,但这个版本是否稳定?是否没有漏洞呢?这很难说。

2. 修改参数

如果你不想升级 log4j 的版本,担心会和项目其他依赖产生冲突的话,可以采用 Apache 官方推荐的临时解决方案 —— 修改参数。

如果你的 log4j 版本 >= 2.10,可以通过设置系统属性 log4j2.formatMsgNoLookups 或者环境变量 LOG4J_FORMAT_MSG_NO_LOOKUPStrue 来禁用 lookup 行为;如果版本在 2.0-beta9 到 2.10.0 之间, 可以直接移除从 classpath 中移除 JndiLookup 类,用以下命令即可:

zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class

这个方案相对不容易引发项目的冲突,如果项目很紧急且重要,先用它处理吧。

3. 换框架

最暴力、也是解决最彻底的方案就是干脆不用 log4j 了,用别的!

比如我自己很早之前就弃用 log4j,改用 logback 了,不说别的,logback 的测试更加充分,质量相对有保障一些。毕竟日志框架作为一个项目必备的核心依赖,稳定性是至关重要的。

当然,这种方式对项目的影响可能会很大,如果一定要整体替换框架,建议进行充分的测试(覆盖率越高越好),可不是改几行代码那么简单。


最后鱼皮再多说几句吧,这次的事件又印证了软件开发中的 不信任原则 ,没有绝对可信、完全不出问题的服务,所以我们开发者要做的就是时刻多留一个心眼儿,尽量针对一些服务的不稳定去设计一些保护或降级措施。比如假设分布式缓存会挂掉,可以再设计本地缓存继续提供临时服务,保障系统的可用性。

不过还好这次漏洞对我没什么影响,一是项目本身没用 log4j 而是 logback;二是在公司做的业务是内部系统,大多数基础设施和中间件都是内网的,有网络层面的隔离保护;三是我自己的项目用到的服务也都是云服务商提供的,哪怕出了问题,基本也不用自己解决(不过还是存在一定的安全风险就是了)。

唉,不知道有多少小伙伴周末要加班了,你躺枪了么?

我是鱼皮,原创不易,如果觉得文章还不错,希望 点赞 支持下,谢谢大家~


推荐阅读
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • ElasticSearch成功安装完毕。 测试数据添加出现{  error:{    root_cause ... [详细]
  • 2019我的金三银四
    先讲一下自己的情况吧,二本学生,17年毕业,目前在一家跨境电商从事Java技术开发工作(不是阿里,没那么厉害),技术栈目前偏向于容器云、持续集成持续交付这一块,也就是SpringBoot、Kuber ... [详细]
  • Java开发面试问题,2021网易Java高级面试题及答案,实战案例
    前言大厂面试真题向来都是各大求职者的最佳练兵场,而今天小编带来的便是“HUAWEI”面经!这是一次真实的面试经历,虽然不是我自己亲身经历 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 2018深入java目标计划及学习内容
    本文介绍了作者在2018年的深入java目标计划,包括学习计划和工作中要用到的内容。作者计划学习的内容包括kafka、zookeeper、hbase、hdoop、spark、elasticsearch、solr、spring cloud、mysql、mybatis等。其中,作者对jvm的学习有一定了解,并计划通读《jvm》一书。此外,作者还提到了《HotSpot实战》和《高性能MySQL》等书籍。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • svnWebUI:一款现代化的svn服务端管理软件
    svnWebUI是一款图形化管理服务端Subversion的配置工具,适用于非程序员使用。它解决了svn用户和权限配置繁琐且不便的问题,提供了现代化的web界面,让svn服务端管理变得轻松。演示地址:http://svn.nginxwebui.cn:6060。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
  • 什么是大数据lambda架构
    一、什么是Lambda架构Lambda架构由Storm的作者[NathanMarz]提出,根据维基百科的定义,Lambda架构的设计是为了在处理大规模数 ... [详细]
  • 讨伐Java多线程与高并发——MQ篇
    本文是学习Java多线程与高并发知识时做的笔记。这部分内容比较多,按照内容分为5个部分:多线程基础篇JUC篇同步容器和并发容器篇线程池篇MQ篇本篇 ... [详细]
  • 你知道Kafka和Redis的各自优缺点吗?一文带你优化选择,不走弯路 ... [详细]
  • elasticssearch+kibanna入门(撰写中)
    elasticssearchkibanna入门(撰写中)看到一篇elasticssearchkibanna的文章,觉得很好, ... [详细]
author-avatar
萧阳
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有