JSFireTruck:使用 JSF*ck 作为混淆技术探索恶意 JavaScript

admin 2025年6月14日22:46:06评论15 views字数 4710阅读15分42秒阅读模式
JSFireTruck:使用 JSF*ck 作为混淆技术探索恶意 JavaScript

执行摘要

我们最近发现了一个大规模攻击活动,该活动通过注入经过混淆的 JavaScript 代码来入侵合法网站。威胁行为者通常使用此类攻击活动,将受害者从合法网站无形地重定向到提供恶意软件、漏洞利用程序和垃圾邮件的恶意页面。

该攻击活动使用了一种名为 JSF*ck(亵渎语言掩码)的 JavaScript 混淆技术。由于该术语中含有粗言秽语,本文后续部分将使用 JSFireTruck 来指代该方法。

我们的主要发现是:

  • 多个网站被发现注入了使用 JSFireTruck 混淆的恶意 JavaScript,其主要由符号[]+${}组成

  • 代码的混淆隐藏了其真实目的,阻碍了分析

  • 注入的代码会检查网站引荐来源,如果引荐来源是搜索引擎,则代码会将受害者重定向到恶意 URL

  • VirusTotal 上的追溯搜索和我们的内部遥测发现了数千个相关样本,表明这是一场影响许多网站的广泛感染活动,

  • 注入的 JavaScript 会将用户重定向到可能导致恶意软件下载或其他有害活动(如恶意广告和流量货币化)的网站

此次攻击活动的规模和隐秘性构成了重大威胁。这些感染的广泛性表明,攻击者正在协同行动,试图入侵合法网站,并将其作为进一步恶意活动的攻击媒介。

背景

攻击者入侵合法网站后,这些网站会悄悄地将访问流量重定向,用于各种恶意目的,例如恶意软件下载、流量变现或恶意广告。我们最近的遥测数据发现,大量网站被注入了恶意混淆的 JavaScript,如下图 1 所示。

JSFireTruck:使用 JSF*ck 作为混淆技术探索恶意 JavaScript

图 1. HTML 页面中发现的恶意注入 JavaScript 示例。

乍一看,这段 JavaScript 代码由一些类似[]+${}的字符和一些数字组成。代码的用途并不明显,这促使我们进行了进一步调查。我们很快发现,这段代码部分实现了JSFireTruck 编程技术。

我们的遥测检测到,在 2025 年 3 月 26 日至 2025 年 4 月 25 日的三个月内,使用 JSFireTruck 感染了 269,552 个网页的 JavaScript 代码。该数据如下图 2 所示。

JSFireTruck:使用 JSF*ck 作为混淆技术探索恶意 JavaScript

图 2.遥测数据显示受感染页面超过 200,000 个。

如图 2 所示,从 2025 年 4 月 12 日开始,我们发现此活动的检测数量显着增加。最终,此活动范围广泛,并感染了许多网站。

分析 JavaScript 混淆

注入的经过 JSFireTruck 混淆的 JavaScript 代码使用有限的字符和数字,如图 3 所示。

JSFireTruck:使用 JSF*ck 作为混淆技术探索恶意 JavaScript

图 3. HTML 页面中发现的注入代码仅包含[ , ] , ( , ) , ! , +和数字。

与我们通常发现的恶意注入 JavaScript 代码示例相比,这出乎意料,因为乍一看,没有任何变量或函数名看起来会被执行。但公开信息表明,这段代码中的符号是用于 JSFireTruck 的 ASCII 字符。

JSFireTruck 是早期 JavaScript 混淆技术JJEncode的一个分支,该技术最初于 2009 年发布。这项早期技术曾在之前的攻击活动中用于混淆 JavaScript,例如 Kahu Security 于 2013 年对一个被入侵的汽车论坛的分析。JJEncode 使用以下 18 个 ASCII 字符:[]()!+,"$.:;_{}~=

2012 年 8 月,名为aemkei 的用户为 JSFireTruck 创建了一个 GitHub 存储库,他们将 ASCII 字符的数量减少到以下六个符号:

[]()+

上图 3 中的示例似乎将 JSFireTruck 与其他混淆技术结合在一起。

通过类型强制进行 JavaScript 混淆

JavaScript 有不同的值类型,例如字符串、数字、布尔值、数组和对象。如果我们同时使用两种不匹配的值类型,例如字符串和数字,JavaScript 会使用类型强制转换来使代码正常工作。类型强制转换会导致将值从一种类型转换为另一种类型。

