
我们几乎每个人都使用在线商店的服务,这意味着他迟早有可能成为JavaScript嗅探器的受害者-网络罪犯注入到网站上以窃取银行卡信息,地址,登录名和用户密码的特殊代码。
英国航空公司航空公司网站和移动应用程序的近40万用户,以及体育巨人FILA和美国机票发行商Ticketmaster在英国网站的访问者,已经受到嗅探者的影响。
威胁情报集团(IB)分析师Viktor Okorokov讨论了嗅探器如何嵌入到站点代码中并窃取账单信息,以及攻击者攻击了哪些CRM。
幻影威胁
事实证明,很长一段时间以来,JS嗅探器一直在防病毒分析师的视线之外,银行和支付系统并没有看到它们中的严重威胁。 而且完全徒劳。 IB集团的专家
分析了 2,440家受感染的在线商店,这些商店的访客(每天约150万人)有受到威胁的风险。 受害人不仅是用户,而且还包括发行被盗卡的在线商店,支付系统和银行。
Group-IB
报告是对嗅探器暗网市场,其基础设施和获利方式的第一份研究,为创作者带来了数百万美元的收入。 我们确定了38个嗅探器家族,其中以前只有12个是研究人员已知的。
让我们详细介绍研究期间研究的四个嗅探器家族。
ReactGet系列
ReactGet系列嗅探器用于窃取在线商店站点上的银行卡数据。 嗅探器可以与站点上使用的大量不同的支付系统配合使用:一个参数值对应于一个支付系统,并且可以使用检测到的单个嗅探器版本来窃取凭据,以及一次从多个支付系统的支付形式中窃取银行卡数据,例如所谓的通用嗅探器。 结果发现,在某些情况下,攻击者会对在线商店管理员进行网络钓鱼攻击,以获取对该站点管理面板的访问权限。
使用该系列嗅探器的活动于2017年5月开始,在CMS和Magento,Bigcommerce,Shopify平台控制下的网站遭到攻击。
ReactGet如何嵌入在线商店代码中
除了通过引用实现脚本的“经典”实现之外,ReactGet嗅探器系列还使用一种特殊的技术:使用JavaScript代码,它会检查用户所在的当前地址是否满足某些条件。 仅当当前URL包含子字符串
checkout或
onestepcheckout ,
onepage / ,
out / onepag ,
checkout / 1 ,
ckout / 1时 ,
才会启动恶意代码。 因此,嗅探器代码将在用户继续付款购买并将付款信息输入网站上的表单时准确执行。
该嗅探器使用非标准技术。 受害者的付款和个人数据被收集在一起,使用
base64进行编码,然后将所得的字符串用作向攻击者站点发送请求的参数。 通常,到门的路径模拟一个JavaScript文件,例如
resp.js ,
data.js等,但也使用到图像文件,
GIF和
JPG的链接。 特殊之处在于,嗅探器创建一个尺寸为1 x 1像素的图像对象,并使用先前获得的链接作为图像的
src参数。 也就是说,对于用户而言,这样的流量请求看起来像是对常规图片的请求。 ImageID系列嗅探器中使用了类似的技术。 此外,许多合法的在线分析脚本中都使用了使用1像素像素图像的技术,这也会误导用户。
版本分析
对ReactGet嗅探器运算符使用的活动域的分析揭示了嗅探器家族的许多不同版本。 版本的不同之处在于是否存在混淆,此外,每个嗅探器都针对特定的支付系统而设计,该系统处理在线商店的银行卡付款。 对与版本号相对应的参数值进行排序后,Group-IB专家收到了可用嗅探器变体的完整列表,并通过每个嗅探器在页面代码中查找的表单字段名称来确定了该嗅探器针对的支付系统。
密码嗅探器
在网站的客户端运行JavaScript嗅探器的优点之一是其多功能性:嵌入在网站上的恶意代码可以窃取任何类型的数据,无论是付款数据还是用户帐户的用户名和密码。 IB组专家发现了一个属于ReactGet系列的嗅探器样本,该嗅探器旨在窃取站点用户的电子邮件地址和密码。
与ImageID嗅探器相交
对其中一家受感染商店的分析显示,他的站点被两次感染:除了ReactGet嗅探器家族的恶意代码之外,还检测到ImageID家族嗅探器代码。 这种交叉可能表示使用这两种嗅探器的操作员使用类似的技术来注入恶意代码。
通用嗅探器
对与ReactGet嗅探器基础结构相关的一个域名的分析显示,同一用户已经注册了另外三个域名。 这三个域模拟了实际站点的域,以前曾用于托管嗅探器。 在分析三个合法站点的代码时,发现了一个未知的嗅探器,进一步的分析表明这是ReactGet嗅探器的改进版本。 该家族以前所有跟踪的嗅探器版本都针对单个付款系统,也就是说,对于每个付款系统,都需要特殊版本的嗅探器。 但是,在这种情况下,发现了通用版本的嗅探器,它能够从与15种不同支付系统和电子商务网站模块有关的表单中窃取信息以进行在线支付。
因此,在工作开始时,嗅探器会搜索包含受害者个人信息的表格的基本字段:全名,实际地址,电话号码。
然后,嗅探器搜索超过15个不同的前缀,这些前缀对应于用于在线支付的不同支付系统和模块。
此外,受害者的个人数据和付款信息被一起收集并发送到攻击者控制的站点:在这种情况下,发现了位于两个不同被黑客入侵站点上的两个版本的ReactGet通用嗅探器。 但是,这两个版本都将窃取的数据发送到了同一被黑客入侵的网站
zoobashop.com 。
通过对嗅探器用来搜索包含受害者付款信息的字段的前缀进行分析,我们可以确定此嗅探器模式是否针对以下支付系统:
- 授权网
- 威瑞信
- 第一数据
- 美国支付
- 条纹
- 贝宝
- 澳新银行eGate
- 布伦特里
- DataCash(万事达卡)
- Realex付款
- 赛门
- Heartland付款系统
使用哪些工具窃取帐单信息?
在分析攻击者的基础结构期间发现的第一个工具用于混淆负责窃取银行卡的恶意脚本。 使用
javascript-obfuscator CLI在攻击主机之一上发现了bash脚本,以自动对嗅探器代码进行混淆。
检测到的第二个工具旨在生成负责加载主嗅探器的代码。 该工具生成JavaScript代码,该代码通过在用户的当前地址中搜索
checkout ,
cart等行来检查用户是否在付款页面上,如果结果是肯定的,则该代码会从攻击者服务器加载主嗅探器。 为了隐藏恶意活动,所有行(包括用于确定付款页面的测试行以及指向嗅探器的链接)均使用
base64进行编码。
网络钓鱼攻击
在分析攻击者的网络基础结构时,发现经常有犯罪集团利用网络钓鱼来访问目标在线商店的管理面板。 攻击者注册的外观与商店的外观相似的域名,然后在其上部署伪造的Magento管理控制台登录表单。 如果成功,攻击者将可以访问CMS Magento管理面板,从而使他们能够编辑站点组件并实施嗅探器来窃取信用卡信息。
G-分析家族
该嗅探器家族用于窃取在线商店客户的卡。 该小组使用的第一个域名于2016年4月注册,这可能表明该小组于2016年中期开始活动。
在当前的广告系列中,该小组使用模仿真实生活服务(例如Google Analytics(分析)和jQuery)的域名,使用合法脚本掩盖嗅探器活动,并且类似于合法域名。 该攻击在运行CMS Magento的网站上运行。
G-Analytics如何嵌入在线商店代码中
这个家庭的一个显着特征是使用各种盗窃用户支付信息的方法。 除了在网站的客户端部分中经典的JavaScript代码实现之外,犯罪集团还使用了在网站的服务器部分中嵌入代码的技术,即处理用户输入的PHP脚本。 这种技术很危险,因为它使第三方研究人员很难检测到恶意代码。 IB组专家使用
dittm.org域作为门,发现了该网站的PHP代码中嵌入的嗅探器版本。
还发现了嗅探器的早期版本,该嗅探器使用相同的
dittm.org域来收集被盗的数据,但是该版本已经准备在在线商店的客户端上安装。
后来,该组织改变了策略,开始更多地注意隐藏恶意活动和伪装。
在2017年初,该组织开始使用
jquery-js.com域,伪装成jQuery的CDN:当它重定向到恶意用户的站点时,它将重定向到合法的站点
jquery.com 。
在2018年中,该组织采用了
g-analytics.com域名,并开始在合法的Google Analytics(分析)服务下掩盖嗅探器的活动。
版本分析
在分析用于存储嗅探器代码的域时,发现该站点具有大量版本,这些版本的不同之处在于存在混淆,以及是否存在无法访问的代码添加到文件中以分散注意力并隐藏恶意代码。
总共在
jquery-js.com上标识了六个版本的嗅探器。 这些嗅探器将窃取的数据发送到与嗅探器本身位于同一站点的地址:
hxxps:// jquery-js [。] Com / Latest / jquery.min.js :
- hxxps:// jquery-js [。] com / jquery.min.js
- hxxps:// jquery-js [。] com / jquery.2.2.4.min.js
- hxxps:// jquery-js [。] com / jquery.1.8.3.min.js
- hxxps:// jquery-js [。] com / jquery.1.6.4.min.js
- hxxps:// jquery-js [。] com / jquery.1.4.4.min.js
- hxxps:// jquery-js [。] com / jquery.1.12.4.min.js
自2018年年中以来,该组织在攻击中使用的后来的
g-analytics.com域用作大量嗅探器的存储库。 总共发现了16种不同的嗅探器版本。 在这种情况下,发送被盗数据的门被伪装成指向
GIF图像的链接:
hxxp:// g-analytics [。] Com / __ utm.gif?V = 1&_v = j68&a = 98811130&t =浏览量&s = 1&sd = 24位&sr = 2560x1440&vp = 2145x371&je = 0&_u = AACAAEAB〜&jid = 1841704724&gjid = 877686936&cid
= 1283183910.1527732071 :
- hxxps:// g-analytics [。] com / libs / 1.0.1 / analytics.js
- hxxps:// g-analytics [。] com / libs / 1.0.10 / analytics.js
- hxxps:// g-analytics [。] com / libs / 1.0.11 / analytics.js
- hxxps:// g-analytics [。] com / libs / 1.0.12 / analytics.js
- hxxps:// g-analytics [。] com / libs / 1.0.13 / analytics.js
- hxxps:// g-analytics [。] com / libs / 1.0.14 / analytics.js
- hxxps:// g-analytics [。] com / libs / 1.0.15 / analytics.js
- hxxps:// g-analytics [。] com / libs / 1.0.16 / analytics.js
- hxxps:// g-analytics [。] com / libs / 1.0.3 / analytics.js
- hxxps:// g-analytics [。] com / libs / 1.0.4 / analytics.js
- hxxps:// g-analytics [。] com / libs / 1.0.5 / analytics.js
- hxxps:// g-analytics [。] com / libs / 1.0.6 / analytics.js
- hxxps:// g-analytics [。] com / libs / 1.0.7 / analytics.js
- hxxps:// g-analytics [。] com / libs / 1.0.8 / analytics.js
- hxxps:// g-analytics [。] com / libs / 1.0.9 / analytics.js
- hxxps:// g-analytics [。] com / libs / analytics.js
通过盗窃数据获利
犯罪集团通过专门为梳棉机提供服务的地下商店出售梳棉机,将盗窃的数据货币化。对攻击者使用的域进行分析后发现,google-analytics.cm与cardz.vc域由同一用户注册。域cardz.vc指的是出售被盗银行卡Cardsurfs(Flysurfs)的商店,即使在地下交易平台AlphaBay活动期间,该商店也已成为使用嗅探器盗窃银行卡的商店,从而受到欢迎。通过分析与嗅探器用来收集被盗数据的域位于同一服务器上的analytic.is域,Group-IB专家发现了一个包含cookie样式日志的文件,该文件似乎后来被开发人员放弃了。日志中的一项包含iozoz.com域,该域先前曾在2016年活跃的嗅探器之一中使用。据推测,此域先前已被攻击者用来收集使用嗅探器窃取的卡。该域已注册到电子邮件地址kts241@gmail.com,该电子邮件地址还用于注册与Cardsurfs梳理存储有关的cardz.su和cardz.vc域。根据获得的数据,可以假定G-Analytics嗅探器家族和地下Cardsurfs银行卡商店是由同一个人管理的,并且该商店用于出售使用嗅探器窃取的银行卡。家庭照
Illum是一个嗅探器系列,用于攻击运行CMS Magento的在线商店。除了引入恶意代码之外,此嗅探器的操作员还使用完全伪造的付款方式,将数据发送到网络犯罪分子控制的门上。在分析此嗅探器的运营商所使用的网络基础结构时,注意到了大量恶意脚本,漏洞利用,虚假付款方式以及竞争对手恶意嗅探器的示例集合。根据该组使用的域名出现日期的信息,可以假定该活动始于2016年底。Illum如何嵌入在线商店代码
发现的第一个嗅探器版本直接嵌入受感染站点的代码中。窃取的数据发送到cdn.illum [。] Pw / records.php,门使用base64进行编码。嗅探器的打包版本后来使用另一个gate- records.nstatistics [。] Com / records.php发现。根据威廉·德·格鲁特(Willem de Groot)的报告,嗅探器使用了同一台主机,该嗅探器嵌入在德国政党CSU拥有的一家商店的网站上。入侵者现场分析
IB组专家发现并分析了该犯罪集团用来存储工具和收集被盗信息的站点。在攻击者的服务器上发现的工具中,发现了用于Linux上的特权提升的脚本和漏洞利用程序:例如,Mike Czumak开发的Linux Privilege Escalation Check Script以及CVE-2009-1185的利用程序。攻击者直接使用了两种漏洞来攻击在线商店:第一种能够通过利用CVE-2016-4010 将恶意代码注入core_config_data中,第二种利用CMS Magento插件中的RCE漏洞,从而允许在易受攻击的Web服务器上执行任意代码。此外,在服务器分析期间,使用了各种嗅探器样本和伪造的付款表格,攻击者使用这些样本从被黑客入侵的站点收集付款信息。从下面的列表中可以看到,为每个被黑站点分别创建了一些脚本,而某些CMS和支付网关则使用了通用解决方案。例如,脚本segapay_standart.js和segapay_onpage.js设计为使用Sage Pay付款网关在网站上实现。在数个与CloudFlare服务相关的证书中,payingnow [。] Tk主机(用作payment_forminsite.js脚本中的门)被检测为subjectAltName。另外,evil.js脚本位于host上。从脚本名称来看,它可以用作CVE-2016-4010操作的一部分,因此,可以将恶意代码注入到运行CMS Magento的网站的页脚中。作为脚本,此脚本使用了request.requestnet [。] Tk主机,该主机使用与paymentnow [。] Tk主机相同的证书。假付款表格
下图显示了输入地图数据的表单示例。该表格用于嵌入在线商店网站并窃取卡数据。下图是伪造的PayPal付款表单的示例,网络罪犯使用这种付款表单将其部署到采用这种付款方式的网站。咖啡家庭
至少从2017年5月起,就开始使用CoffeMokko嗅探器系列来窃取在线商店用户的银行卡。据推测,该嗅探器家族的经营者是犯罪集团Group 1,由RiskIQ专家在2016年描述。攻击受到运行诸如CMS之类的网站的控制,这些网站包括Magento,OpenCart,WordPress,osCommerce和Shopify。如何在在线商店的代码中实现CoffeMokko
该家族的操作员会为每种感染创建唯一的嗅探器:嗅探器文件位于攻击者服务器上的src或js目录中。站点代码中的实现是通过直接链接到嗅探器来执行的。在嗅探器代码中,必须从中窃取数据的表单字段的名称被硬编码。嗅探器还会检查用户是否在付款页面上,并检查具有用户当前地址的关键字列表。某些检测到的嗅探器版本被混淆,并包含一个加密的字符串,在其中存储了资源的主要阵列:它包含各种支付系统的表单字段的名称,以及应将被盗数据发送到的门地址。被盗的付款信息沿着/savePayment/index.php或/tr/index.php路径发送到攻击者服务器上的脚本。大概,此脚本用于将数据从闸门发送到主服务器,从而合并所有嗅探器的数据。为了隐藏传输的数据,所有受害者的付款信息都使用base64进行编码,然后发生几次符号替换:- 字符“ e”被替换为“:”
- 字符“ w”被替换为“ +”
- 字符“ o”被替换为“%”
- 字符“ d”被替换为“#”
- 字符“ a”被替换为“-”
- 字符“ 7”被替换为“ ^”
- 字符“ h”被替换为“ _”
- 字符“ T”被替换为“ @”
- 字符“ 0”被替换为“ /”
- 字符“ Y”被替换为“ *”
作为字符替换的结果,未经反向转换就无法解码base64编码的数据。这是没有混淆的嗅探器代码段:基础设施分析
在早期的战役中,攻击者注册的域名类似于合法的在线购物网站的域名。它们的域可能不同于合法的一个字符或另一个TLD。已注册的域用于存储嗅探器代码,该链接已嵌入到存储代码中。此外,该小组使用的域名类似于jQuery的流行插件(对于使用slick.js插件的网站为slickjs [。] Org),付款网关(对于使用Sage Pay支付系统的网站为sagecdn [。] Org)的域名。后来,该小组开始创建域名,这些域名的名称与商店的域名或商店的主题均无关。每个域都对应于创建/ js或/ src目录的站点。嗅探器脚本存储在此目录中:每个新感染一个嗅探器。嗅探器通过直接链接注入到站点代码中,但是在极少数情况下,攻击者修改了其中一个站点文件并向其中添加了恶意代码。代码分析
第一种混淆算法
在此家族的一些检测到的嗅探器样本中,该代码被混淆并包含使嗅探器正常工作所必需的加密数据:尤其是嗅探器门的地址,付款表单字段列表,在某些情况下还包括伪造的付款表单代码。 在函数内部的代码中,使用密钥通过
XOR加密资源,该密钥由同一函数的参数传递。
使用每个样本唯一的对应密钥解密字符串后,您可以获得一个字符串,其中包含嗅探代码中所有行以及定界符。
第二种混淆算法
在此系列的嗅探器的后续示例中,使用了一种不同的混淆机制:在这种情况下,使用自写算法对数据进行了加密。 包含嗅探器工作所需的加密数据的字符串作为参数传递给解密函数。
使用浏览器控制台,您可以解密加密的数据并获得包含嗅探器资源的数组。
与早期的MageCart攻击相关
对该组织用作收集失窃数据的大门的一个域的分析显示,该域具有与Group 1所使用的信用卡盗窃基础设施相同的信用卡盗窃基础设施,这是RiskIQ专家
发现的第一个组。
在CoffeMokko嗅探器家族的主机上发现了两个文件:
- mage.js-包含门地址为js-cdn.link的第1组嗅探器代码的文件
- mag.php-负责收集嗅探器窃取的数据的PHP脚本
还发现,CoffeMokko嗅探器家族背后的小组使用的最早域名于2017年5月17日注册:
- 链接js [。]链接
- info-js [。]链接
- track-js [。]链接
- map-js [。]链接
- smart-js [。]链接
这些域名的格式与2016年攻击中使用的第1组域名相同。
根据发现的事实,可以假定在CoffeMokko嗅探器操作员与第1组犯罪集团之间存在联系。 据推测,CoffeMokko的运营商可以从其前辈那里借用卡盗窃工具和软件。 但是,使用CoffeMokko嗅探器家族背后的犯罪集团更有可能是作为第1组活动一部分进行攻击的同一个人。在发布有关犯罪集团活动的第一份报告之后,他们的所有域名均被封锁,并对工具进行了详细研究和描述。 该小组被迫休息一下,完善他们的内部工具,并重写嗅探器代码,以便继续他们的攻击并被忽视。