最近几天,各家互联网大厂的程序员朋友们,都快被 Log4j2 漏洞折磨疯了,纷纷启动自家软件的漏洞修复。今天早上,阿里云被爆出作为工信部网络安全威胁信息共享合作平台,阿里云在发现该漏洞时并未及时向工信部汇报,所以被暂停合作 6 个月。在暂停期满后,根据阿里云的实际整改情况研究是否恢复合作。

该漏洞最早被爆出是在 12 月 10 日凌晨。12 月 10 日凌晨,Apache 开源项目 Log4j 的远程代码执行漏洞细节被公开,由于 Log4j 的广泛使用,该漏洞一旦被攻击者利用会造成严重危害。

随着漏洞爆出,各家大厂纷纷发布公告,斗鱼、京东、网易、深信服和汽车产业安全应急响应中心皆发文表示,鉴于该漏洞影响范围比较大,业务自查及升级修复需要一定时间,暂不接收 Log4j2 相关的远程代码执行漏洞。

那么这个漏洞到底是什么?怎么会让各大厂连夜整合修复,下场发布公告?为什么波及范围会这么广泛?

1、Log4j 是什么?

Log4j ( Log For Java )是 Java 开源日志框架,它在用 Java 敲代码的码农群体里可以说是无人不知,无人不晓。

众所周知,程序员写完代码之后并不会对代码进行马上使用,而是进行一系列的测试来确定代码是否可行。

但是代码在进行测试的时候是黑盒测试状态,你根本不知道代码在测试的过程中哪里出了问题。所以这个时候,日志的价值就体现出来了,它就好像一张演算稿纸,你可以在上面进行自己能看得懂的标记,方便随时进行检验测算。

而 Log4j ,就是这样一个开源的日志框架,它记录了代码在测试过程中的每一步,在代码测试跑完的时候,就可以有针对性地进行修改,效率也更高。它里面整合了不少在修改代码时会用到的常用功能,比如日志管理、输出变量等实用功能。

事实上,日志是程序员们经常使用的一个工具,就像早年的英雄联盟盒子一样,虽然不用也可以打游戏,但是用了之后我可以更方便地打游戏,所以,为什么不用呢?

2、Log4j2 漏洞是怎么造成的?

Log4j2 是一个开源项目,仅有几个人进行维护。2014 年,Log4j2 发布,它对 Log4j 进行了重大升级,完全重写了 Log4j 的日志实现。Log4j2 提供了 Logback 中可用的许多改进,同时修复了 Logback 架构中的一些固有问题,目前已经更新到 2.17.0 版本。

最先发现漏洞的,是阿里云安全团队中一位大佬。据他的说法,这个漏洞很早就被国外的安全代码扫描平台扫出来了,圈内的程序员大佬们也都在等待官方的修复,没有声张。

该漏洞是由 Log4j2 提供的 Lookup 功能造成的。从字面上理解,这个功能就是一个用来搜索内容的接口,Log4j2 也在 Lookup 的功能下,提供了不少实现的途径,问题就出在这个叫 JNDI 的途径上。

JNDI 被 Java 允许通过远程连接的方式来加载文件,这个远程地址可以是开发者自己的服务器,也可以是外界的服务器。黑客只要通过 JNDI 的方法连接上自己的恶意服务器,就可以堂而皇之从这个接口进来,进而在程序内部为所欲为。

最可怕的地方在于实现起来没什么门槛,只要用一串简单的字符,就能轻易攻破服务器,并在上面运行各种代码。这别说是窃取个人信息了,黑客想要远程挟持、瘫痪企业级的服务器,那也是毫无阻碍。

这个漏洞有多夸张?不仅包括了阿里、腾讯、百度、网易、新浪等一众国内的互联网大厂纷纷中枪,就连手机,耳机,汽车等硬件都有可能中招……

对于这次漏洞,有网友评价说道,“可以说是灾难性的漏洞,比之前的 fastjson 和 shiro 还要严重,这个漏洞估计在之后三四年内还会继续存在…”

3、紧急修复方案

针对此次漏洞,给大家分享一些网上的紧急方案:

  • 紧急缓解措施

(1)修改 jvm 参数

-DLog4j2.formatMsgNoLookups=true

(2)修改配置 Log4j2.formatMsgNoLookups=True

(3)将系统环境变量 FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS 设置为 true

  • 建立防火墙

目前,大部分公司的应急方案是建立防火墙。在 Log4j2 做一个触发式的拦截程序,把与漏洞相关内容,提前进行阻拦。

  • 版本更新

检查所有使用了 Log4j2 组件的系统,并且进行更新修复。官方目前对漏洞进行了积极修复,版本更新到 2.17。

4、结语

由于 Log4j2 漏洞不仅影响 Java 应用程序,还影响使用该功能的任何服务,所以该漏洞的影响范围非常的广泛。虽然维护人员正在评估该漏洞的危害范围,但是由于该插件非常受欢迎,被数百万企业应用程序和服务所使用,所以目前无法对影响范围做出具体的评估。

每个人都知道安全的重要性,安全本身并不是一个能够创造价值的功能,反而更像是需要消耗价值以确保功能稳定的功能。网络攻击成功的可能性以及潜在损失的程度是难以预估的,虽然好多人正在通过漏洞修补方式来解决问题,但该漏洞带来的影响可能会持续三四年之久。