类型强制转换有很多用途,比如在 JavaScript 代码中将数字显示为字符串。例如,toString()方法会将数值显示为 ASCII 字符串。

JSFireTruck 依赖于类型强制,它会自动将其有限的符号集转换为未混淆的 JavaScript 代码中使用的各种 ASCII 字符或数字值。

例如,要生成数字值零,我们可以使用以下字符:

+[]

如果我们在 Chrome 或 Edge DevTools 中调试字符+[],我们会发现这些字符转换为零值,如下图 4 所示。

JSFireTruck:使用 JSF*ck 作为混淆技术探索恶意 JavaScript

图 4.使用 DevTools 将 JavaScript 代码+[]转换为其数值零。

这怎么可能呢?在 JavaScript 代码中,[]表示一个空数组,如果我们在其前面加上+,JavaScript 会使用类型强制转换将空数组值转换为数字。由于[]不包含任何值,因此使用+会将其转换为零值。

使用这种方法,我们可以用以下字符生成数字1 :

+!![]

因为[]数组为空,所以在其前面加上!会将其转换为布尔值False。再加一个!会将其转换为布尔值True。在整个字符串前面加上+会将其转换为数值。将True转换为数字时,其值为1。

我们可以通过添加相同的+!![]文本来生成其他数字,这表示额外的值1。例如,我们可以从以下代码生成数字2:

+!![] + +!![]

我们可以通过以下方式生成数字 3:

+!![] + +!![] + +!![]

类似地,我们可以通过在字符串中添加更多+!![]文本来增加数值。

我们也可以用这种方法生成字符。例如,要创建字符a,我们可以使用以下代码

