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

Dark background with blue code overlay

使用 Secure Internet Access Enterprise 安全 Web 网关检测恶意 JavaScript

寫於

Jordan Garzon

May 13, 2022

寫於

Jordan Garzon

作者:Jordan Garzon

前言

想象一下,如果没有 JavaScript,世界会是怎样。我和我的同事在自己的职业生涯中都曾无数次思考过这个问题,就目前而言,很难想象没有 JavaScript 的世界。我就职于一家已经使用 JavaScript 多年的公司,因此很清楚它所面临的挑战,也深知它在业内的普及率。事实上,无论我们愿意与否,保护 JavaScript 仍然是我们使命的重要组成部分。

JavaScript 无处不在。对网站和移动应用程序的每个请求都会加载数十行 JavaScript 代码;所有浏览器都支持这类代码。它无处不在,无疑被视为一种关键技术,可以塑造网站的构建和运作方式。从事安全行业的所有人都知道,一项技术的重要性越高,被恶意利用的方式就越多。

由于 JavaScript 的普及率非常高,攻击者如果将其作为攻击目标和攻击手段,就能滥用 JavaScript 所提供的巨大攻击面来造成重大损失。2021 年 12 月发现的 Log4j 漏洞能迅速放大漏洞利用型攻击的规模,印证了大型攻击媒介的潜在影响。Log4j Java 库提供日志记录功能,而这是几乎所有开发人员都会用到的基本功能。这就是 JavaScript 漏洞与其他漏洞的不同之处:它广泛存在于生产环境代码中。

考虑到所有这些因素,一个永恒的问题立即浮上心头:“那么,我们可以 做些什么 ?”在看到 Log4j 所造成的破坏后,我们决定尝试明确回答这一问题,并展开了研究,以了解和检测恶意 JavaScript。这也是我今天撰写这篇文章的初衷。安全研究总是非常有趣,我们先是证实自己的理论,然后更进一步,尝试将其应用于现实世界中的一些具体场景。

在这篇博文中,我想向您介绍我们的研究情况,以及我们使用了哪些技术来识别和隔离恶意 JavaScript,以便在我们的产品中构建新功能。本文将审视 JavaScript 相关威胁形势,包括系统架构、所用算法,此外还提供了一个案例研究。

恶意 JavaScript 威胁形势

在进入正题之前,我们先来看一下怎样的形势促使恶意 JavaScript 成为如此值得关注的威胁媒介。我在上文中提到了 JavaScript 的普及率,但它的普及率到底有多高?了解这一因素可以让我们客观看待这一问题。下面概述了当今一些高度常见的 JavaScript 攻击。

浏览器漏洞利用攻击

关于这类威胁的严重性,我在此不做赘述。众所周知,几乎任何计算机用户都离不开浏览器和浏览器插件。The Browser Exploitation Framework Project(也称为 BeEF)提供了这方面的绝佳示例。BeEF 是一款专注于 Web 浏览器端(目前最大的客户端攻击媒介之一)的渗透测试工具,它能很好地发现漏洞利用攻击的可能性。

数据窃取工具

数据窃取工具是一种臭名昭著的攻击方法,这类攻击展示了网络安全如何在企业环境之外影响人们的生活,并与私人生活紧密关联。JavaScript 控制文档对象模型,因此它不仅可以修改生成的 HTML,还可以修改带下划线的 HTTP 请求。从用户点击按钮这样的简单操作即可以看出这一点。

任何带电商功能的网站都能提供这方面的实例。如果攻击者将恶意 JavaScript 注入一个良性网站,数据窃取工具捕获的所有信用卡凭据都可以转给攻击者。这类攻击的一个最为著名的案例就是 2018 年 英国航空公司网站遭受的 Magecart 攻击 ,攻击者通过此次攻击窃取了大约 380,000 个信用卡号。

自 2018 年以来,数据窃取方式发生了转变。如今攻击者常用的方法是在良性网站上将比特币地址替换为攻击者的地址, Lazarus group 在过去几年中一直使用这种攻击方法。

