本文经过更新,包含关于最新Log4j版本发布、新的漏洞利用向量以及与所有Java版本相关的风险细节。
就在广大赛车爱好者们观看维斯塔潘与汉密尔顿的F1冠军争夺战时,广大互联网企业正被一起突发事件吓得魂不附体。
普通用户们可能没有注意到,因为Twitter、Facebook、Gmail乃至其他我们日常使用的服务并未因此陷入宕机。但就在近日,Log4j开源技术中的一个bug在全球信息安全社区中引发恐慌。
该bug已经影响到数十亿台设备,相关企业也在争先恐后地安装修复程序;而开源社区这边已经意识到一个更深层次的问题——从哪里找钱来养活支持Log4j这类开源项目的志愿者们。
在深入讨论这么多复杂议题之前,我们先简要了解一下Log4j技术与安全问题的背景。
Log4j是什么?
Log4j 2是一套基于Java的开源日志记录框架,属于任何人都能免费使用的Apache Foundation服务之一。众多企业都在使用这款日志记录软件跟踪自己的服务器(甚至是客户端应用程序)上的各类活动。
例如,在我们访问网站时,这款记录器就会注册下我们的IP地址、浏览器及所访问的页面。利用这些与活动密切相关的数据,企业就能解决他们服务中出现的任何问题。
因为Log4j库基于Java,所以该框架支持的数十亿台设备都可能因其安全漏洞而身陷风险。
Log4j到底有什么bug?
上周被编目为CVE-2021-44228的这一漏洞允许攻击者通过特制字符串远程执行代码。由于Log4j普及度极高,网络犯罪分子可以轻松操作日志字符串、进而控制目标服务器或客户端。
之所以存在此项bug,主要原因是Log4j的某些版本允许通过目录查找协议(LDAP协议)执行任意文本。
各位非技术人员请注意,此番 #log4j问题正令整个互联网陷入危机。而引起这一切的关键,正是一段简单的“${jndi:ldap”字符串#Log4Shell#log4jRCE
⬇️
— Emy | eq (@entropyqueen_) 2021年12月11日
彭博社最新发布的一份报告表明,此项漏洞是由阿里巴巴团队的一位安全研究员于11月24日首次上报给Log4j项目维护者。
谁会受到影响?
老实讲,更简单的问法应该是“不会影响到谁?”Log4j的开源特性外加广泛的兼容性使其成为一套出色的解决方案,包括苹果、微软、Steam、Twitter、百度及Cloudflare在内的众多厂商都在实际使用。
因此Log4j漏洞的消息一出,各大企业就在争相扫描服务器以检查自身是否面临风险。
通过对使用Apache Log4j(Java日志记录库)的多台主机执行大规模扫描,结果发现其确实易受到远程代码执行漏洞的影响 (https://t.co/GgksMUlf94)。
请通过我们的API查询"tags=CVE-2021-44228"以获取源IP地址及其他IOC。#threatintel
— Bad Packets (@bad_packets) 2021年12月10日
也有程序员测试了各类站点及服务以检查攻击的潜在影响范围;感兴趣的朋友可以点击此处查看完整清单。

图示:根据IP地址可以看到,Twitter正在广泛使用Log4j服务
好消息是,有媒体发现不少企业都部署了多道防火墙以抵御网络攻击。因此即使某些服务器可能受到Log4j攻击活动的影响,其他安全系统也能有效阻断攻势。
这个问题最早发现自《我的世界》站点,有研究人员发现向服务器传递特定字符串、甚至通过游戏中的聊天框即可令系统陷入攻击者的控制。网络基础设施厂商Cloudflare公司CEO Matthew Prince发表推文称,该公司将向全体客户提供一系列针对性保护措施,使用免费套餐的客户也将被纳入其中。
我们已经确定#Log4J 问题相当严重,因此将尝试在默认情况下至少为全体 @Cloudflare客户提供一定程度的保护,其中包括不享受WAF防火墙服务的免费客户。我们正在研究如何安全地达成保护目标。
— Matthew Prince (@eastdakota) 2021年12月10日
值得一提的是,Log4j甚至可能影响到某些运行有Java服务器组件的智能设备。所以大家的智能烤面包机也有可能成为黑客攻击的目标……虽然似乎没什么意义。
数据安全平台LunaSec也在官方博文中对该漏洞的潜在影响做出了着实的技术解释。
最后,让我们用一条推文概括Log4j的使用范围究竟有多广。
大家听说过2020年登陆火星的机智号漫游车吗?它也是由Apache Log4j提供支持的哦。
https://t.co/gV0uyE1ylk#Apache#OpenSource#innovation#community#logging#servicespic.twitter.com/aFX9JdquP1
— Apache – The ASF (@TheASF) 2021年6月4日
有什么缓解措施?
就在bug曝光数小时之后,Apache基金会的安全团队就发布了新的Log4j版本(v15.0),其中包含保护系统免受攻击的补丁。
《我的世界》开发商Mojang Studios还发布了一份指南,帮助运行官方游戏客户端及游戏服务器的用户们快速修复bug。指南还警告说,其他运行第三方游戏客户端的用户恐怕需要等待相应供应商发布修复补丁。另外,瑞士政府计算机响应小组(CERT)也以图片形式在Twitter上发布了易于理解的预防指南。
请注意:我们发现大量针对#log4j漏洞的扫描,并决定发布这篇包含指导意见的博文::https://t.co/dtEXfY1G16
请立即安装补丁! pic.twitter.com/HSedlSed0V
— GovCERT.ch (@GovCERT_CH) 2021年12月12日
Red Hat及VMWare等厂商也发布了自己的漏洞修复补丁。各位服务器管理员朋友,请点击此处参考多篇服务器安全博文以了解详尽的缓解策略。一位GitHub用户还制作了非常实用的补丁列表,其中列出了包括Netflix、Citrix、Docker及甲骨文在内的多家厂商发布的补丁。
Apache也已经发布了Log4j框架的2.16.0版本,此次更新完全删除了邮件查找功能以消解安全威胁。此外,新版本还禁用了指向消息或其参数中所包含查找信息的自动解析功能。
一切才刚刚开始
虽然服务供应商和开源社区正日以继夜地努力解决问题,希望尽可能保护一切使用Log4j的系统,但真正的威胁仍然悬于我们头顶。
根据Bleeping Computer昨晚发布的报道,攻击者正利用这一漏洞安装加密货币挖矿软件、恶意软件,并部署大规模DDoS(分布式拒绝服务)僵尸网络。微软的威胁情报团队也注意到,不少攻击者正在利用Colbat Strike渗透检测工具开展凭证盗窃。
Sophos高级研究研究员Sean Gallagher也表示,这家安全厂商已经检测到大量远程代码执行尝试:
自12月9日以来,Sophos已经检测到数十万次使用Log4Shell漏洞进行的远程代码执行尝试。最初的尝试主要来自安全研究人员及潜在攻击者执行的概念验证(PoC)漏洞利用测试,外加自我检测性质的在线漏洞扫描。在此之后,攻击者开始尝试安装挖矿程序,包括Kinsing矿工僵尸网络。
最新情报还表明,攻击者正试图利用此项漏洞窃取亚马逊云科技(AWS)账户中使用的密钥。
安全研究员Greg Linares在推文中表示,恶意攻击者可能正在构建一种蠕虫,用于通过Log4j漏洞攻击大量服务器、进而造成损害或索取赎金。
#Log4J 据我所见,有证据表明接下来的24到48小时内将出现一种专门针对这项漏洞的蠕虫程序。
这种病毒能够自我传播,并在受感染的端点上建立起自托管服务器。
除了制造流量、渗漏文件之外,它还将具备c2c功能。
— Greg Linares (@Laughing_Mantis) 2021年12月12日
美国网络安全与基础设施安全局(CISA)也发布了警告,指出该漏洞“正在被愈发广泛的恶意攻击者所利用;鉴于影响的广泛性,网络防御一方正面临着紧迫挑战。”该局建议各组织禁用运行有Log4j的一切面向外部的设备,并根据漏洞相关特性设置规则以增强现有防火墙的安全水平。
安全研究人员昨晚发现,Log4j bug会影响到所有Java版本。因此即使大家运行的Java已经是最新版本,也仍然需要额外安装Log4j修复补丁。
JNDI-Exploit-Kit中刚刚添加了对LDAP序列化载荷的支持。所以只要序列化载荷中使用的类位于应用程序的classpath当中,那么此次漏洞就会影响到*一切* java版本。别以为使用最新版本的java就安全无忧了,请尽快更新您的log4j!pic.twitter.com/z3B2UolisR
— Márcio Almeida (@marcioalm) 2021年12月13日
The Verge网站的一份报告指出,如果研究人员将设备名称更改为能够利用漏洞的特定字符串,就能从苹果和特斯拉等服务器处获取ping权限。
开源社区贡献者报酬过低问题已经引起公愤
此次发现的Log4j bug再次表明,全球大型企业正高度依赖于免费开源软件。这种依赖性本身并没有问题,但开源社区贡献者报酬过低的问题已经引起公愤。
谷歌公司密码学家Filippo Valsorda在自己的个人博客上提到,修复Log4j bug的兼职维护者们为项目做出了巨大贡献,但该项目在GitHub上只有三个赞助者愿意为项目志愿者们支付酬金。
他还指出,贡献者只能通过GitHub或Patreon获得少量资金回报,但他们的开发成果却往往支撑着价值数百万美元的业务。另外,这些重要系统中的bug很可能令整个互联网瞬间倾覆,我们也没理由对这些只是拿业余时间以几乎免费方式参与贡献的平民英雄们要求太多。
这些维护者们正在修复可能导致数百万美元(甚至再高几个数量级)损失的严重漏洞。
“我用业余时间研究Log4j。”
“一直梦想能全职从事开源工作。”
“有三位赞助者正在资助@rgoers的工作:Michael、Glenn与Matt。”
各位,我们在搞什么…… pic.twitter.com/2hAxUWCjuC
— Filippo ${jndi:ldap://filippo.io/x} Valsorda (@FiloSottile) 2021年12月10日
约翰霍普金斯大学密码学教授Matthew Green认为,开源行业需要一份真正具有广泛影响力的开源库与技术清单,以便更多人能够参与到这些对于互联网顺畅运行极为重要的项目当中。
好吧,我想强调的是,如果大家想要解决这个问题,那最紧急的资源可能并不是钱。“可见性”更为重要。我们都知道有问题,但不知道问题究竟在哪。
— Matthew Green (@matthew_d_green) 2021年12月11日
安全厂商Chainguard公司创始人Dan Lorenc表示,虽然企业有意愿资助开源项目,但却很难找到合适的关键项目、特别是项目维护者本人。他还提到,在理想状况下,整个行业可以直接资助那些负责维护三到四个项目的团队。
这听起来不太现实,但真正的难题在于如何分配、而非如何筹钱。毕竟互联网行业是出了名的有钱。
企业有预算、也愿意花钱,但却特别缺时间。遗憾的是,寻找真正需要帮助的项目、特别是愿意用精力和投入换取金钱的开源维护者才是真正的难题。pic.twitter.com/mFkOoOVYXn
— Dan Lorenc (@lorenc_dan) 2021年12月12日
贡献者们表示,他们通过开源贡献获得的报酬非常有限,单凭这一份工作也几乎维持不了生计。这样的境况只能用可悲来形容。
希望这个问题最终能唤醒行业注意到这群自发团结起来、愿意为保持互联网正常运转而努力的开源贡献者们。但愿这次暴雷不要仅仅激起一丝涟漪,不要止步于人们的口头讨论。
最后,让我们用XKCD漫画为这次事件作结。