(![] + [][1]

在此示例中,如前所述, ![]变为布尔值False 。添加空数组[]的符号将生成字符串![]+[],表示False +无值。JavaScript 使用类型强制将![]+[]转换为 ASCII 字符串False。

要选择单词F a lse的第二个字母,我们需要字符串的第一个偏移量(第二个字符)。我们将原始符号括在括号中,并将偏移量设为1 ,因此(![]+[])[1]就是生成字母a的代码。

图 5 显示 Edge DevTools 确认(![]+[])[1]生成字母a。

JSFireTruck:使用 JSF*ck 作为混淆技术探索恶意 JavaScript

图 5. DevTools 中的 JavaScript 代码分析展示了如何使用这种方法生成字符a 。

以类似的方式,我们可以使用以下字符串生成字符b :

({}+[][2]

在此示例中,{}表示一个空对象。添加表示空数组的符号[]会生成字符串{}+[]。JavaScript 的类型强制转换会将{}+[]更改为 ASCII 字符串[object Object]。要从字符串[o b ject Object]中选择单词 object 的第二个字母,我们需要该字符串的第二个偏移量(第三个字符)。我们将原始符号括在括号中,并使用2作为偏移量,因此({}+[])[2]是生成字母b的代码。

图 6 显示 Edge DevTools 确认({}+[])[2]生成字母b。

JSFireTruck:使用 JSF*ck 作为混淆技术探索恶意 JavaScript

图 6. DevTools 中的 JavaScript 代码分析展示了如何使用这种方法生成字符b 。

通过使用不同的符号和术语组合,JavaScript 的类型强制转换可以生成各种 ASCII 字符串。我们可以使用 offset 方法从生成的字符串中选取字母表中的每个字母和不同的符号。图 7 展示了在 DevTools 中分析的示例,结果分别为字母c、d、e和f。

JSFireTruck:使用 JSF*ck 作为混淆技术探索恶意 JavaScript

图 7. DevTools 中这种混淆方法的示例,生成字母c、d、e和f。

通过这种方法,我们可以进一步将符号精简为 JSFireTruck 使用的六个:[,],(,),!和+。例如,我们可以从以下字符生成字母a和b :

a = (![]+[])[+!![]]b = ({}+[])[+!![] + +!![]]

使用 JSFireTruck 混淆技术,只需六个字符即可混淆任何 JavaScript 代码。此外,攻击者还可以将 JSFireTruck 与其他混淆技术结合使用,使恶意 JavaScript 代码更难以被防御者分析。

但使用这些混淆技术有两个缺点:

  • 混淆代码通常涉及大量文本

  • 由于重复使用相同的字符,即使不容易分析,混淆的代码也很容易被检测到

恶意代码示例

现在我们明白了如何仅用六个字符就能表示任何 JavaScript 代码。恶意软件作者使用这种技术来增加代码分析的难度。

在我们的分析过程中,我们发现数千个网站的网页中都注入了这种类型的混淆 JavaScript。

下面的图 8 显示了String.fromCharCode函数之后注入脚本的示例。

JSFireTruck:使用 JSF*ck 作为混淆技术探索恶意 JavaScript

图 8.从String.fromCharCode函数开始注入代码的示例。

值得注意的是,混淆后的脚本包含一个额外的String.fromCharCode函数,它提供了另一个混淆层。

解码混淆脚本

我们可以通过各种公开可用的 JSFireTruck 反混淆器来解码图 8 中所示的混淆 JavaScript。我们使用其中一种工具实现了解码过程的自动化。

当图 8 中的脚本被解码时,输出似乎被进一步混淆,如图 9 所示。

JSFireTruck:使用 JSF*ck 作为混淆技术探索恶意 JavaScript

图 9.解码后的 JSFireTruck 脚本显示它被进一步混淆了。

解码后的脚本仍然保持混淆状态,使用数组变量$。然后,它访问该数组中不同索引处的值。

这些数组变量存在于图 10 所示的脚本中。

JSFireTruck:使用 JSF*ck 作为混淆技术探索恶意 JavaScript

图 10. 注入的代码显示使用String.fromCharCode函数作为数组。

如果我们解码这些字符数组,并用它们替换前面 JavaScript 中使用数组$[index] 的字符,我们将得到下面图 11 所示的结果。

JSFireTruck:使用 JSF*ck 作为混淆技术探索恶意 JavaScript

图 11.解码的 JavaScript 代码显示将注入 HTML 页面的 iframe 代码。

解码后的脚本会检查document.referrer属性,这意味着流量肯定来自其他来源,而不是直接在浏览器地址栏中输入 URL 或域名。在本例中,脚本会检查来自众多热门搜索引擎之一的引荐来源。然后,根据所使用的搜索引擎,脚本将使用页面中存在的随机ElementID ,并使用上图 11 中以蓝色突出显示的innerHTML属性添加一个包含恶意域名的 iframe。这确保了来自这些搜索引擎的流量被重定向到注入的链接。

该脚本还会提取查看器 URL 中#字符后面的数据。然后,它使用atob函数解码该数据中的 Base64 文本,并使用innerHTML属性注入另一个 iframe(图 12)。

JSFireTruck:使用 JSF*ck 作为混淆技术探索恶意 JavaScript

图 12. 如果引荐不是来自任何搜索引擎,那么它将使用 URL 中的代码。

在图 11 和 12 中,iframe 的代码包含一个 CSS 属性z-index,其值为30000,并且 iframe 的宽度和高度值为 100%,左侧和顶部为零。使用这些值,iframe 将覆盖整个浏览器窗口并隐藏原始内容。这意味着攻击者只能与 iframe 中的内容进行交互,而无法与网页的实际内容进行交互。这是点击劫持、网络钓鱼攻击和恶意重定向中常用的一种技术。

图 13 显示了重定向后的合法网站页面,可下载 ZIP 存档。

JSFireTruck:使用 JSF*ck 作为混淆技术探索恶意 JavaScript

图 13. 重定向后,iframe 显示欺骗托管服务的内容并指向可疑的 ZIP 存档。

在图 13 中,请注意浏览器窗口右侧包含两个滚动条。外部滚动条用于合法网页,而内部滚动条用于 iframe。

结论

该分析展示了使用 JSFireTruck 混淆的恶意 JavaScript 如何将受害者重定向到非预期的网站和不需要的内容。

网站注入是一种常见的攻击手段。每天都有成千上万的合法网站以这种方式遭到入侵。这些被入侵的合法网站可能会包含恶意内容,例如提供不良内容的页面、漏洞利用程序或恶意软件。

网站管理员必须使用最新的安全更新来保持其网络服务器的更新,并且管理员还应该分析其网络服务器是否存在任何感染或泄露的迹象。

Palo Alto Networks 客户可以通过以下产品更好地抵御上述威胁:

  • 我们已根据本研究中分享的 IoC 审查并更新了高级 WildFire 机器学习模型和分析技术。

  • 高级 URL 过滤和高级 DNS 安全可将托管类似混淆 JavaScript 的 URL 和域识别为恶意 URL 和域。

原文始发于微信公众号(Ots安全):JSFireTruck:使用 JSF*ck 作为混淆技术探索恶意 JavaScript

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年6月14日22:46:06
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   JSFireTruck:使用 JSF*ck 作为混淆技术探索恶意 JavaScripthttps://cn-sec.com/archives/4165318.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息