隐身的艺术:滥用404页面的新型Magecart活动

安全
Akamai研究人员发现,一种复杂且隐蔽的Magecart web skimming活动已经瞄准Magento和WooCommerce网站。

近日,Akamai安全情报小组的研究人员发现,一种复杂且隐蔽的Magecart web skimming活动已经瞄准Magento和WooCommerce网站。此外,一些食品和零售行业的大型组织也都受到了影响。

调查显示,这场活动已经持续了数周甚至更长时间。更糟糕的的是,这次活动使用了前所未见的高级隐藏技术,令人吃惊之余又不免担忧。

一、新型Magecart攻击活动

Magecart攻击通常从利用目标网站中的漏洞或感染这些网站正在使用的第三方服务开始。而在此次活动中,研究人员检测到的所有受害网站都被直接利用,因为恶意代码片段被注入了他们的第一方资源中。在某些情况下,恶意代码被插入到HTML页面中;在其他情况下,它被隐藏在作为网站一部分加载的某个第一方脚本中。

与许多其他Magecart攻击活动一样,此攻击活动的攻击基础结构由三个主要部分组成:加载程序、恶意攻击代码和数据渗漏(见图1)。

  • 加载程序——简短、晦涩的JavaScript代码片段,负责加载攻击的完整恶意代码;
  • 恶意攻击代码——执行攻击的主要JavaScript代码,负责检测敏感输入、读取数据、中断签出过程并注入假表单;
  • 数据渗漏——用于将窃取的数据传输到攻击者控制的C2服务器。

【图1:Magecart攻击基础设施】

研究人员解释称,将攻击分为三个部分的目的是隐藏攻击,使其更难以被发现。这允许在特定目标页面上激活完整的攻击流程;也就是说,由于攻击者使用的混淆措施,整个攻击流的激活只能发生在攻击者想要执行的地方。这使得攻击更加隐蔽,更难以被安全服务和外部扫描工具检测到。

尽管大多数Magecart活动在流程和阶段上都存在相似之处,但将一个活动与另一个活动区分开来的是攻击者使用的各种隐藏技术。这些技术被用来掩盖攻击的基础设施、行动痕迹、复杂化检测与逆向工程,并最终延长攻击时间。

二、活动的三种变体

研究人员发现,该攻击活动存在三种不同的变体,展示了攻击的演变以及攻击者随着时间的推移所做的改进,目的是逃避针对该攻击活动的检测和缓解。以下为三个变体的概述:

  • 前两个变体非常相似,只有加载程序部分的细微差异。
  • 第三个版本是独特的,因为攻击者使用网站默认的404错误页面来隐藏他们的恶意代码;这是一种前所未见的创造性隐藏技术。

接下来,研究人员详细分析了三个变体的技术细节。

三、变体1

研究人员最初在一家大型企业的网站上发现了一些可疑代码片段,在对其进行分析后,研究人员发现它们是恶意编码的JavaScript加载程序,这些加载程序仍然存在并在网站上活跃。这一发现促使他们进一步调查,并揭示了整个活动及其对众多网站的影响。

1.变体1加载程序

该skimmer成功地将带有onerror属性的错误格式HTML图像标签注入被利用的网站(见图2)。该属性包含混淆的base64编码恶意加载程序代码片段。图像标签的src属性故意为空,目的是防止网络请求,并触发包含混淆的恶意JavaScript代码片段的内联onerror回调的执行。

为了执行JavaScript代码而使用图像标记是一种不太常见但更复杂的技术。它可以帮助skimmer绕过安全措施,例如通常分析网络流量的外部扫描仪,这些措施在此特定情况下不会触发。混淆后的代码将在页面的上下文中执行,并像由页面本身发起的本地第一方脚本一样运行。

【图2:变体1加载器-带有onerror属性的格式错误HTML图像标签,其中包含恶意加载器代码】

2.解码加载程序代码—运行时

一旦混淆的base64编码代码在运行时执行,它就会转换为纯JavaScript,并负责启动WebSocket通道(见图3)。该通道充当浏览器和攻击者的C2服务器之间的双向通信链接。

事实上,这并非是第一次在Magecart攻击中检测到WebSockets。WebSocket被认为是一种更隐匿、更灵活的通信方法,允许攻击者利用单个网络通道实现各种目的。这包括将攻击的不同部分从C2服务器发送到浏览器(反之亦然),以及在某些场景中促进数据渗漏活动。

代码的另一个值得注意的方面是机器人(bot)检测,它检查用户代理是否处于自动化控制之下。如果是这种情况,代码将终止其执行。这是一种智能的反机器人技术,旨在避开可能检测到攻击的外部安全扫描仪和沙箱。

【图3:解码的变种1加载程序JavaScript代码】