点击劫持

尽管这类攻击可以通过在良性网站上运行得到广泛传播,但与由攻击者完全控制的服务器相比,它的传播范围依然有限。如果攻击者可以让用户找上门,他们就会获得主场优势。这样,攻击者可以产生更大的影响。一旦受害者进入了自己的“地盘”,攻击者就可以让他们下载恶意软件,从他们的浏览会话中检索信息,并执行很多其他恶意活动。

其中典型的做法是通过合法 iframe 创建一个透明版本,让用户在点击该版本时产生虚假的安全感。这种 iframe 会将用户重定向到攻击者控制的服务器,这样他们就可以在其中运行各种恶意活动。

未经授权的加密货币挖矿

随着加密货币使用率迅速上升,加密货币挖矿在过去几年中备受关注。何不窃用用户电脑 CPU 的算力来给自己挖矿?更何况这只用一行 JavaScript 代码就能实现。作为这类攻击的著名代表,Coinhive 库据说已于 2019 年关闭,当然并非没有后来者,比如 CoinIMP 和 CryptoLOOT。

恶意 JavaScript 检测引擎——架构和算法

了解形势后,现在是时候介绍我们创建的解决方案了。将 JavaScript 插入网站的方法有两种:在原服务器中写入 JavaScript 文件,或者使用其他来源的现成文件,并将相应链接插入 HTML 页面。在代理端,我们将看到两个不同的 HTTP 请求,一个来自 HTML,另一个则来自 JavaScript 文件。在进入一个网站时,您的浏览器可能要执行数百个 HTTP 请求以呈现整个网站。

您还可以在 HTML 本身中写入 JavaScript 代码。随后,不需要为检索此类代码而发出额外的请求。在讨论如何检测恶意 JavaScript 时,需要一种方法来解决这两方面的问题,我们正是应此创建了解决方案。

我们的新引擎能够提取“内联”JavaScript 代码并对这些代码进行单独扫描。以下是 纽约时报 源代码页面的一段摘录,其中显示了以下两种类型的 JavaScript 代码:

其他

