log4j2重大漏洞简析&阿里云被罚事件&Log4j2维护者吐槽没工资还要挨骂
1.log4j2漏洞介绍
1.1简介
Apache Log4j 2是对Log4j的升级,它比其前身Log4j 1.x提供了重大改进,并提供了Logback中可用的许多改进,同时修复了Logback架构中的一些问题。是目前最优秀的Java日志框架之一。
2021年11月24日,阿里云安全团队向Apache官方报告了Apache Log4j2远程代码执行漏洞。由于Apache Log4j2某些功能存在递归解析功能,攻击者可直接构造恶意请求,触发远程代码执行漏洞。漏洞利用无需特殊配置,经阿里云安全团队验证,Apache Struts2、Apache Solr、Apache Druid、Apache Flink等均受影响。阿里云应急响应中心提醒 Apache Log4j2 用户尽快采取安全措施阻止漏洞攻击。
了解过漏洞的原理之后发现,这应该算是一种低级漏洞了。原理就是JNDI代码注入。通过JNDI注入漏洞,黑客可以恶意构造特殊数据请求包,触发此漏洞,从而成功利用此漏洞可以在目标服务器上执行任意代码。注意,此漏洞是可以执行任意代码,这就很恐怖,相当于黑客已经攻入计算机,可以为所欲为了,就像已经进入你家,想干什么,就干什么,比如运行什么程序,植入什么病毒,变成他的肉鸡。
参看视频:
https://www.bilibili.com/video/BV1FL411E7g3?share_source=copy_web
1.2 漏洞评级及影响版本
Apache Log4j 远程代码执行漏洞 严重
影响的版本范围:Apache Log4j 2.x <= 2.14.1
2.log4j2 漏洞简单演示
创建maven工程
引入jar包依赖
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.14.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.14.0</version>
</dependency>
</dependencies>
编写log4j2配置文件
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<!--全局参数-->
<Properties>
<Property name="pattern">%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n</Property>
<Property name="logDir">/data/logs/dust-server</Property>
</Properties>
<Loggers>
<Root level="INFO">
<AppenderRef ref="console"/>
<AppenderRef ref="rolling_file"/>
</Root>
</Loggers>
<Appenders>
<!-- 定义输出到控制台 -->
<Console name="console" target="SYSTEM_OUT" follow="true">
<!--控制台只输出level及以上级别的信息-->
<ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout>
<Pattern>${pattern}</Pattern>
</PatternLayout>
</Console>
<!-- 同一来源的Appender可以定义多个RollingFile,定义按天存储日志 -->
<RollingFile name="rolling_file"
fileName="${logDir}/dust-server.log"
filePattern="${logDir}/dust-server_%d{yyyy-MM-dd}.log">
<ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout>
<Pattern>${pattern}</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1"/>
</Policies>
<!-- 日志保留策略,配置只保留七天 -->
<DefaultRolloverStrategy>
<Delete basePath="${logDir}/" maxDepth="1">
<IfFileName glob="dust-server_*.log" />
<IfLastModified age="7d" />
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
</Appenders>
</Configuration>
创建测试类Log4j2Demo
public class Log4j2Demo {
private static final Logger LOGGER=LogManager.getLogger();
public static void main(String[] args) {
String username="${java:os}";
LOGGER.info("Hello, {}",username);
}
}
运行结果
[INFO] Building log4j2-bug-test 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- exec-maven-plugin:3.0.0:exec (default-cli) @ log4j2-bug-test ---
2021-12-11 11:44:14,654 INFO Log4j2Demo:12 - Hello, Windows 10 10.0, architecture: amd64-64
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.140 s
[INFO] Finished at: 2021-12-11T11:44:14+08:00
[INFO] ------------------------------------------------------------------------
在这里面我们可以看到使用${}可以实现漏洞的注入,假设username为用户登录的输入框,即可从这个输入框进行注入,既可查看到一些后台系统信息,如果有黑客在使用JNDI编写恶意代码注入的话,后果是非常严重的。
3. log4j2 快速修复措施
修改log4j2版本
据 Apache 官方最新信息显示,release 页面上已经更新了 Log4j 2.15.0 版本,主要是那个log4j-core包,漏洞就是在这个包里产生的,如果你的程序有用到,尽快紧急升级。
临时解决方案
设置jvm参数 “-Dlog4j2.formatMsgNoLookups=true”
设置“log4j2.formatMsgNoLookups=True”
系统环境变量“FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS”设置为“true”
关闭对应应用的网络外连,禁止主动外连
4. 其它影响:工信部暂停阿里云合作单位
工业和信息化部网络安全管理局通报称,阿里云计算有限公司(以下简称“阿里云”)作为工信部网络安全威胁信息共享平台合作单位,在发现阿帕奇(Apache)Log4j2组件严重安全漏洞隐患后,未及时向电信主管部门报告,未有效支撑工信部开展网络安全威胁和漏洞管理。经研究,现暂停阿里云公司作为上述合作单位6个月。暂停期满后,根据阿里云公司整改情况,研究恢复其上述合作单位。
多位网络安全领域专家在接受记者采访时表示,本次阿帕奇Log4j2组件的漏洞是典型的通用型漏洞,作为最常用的Java程序日志监控组件之一,Log4j2被应用在各种各样的衍生框架中,同时它也是Java全生态的基础组件之一,而此类组件一旦崩塌,其影响将是破坏性的。
引发全球计算机安全危机
2001年,软件开发者Ceki Gulcu设计出一套基于Java语言的日志库Log4j,并于不久后加入专门运作开源软件项目的非盈利组织Apache。在此后的软件迭代升级中,Apache在Log4j的基础上推出了新开源项目Log4j2,在保留原本特性的同时加入了控制日志信息输出目的地、输出格式、定义信息级别等功能,并很快因为其简易便捷、功能强大的特征,作为基本集成模块广泛应用于各类使用Java开源系统中。
但也正因为Log4j2广泛的适用性,在被爆出存在远程代码执行安全漏洞后,在全球计算机领域引发巨大的安全危机。
近日,谷歌开源团队对Java软件包最重要的存储库——Maven中央存储库进行了扫描,发现35863个软件包使用的Apache Log4j库版本易受相关漏洞的影响。谷歌发布报告称,受影响的Java包数量占Maven中央存储库的8%,考虑到该存储库广泛的应用范围,漏洞将对整个行业生态产生巨大影响。某北京网络安全公司技术人员向记者表示,大概百分之八十到九十涉及到Java的开发都可能受到该漏洞的影响。
梆梆安全高级副总裁方宁在接受21世纪经济报道记者采访时表示,后台记录日志功能是大部分系统都会具备的模块,而Log4j2作为一个经典的开源软件,很多开发者在编写程序时都会直接将其集成于代码中,这些新的软件可能又会被别的系统集成在内。经过不断地叠加和嵌套,一旦Log4j2出现安全问题,一整条程序链条上的开源软件和系统都会受到波及,影响覆盖范围非常广泛。
除了Log4j2本身应用范围广外,该漏洞的另一大特征在于利用方式十分简单。据专家介绍,攻击者仅需向目标输入一段代码,不需要用户执行任何多余操作即可触发该漏洞,使攻击者得以远程控制受害者用户的服务器,90%以上基于Java开发的应用平台都会受到影响。
奇安信集团安域云防护的监测数据显示,截至12月10日中午12点,已发现近1万次利用该漏洞的攻击行为。奇安信应急响应中心已接到十余起重要单位的漏洞应急响应需求,并于12月9日晚间将漏洞信息上报了相关主管部门。补天漏洞响应平台负责人介绍,12月9日深夜,仅一小时内就收到白帽黑客提交的百余条该漏洞的信息。
而此前就十分猖獗的网络勒索软件,通过利用Log4j2漏洞被发现后各大企业尚未及时修补前的间隙,发起了新一轮大规模勒索攻击。来自KnownSec 404 团队和深信服威胁情报团队的研究人员报告称,TellYouThePass、Khonsari等勒索软件正利用该漏洞针对Linux和 Windows 系统发起进攻,在用户终端直接完成安装。
发现漏洞应及时上报
据工信部于12月17日在其官网发布的《关于阿帕奇Log4j2组件重大安全漏洞的网络安全风险提示》显示,2021年12月9日,工业和信息化部网络安全威胁和漏洞信息共享平台收到有关网络安全专业机构报告,阿帕奇Log4j2组件存在严重安全漏洞。工业和信息化部立即组织有关网络安全专业机构开展漏洞风险分析,召集阿里云、网络安全企业、网络安全专业机构等开展研判,通报督促阿帕奇软件基金会及时修补该漏洞,向行业单位进行风险预警。
《提示》中还指出,该漏洞可能导致设备远程受控,进而引发敏感信息窃取、设备服务中断等严重危害,属于高危漏洞。为降低网络安全风险,提醒有关单位和公众密切关注阿帕奇Log4j2组件漏洞补丁发布,排查自有相关系统阿帕奇Log4j2组件使用情况,及时升级组件版本。
在此之前,我国对网络漏洞的处理方式和流程已做出具体要求。《网络安全法》第二十五条规定:“网络运营者应当制定网络安全事件应急预案,及时处置系统漏洞、计算机病毒、网络攻击、网络侵入等安全风险;在发生危害网络安全的事件时,立即启动应急预案,采取相应的补救措施,并按照规定向有关主管部门报告。”
今年7月,工业和信息化部、国家互联网信息办公室、公安部联合发布《网络产品安全漏洞管理规定》,对网络产品提供者、运营者及信息共享平台的责任与义务提出更为详细的要求。其第七条规定,网络产品提供者在发现或者获知所提供网络产品存在安全漏洞后,应当立即采取措施并组织验证,评估其危害程度和影响范围,并在2日内向工业和信息化部网络安全威胁和漏洞信息共享平台报送相关漏洞信息;对属于其上游产品或者组件存在的安全漏洞,应当立即通知相关产品提供者;对于需要产品用户(含下游厂商)采取软件、固件升级等措施的应及时告知并提供必要的技术支持。
平台方面,工业和信息化部网络安全威胁和漏洞信息共享平台同步向国家网络与信息安全信息通报中心、国家计算机网络应急技术处理协调中心通报相关漏洞信息。
据方宁介绍,目前国内的国家级漏洞采集共享平台主要包括CNVD(国家信息安全漏洞共享平台)、CNNVD(国家信息安全漏洞库)等,此类平台往往招募了大量第三方安全企业长期向其输送网络安全漏洞,这些第三方企业作为相关部门的支撑单位,需要依据规定及时将发现的漏洞提交到国家采集平台上。
影响预计还将持续
目前,受到Log4j2漏洞影响和威胁的企业与组织数量仍在持续增长,据火线Apache Log4j2漏洞影响面查询网站统计显示,截至发稿前,该漏洞已影响超6万个开源软件,涉及相关版本软件包32万余个。
除企业外,一些政府机构和社会组织由于未及时修补Log4j2漏洞,也成为黑客的攻击目标。据报道,当地时间12月16日,比利时国防部遭到黑客利用该漏洞发起的攻击,比利时国防部长回应称,其安全团队正努力保证网络安全,防止再发生类似事件。
尽管在12月8日, Apache官方就已发布Log4j2安全更新,但其影响预计还将持续很长一段时间。
“可能还需要至少6个月,才能把本次漏洞的影响面缩减到比较小的范围内。”方宁解释称,此类0day漏洞(已被发现但还未推出相关补丁的漏洞)刚被爆出时,往往是对安全问题较为重视并有相应财力、人力的企业最早完成修复,大量的中小企业如果没有专门的网络安全部门和团队,可能都无法获知相关的情况。
阿里云官方回应全文:
Log4j2 是开源社区阿帕奇(Apache)旗下的开源日志组件,被全世界企业和组织广泛应用于各种业务系统开发。
近日,阿里云一名研发工程师发现 Log4j2 组件的一个安全 bug,遂按业界惯例以邮件方式向软件开发方 Apache 开源社区报告这一问题请求帮助。Apache 开源社区确认这是一个安全漏洞,并向全球发布修复补丁。随后,该漏洞被外界证实为一个全球性的重大漏洞。
阿里云因在早期未意识到该漏洞的严重性,未及时共享漏洞信息。阿里云将强化漏洞管理、提升合规意识,积极协同各方做好网络安全风险防范工作。
很自然也引起网民的议论,政府部门发声,肯定有人心怀不满:
自 12 月 9 日夜间 Log4j 2 漏洞发现以来,受到业内外的极大关注,一位网友表示," 以前不关注网络安全领域都对这一漏洞有所了解。"
一位安全专家表示 :" 从 Log4j2 漏洞披露以来,基本上震动全民,不管是安全从业者,还是安全爱好者抑或是做黑产、做勒索的黑客,基本上彻夜不眠,行动不断。"
众所周知,Apache Log4j 是被全球广泛应用的组件,其漏洞影响范围波及全球堪比 " 永恒之蓝 " 漏洞,利用复杂度低,一旦利用成功,可能导致设备远程受控,进而引发敏感信息窃取、设备服务中断等严重危害,造成的危害和损失不可预估。
据相关媒体报道称,比利时国防部网络最近受到不明攻击者的成功攻击,攻击者利用 Apache 日志库 log4j 的巨大漏洞实施攻击。
不仅是政府,还有企业也是攻击的对象,只要使用 JAVA 开发的基本上都会受到影响。同时个人用户受到攻击的案例也已经出现。《我的世界》JAVA 版游戏前几天被监测出大量黑客利用 Apache Log4j 2 漏洞攻击个人用户。
Log4j 2 影响的后果逐渐显现。
1. 阿里云被 " 以身试法 " 了吗?
一位业内人士表示:" 按照业内漏洞披露的周期,整个流程应该是,先报给厂商,厂商根据漏洞影响度,在相应的时间提供一个解决方案,然后 10 天、 45 天或者 90 天,然后厂家提供了解决方案以后,才会出一个漏洞通告。"
这次 Log4j 2 漏洞的特殊就在于它本身是一个开源的软件。没有给修复时间就被疯狂转发,因为开源软件修复代码是公开的,而修复代码里面一部分就是测试代码,而测试代码就是用来检查修复是否正确,整个过程相当于是公开的,基本上就等于公开了漏洞原理和攻击方式。
自阿里云 12 月 9 日将漏洞报告给 Apache,Log4j 2 漏洞也开始逐渐发酵。
而自 2021 年 9 月 1 日正式施行的《网络产品安全漏洞管理规定》:不得在网络产品提供者提供网络产品安全漏洞修补措施之前发布漏洞信息。认为有必要提前发布的,应当与相关网络产品提供者共同评估协商,并向工业和信息化部、公安部报告,由工业和信息化部、公安部组织评估后进行发布。
同时该规定明确相关企业要接受至少 4 家的管理检查,分别是 国家互联网信息办公室、工业和信息化部、公安部和有关行业主管部门;同时企业应当在 2 日内向工业和信息化部网络安全威胁和漏洞信息共享平台报送相关漏洞信息。
《网络产品安全漏洞管理规定》第三条规定 国家互联网信息办公室负责统筹协调网络产品安全漏洞管理工作。工业和信息化部负责网络产品安全漏洞综合管理,承担电信和互联网行业网络产品安全漏洞监督管理。公安部负责网络产品安全漏洞监督管理,依法打击利用网络产品安全漏洞实施的违法犯罪活动。有关主管部门加强跨部门协同配合,实现网络产品安全漏洞信息实时共享,对重大网络产品安全漏洞风险开展联合评估和处置。
据了解,12 月 9 日,工业和信息化部网络安全威胁和漏洞信息共享平台收到有关网络安全专业机构报告,阿帕奇 Log4j2 组件存在严重安全漏洞。工信部立即组织有关网络安全专业机构开展漏洞风险分析,召集阿里云、网络安全企业、网络安全专业机构等开展研判,通报督促阿帕奇软件基金会及时修补该漏洞,向行业单位进行风险预警。
2.Log4j 2 漏洞,三步攻陷任何设备
Log4j 2 是近十年来可以排到 top3 的漏洞,影响面极广,包括大部分线上业务、我们平时使用的网站以及有网络外联功能的硬件产品。
目前来看一些勒索病毒、挖矿等都已经开始有所动作了,其中 PoC 攻击方式也已经在互联网出现,虽然一些安全厂商也已经及时响应,做出一些监测方案和修复方案,但是绝大部分网站还是会受到影响,只是目前评估起来比较困难。
对于企业来说即便受到攻击,也只能打碎牙往肚子里咽。没有受到攻击的企业或更新版本或找安全厂商找补漏洞。
据雷峰网了解,此次 log4j 2 的攻击门槛非常低,不需要任何特殊配置,只要默认配置就可以,因为攻击代码可以嵌入开发人员最常用的函数中,直接控制目标服务器。
log4j 是一个日志组件,用来记录日志的。一般来说,一个网站或者一个桌面软件的日志组件是在整个软件组件结构中的。而 log4j 恰恰是 Java 中,同时 slf4j 也是 Java 中的,以往这两个日志组件的漏洞加起来都没有超过两位数,而且攻击也得满足很多配置,不容易成功。
那么我们来还原一下利用 log4j 漏洞整个实现的过程,为什么很容易实现。
第一步:攻击者通过扫描器或者其他批量脚本等手段,发送大量请求,确定了攻击入口。
第二步:发一段 JNDI 代码,引导受害者向恶意服务器发送请求,接着恶意服务器会返回一堆代码。
第三步:再发送攻击代码,让受害者请求恶意服务器请求,这中间发的东西不一样,第二次恶意服务器返回给受害者的代码,就能实现管理者控制受害者的目的。
事实上,只要你在网站上的一切操作,日志就像一个监视器一样,记录你的一切操作。不管是键盘输入、鼠标点击亦或是网站代码的变化,电脑上的软件以及网站都会被记录在数据库中,一旦攻击者给你发送消息,那么你的所有数据都将泄露。
5.Log4j2维护者吐槽没工资还要挨骂
Log4j 维护者一直在为缓解措施而失眠:修复、文档、CVE、对查询的回复等。然而,没有什么能阻止人们痛骂(bush)我们,因为这份没有报酬的工作。其实我们都不喜欢这个出于向后兼容性问题而需要保留的功能(指 JNDI )。
“想象一下,一家市值万亿美元的公司将各种开源组件应用到自己的产品中,每年赚取数十亿美元的利润。当这家公司的一个用户向它提供的产品寻求帮助时,公司却把用户推给开源项目。这个开源项目是由志愿者运营和维护的,这家公司从未赞助过一分钱。”
我是 Apache 软件基金会的成员,也是 Apache Commons、Apache Flume、Apache Logging Services 和 Apache Maven 的 PMC 成员。我创建了 Apache Log4j 2的初始版本,并继续将我的大部分精力放在提供支持和改进上,以使 Apache Log4j 2 成为目前从事软件架构师全职工作的 Java 开发人员的最佳日志记录框架。我在业余时间从事 Log4j 和其他开源项目,我通常从事我最感兴趣的那些问题。我一直梦想着全职从事开源工作,希望您的支持能实现这一梦想。