3.Websocket通信流程

一旦建立了WebSocket通道,第一个消息就从攻击者的C2服务器发送到浏览器。该消息作为base64编码的字符串传输,其中包含一行JavaScript命令,指示浏览器发送回页面的当前URL。

此步骤的目的是使C2服务器能够确定当前页面是结账(敏感)页面(checkout page)还是任何其他非结账页面。这样,攻击者就可以相应地调整接下来的步骤。

这种简单的服务器端验证使攻击者能够仅在相关的目标页面上激活攻击,从而避免在非敏感页面上暴露。这一案例突出了skimmer为逃避安全服务和外部扫描仪的检测所做的努力。

当C2服务器识别出结帐页面URL时,流程将进入下一个阶段。在此步骤中,将向浏览器发送另一条消息。它是一个长base64编码的字符串,包含了整个攻击代码。解码后,显示了冗长且混淆的JavaScript代码(见图4)。

该代码负责在目标敏感页面上执行各种恶意活动,其目标是读取用户的敏感个人和信用卡数据,并将其传输回skimmer的C2服务器。

随后,包含敏感被盗数据的混淆数据渗漏消息就会从浏览器发送到C2服务器。如前所述,与XHR、fetch或HTML资源请求等更传统的通信方法相比,使用相同的WebSocket通道来加载完整的恶意代码和渗漏被盗的数据可以使该过程更隐匿,并且涉及更少的网络请求。

【图4:结帐页面上的WebSocket流程】

四、变体2

1.变体2加载程序

变体1和变体2的主要区别就在加载程序部分。在变体2中,skimmer插入了一个内联脚本,其中的代码片段与Meta Pixel(一个著名的Facebook访问者活动跟踪服务)代码片段非常相似,并在其中添加了几行代码(见图5)。

这些添加的行是实际的加载程序部分,而周围的Meta Pixel代码是一个误导性的掩护,使它看起来像是一个合法且不可疑的代码片段。

这种隐藏技术使恶意代码片段看起来像是谷歌标签管理器或Facebook等知名服务,因而在最近的Magecart活动中越来越受欢迎。它允许skimmer逃避外部扫描仪和研究人员的静态分析。

【图5:变体2加载程序—内联脚本伪装成Meta PIxel代码片段,内部带有恶意加载程序】

2.请求图像

当研究人员仔细检查虚假Meta Pixel代码片段中的可疑行时,发现它似乎是从网站自己的目录中获取PNG图像。该网络请求似乎是对网站上托管的无害图像的典型请求。然而,当进一步检查该图像的实际内容时,研究人员发现它并不像看起来那般无害(见图6)。

【图6:网络图像请求已被攻击者篡改并包含恶意代码的图像】

3.图像二进制数据内的恶意JavaScript代码片段

PNG图像的二进制数据包含一个附加在图像二进制文件末尾的base64编码字符串(见图7)。这个字符串随后被加载程序代码片段提取、解码并执行(见图8)。解码后的字符串展示了一个JavaScript代码片段,该代码片段与在变体1加载程序的onerror属性中找到的代码片段相同。

后续步骤基本与变体1保持不变。该代码片段在运行时转换为纯JavaScript代码,并负责启动连通攻击者C2服务器的WebSocket通道,随后的步骤如前所述。

【图7:包含隐藏恶意代码的图像二进制数据】

【图8:恶意代码最初以Base64编码并隐藏在图像中,解码后显现】

五、变体3

现在,到了最精彩的部分。虽然此前发生过类似的攻击,但这次绝对是独一无二的,其复杂和创新程度让研究人员大吃一惊。

1.变化3加载程序:相同,但又完全不同

乍一看,这个加载程序与变体2中的加载程序类似,但仔细研究会发现这是一个完全不同的场景。在某些情况下,这个加载程序伪装成Meta Pixel代码片段,如变体2所示(见图9)。但在其他情况下,它会被注入到页面上的随机内联脚本中(见图10)。

该加载程序第一个值得注意的方面是对一个名为“icons”的相对路径的获取请求。

【图9:变体3加载程序—伪装成Meta Pixel代码片段的恶意代码片段】

【图10:变体3加载程序—隐藏在任意内联脚本中的恶意代码片段】

2.404错误?真的吗?

加载程序执行后,攻击者会向/icons发送一个获取请求,这是一个实际不存在的相对路径。此请求会导致“404 Not Found”错误(见图11)。在分析响应中返回的HTML后,它看起来像是网站的默认404页面(见图12)。这让研究人员怀疑自己发现的受害网站上的skimmer是否不再活跃。

【图11:加载程序向不存在的路径发起请求,返回404错误】

【图12:默认错误页面HTML】

3.永远不要低估加载程序