来自 纽约时报 网站 (https://www.nytimes.com/) 的 HTML 代码摘录(访问于 2022 年 2 月 2 日)

Akamai Secure Internet Access Enterprise 安全 Web 网关 (SWG) 由实时扫描流量的不同引擎组成。该网关还连接到我们的威胁情报,并通过我们的自定义算法得到了增强。

Enterprise Threat Protector 安全 Web 网关的概述 High-level overview of the Enterprise Threat Protector secure web gateway

 

让我们来看一下标有“JS Models”的红色框内部的组件:

数据库

这些模型依靠关系数据库来保存元数据,并通过存储供应商存储实际的 JavaScript 代码。

该数据库包含一个训练集,即我们添加过标签的数据。良性数据主要来自我们流量中发现的常用 JavaScript。恶意数据则来自以下各种来源:VirusTotal (VT)、其他算法的检测,以及我们实际检测到的恶意代码。因此,数据库会不断更新。

该数据库还包含测试集,基本上就是我们通过代理看到的最近几天的流量。

实时检测模型

为了实时检测恶意 JavaScript,我们使用在边缘部署的 YARA 规则。这些规则是基于训练集创建的。由于创建规则并非易事,因此我们在这篇 文章 的基础上,开发了一种可以自动生成 Yara 规则的算法。我们对该算法进行了调整,以便对 JavaScript 代码而非二进制文件进行分类,并更改了规则生成逻辑,这意味着我们可以 根据需要更新在 SWG 上运行的恶意 JavaScript 引擎。

使用 AutoYara 生成 YARA 规则的示例 Example of a YARA rule generated with AutoYara

通过机器学习模型扩充威胁情报

众所周知,研究人员在捕获 JavaScript 时会遇到的一个问题就是混淆。混淆技术(也被良性网站所使用)可以缩减代码,加大理解代码的难度。Katz 也于 2020 年 10 月就此话题撰写了一篇博客 文章

为了检测出这些代码,我们将我们的逻辑集成到一个受 JStap启发的模型中,该模型在以树状形式呈现代码的抽象语法树上运行,我们通过这种方式绕过了这项技术。

与 YARA 规则相比,机器学习模型的准确性更高。但要将该模型部署在边缘以实现实时扫描,则具有一定的挑战性。因此,我们采取了一种折衷的做法。我们的模型使用了相同的训练集进行训练,可以离线扫描流量(在 Azure 机器学习环境中),并使用所发现的信息来扩充威胁情报。

模型在每次连接到 SWG 时都会检查威胁情报,这样客户就可以从机器学习模型检测中受益。

实际效果——案例研究

使用现实生活中的示例可以很好地展示实际效果。2022 年 3 月 8 日,机器学习模型检测到托管在 cigarettesblog[.]blogspot[.]com 上的 JavaScript。

截至 2022 年 3 月 10 日,该域在 VT 上显示的检测次数为 0。

 

3 月 9 日看到的 cigarettesblog[.]blogspot[.]com 主页 Home page of cigarettesblog[.]blogspot[.]com seen on March 9

在以下摘录中,JavaScript 代码将所有 HTML 链接都替换为恶意 URL。

其中一个 URL hxxps://myprintscreen[.]com/soft/myp0912.exe(现在已在代码中进行注释)实际上会下载一个木马 (4a6ffa02ff7280e00cf722c4f2235f0e318e6cc8a2b9968639ba715f1a38c834),该木马已在 VT 上被检测出 23 次。很多供应商还在 VT 上将其他一些 URL 标记为恶意。

以下是恶意 JavaScript 的典型行为:替换页面上的 URL,向其他域发送 POST 请求(请参阅下面的摘录),或者进行路过式下载攻击,以将恶意软件投放到用户的计算机上。

 

2022 年 3 月 9 日从 cabinetblog[.]blogspot[.]com 中提取的 JavaScript 代码 JavaScript code extracted from cigarettesblog[.]blogspot[.]com on March 9, 2022

URL:

myprintscreen[.]com/soft/myp0912.exe

www[.]blog-hits.com

文件哈希值:

4a6ffa02ff7280e00cf722c4f2235f0e318e6cc8a2b9968639ba715f1a38c834 (木马)

fc311d002d7139e0a58b00464731ba8d4faea4670cff9fedfb35057fe838c285 (我们于 3 月 10 日上传的 JavaScript 文件)

我们在 penis-photo.blogspot[.]com.br (3 月 10 日) 或 mateyhderesa[.]blogspot.com(3 月 13 日)和 playboy-college-girls.blogspot.sk (3 月 14 日)上检测到了相同的机制。

总结

正如我在本文开头中所述,对于安全有关键影响的任何技术都有可能被恶意使用,而一旦像 JavaScript 这样高度普及化的技术被恶意利用,就可能引发严重后果。解密工作也极具挑战性; 上一篇博文 显示,在我们发现的恶意代码中,有 25% 为经过混淆的代码。这样的比例并不低,考虑到我们的监测所覆盖的互联网范围,应该说这个比例具有相当广泛的代表性。

我们开展这项研究的初衷是为了帮助客户提高安全性,因此将研究结果应用了到我们的 SWG 中。我们有两种新模型:基于 YARA 的模型和基于机器学习的模型。基于 YARA 规则和签名的模型会扫描所有通过 SWG 的 JavaScript 代码,以便提供实时保护。基于机器学习的模型会对流量进行仔细检查,以便及时更新边缘的威胁情报。这两种模型都在持续进行更新和重新训练,并将在网上发现的最新威胁以及新的良性 JavaScript 考虑在内。



寫於

Jordan Garzon

May 13, 2022

寫於

Jordan Garzon