为此,研究人员后退一步,重新分析了加载程序,找到了缺失的那块拼图。研究人员发现,该加载程序包含字符串“COOKIE_ANNOT”的正则表达式匹配,这应该在作为图标请求的一部分返回的404错误页面上执行。

因此,研究人员开始在返回的404 HTML中搜索这个字符串,结果发现隐藏在页面末尾的注释包含“COOKIE_ANNOT”字符串(见图14)。在这个字符串的旁边,连接了一个长base64编码的字符串。这个编码的字符串显示了整个混淆的JavaScript攻击代码。加载程序从评论中提取该字符串,对其进行解码,然后执行攻击,其目的是窃取用户输入的个人信息。

研究人员还模拟了对不存在的路径的其他请求,它们都返回相同的404错误页面,其中包含带有编码恶意代码的评论。这些检查确认攻击者成功更改了整个网站的默认错误页面,并在其中隐藏了恶意代码!

【图13:加载程序变体3—字符串“COOKIE_ANNOT”的regex匹配。】

【图14:隐藏在错误页面HTML中的恶意编码注释】

六、数据渗漏

1.虚假表单

与变体1和变体2相反,攻击者在变体3中使用了一种不同的常见数据渗漏技术——注入假表单(见图15)。这种技术通常在skimmer无法访问敏感输入时使用。

当网站使用第三方支付服务,在第三方iframe或外部页面中实现支付表单时,就会发生这种情况。为了绕过这些场景,攻击者创建了一个与原始支付表单非常相似的假表单,并将其覆盖——这种技术正日益流行。这就是变种3中窃取数据的方式。

【图15:恶意代码注入的假表单】

当用户向攻击者的假表单提交数据时,将显示错误,隐藏假表单,显示原始付款表单,并提示用户重新输入付款详细信息(见图16)。

【图16:假表单被隐藏并提示用户重新输入信息】

2.带有被盗数据的图像请求

提交假表单会向攻击者的C2服务器发起一个图像网络请求,在查询参数中以base64编码的字符串的形式携带所有被盗的个人和信用卡信息(见图17)。解码后,该字符串揭示了请求的真实意图,整个攻击流程也变得清晰起来。

【图17:图像请求以base64编码的字符串查询参数形式呈现】

七、从变体3中吸取的教训:404案例

这种隐藏技术是非常新颖的,且在之前的Magecart活动中从未出现过。操纵目标网站的默认404错误页面的想法可以为Magecart威胁行为者提供各种创造性的选择,以改进隐藏和逃避技术。

在撰写本文时,恶意加载程序已经从受影响网站的页面上删除。然而,默认404页面中的恶意评论仍然存在,这可能使skimmer很容易重新激活攻击。这突出了检测的复杂性以及缓解这种方法的重要性和迫切性。

对指向404页面的第一方路径的请求是另一种逃避技术,它可以绕过内容安全策略标头和其他可能正在积极分析页面上的网络请求的安全措施。这无疑是最近出现的最复杂的Magecart策略之一。

八、结语

这一活动强调了一个事实,即web skimming正在不断发展。它们变得越来越复杂,这使得通过静态分析和外部扫描进行检测和缓解变得越来越具有挑战性。这个领域的威胁行为者总是能找到更好的方法,来隐藏他们在受害者网站中的攻击行为,并逃避各种可能暴露他们的安全措施。

这项研究强调的复杂性应该提醒组织保持警惕,关注web skimming攻击向量,并积极寻求新的和先进的方法来处理这些类型的攻击。

原文链接:https://www.akamai.com/blog/security-research/magecart-new-technique-404-pages-skimmer

责任编辑:赵宁宁 来源: FreeBuf.COM
相关推荐

2018-02-08 09:04:58

Nginx404页面方法

2018-01-12 14:50:50

404错误网络连接404页面

2018-02-06 09:39:45

404错误页面错误

2011-05-10 14:49:30

SEO404页面

2022-08-09 21:42:33

FacebookMeta攻击

2018-03-18 09:09:22

IT CIO

2011-05-11 17:18:14

404

2011-05-18 16:09:10

404错误页面

2021-08-26 05:21:41

WordPressAggah网络钓鱼

2024-07-12 09:01:37

404页面代码

2009-07-03 18:12:49

JSP页面

2024-03-11 16:03:59

2011-05-24 15:47:08

网页制作

2023-07-28 12:50:01

2021-11-16 21:21:02

Magecart网络攻击网络安全

2020-12-22 10:19:32

网络攻击Magecart木马(RAT)

2013-02-27 09:02:44

安全宝404

2022-07-31 23:56:23

Magecart网络攻击

2021-08-17 10:40:52

Chrome隐身模式浏览器

2024-08-28 16:13:27

点赞
收藏

51CTO技术栈公众号