Bancor被盗事件之上帝视角区块链
Bancor团队在智能合约中留了三个后门?
Bancor被盗事件之上帝视角
事件回顾:
根据加密货币交易所Bancor发布的一份最新声明,由于在7月10日遇到“安全漏洞”,已经进入暂时停业状态。据外媒报道此次黑客攻击事件,涉及金额超过1250美元。
在安全事件发生后不久,公司在官方推特账号上表示,目前没有出现用户电子钱包被盗现象。

据外媒体报道,此次被盗令牌包括Bancor的原生令牌BNT,约25,000个以太坊(ETH)(1220万美元)和300,000个Pundi X(NPXS)(1200美元)
Bancor称本次黑客事件发生在7月9日夜间,当时一个钱包正在升级某些智能合约时发现受到攻击,之后该钱包撤回了以太坊和ERC-20代币NPXS和BNT。
此外,他们已经通过Bancor协议内置机制冻结了被盗的BNT。
公告如下:

管理员权限过高
Bancor 主要合约包括 SmartToken 和 BancorConverter,分别为 ERC20 Token 合约以及与业务相关的 Token 转换交易合约。
本次 Bancor 平台被盗事件与 BancorConverter 合约有关,攻击者(黑客/内鬼)极有可能获取了 0x009bb5e9fcf28e5e601b7d0e9e821da6365d0a9c 账户的私钥。
而此账户正是转换代币合约 BancorConverter(0x3839416bd0095d97bE9b354cBfB0F6807d4d609E)的 owner,同样拥有极高权限。owner 作为该合约的所有者和管理员,有唯一的权限通过 withdrawTokens() 方法提走合约中的全部 ERC20 Token 至任意地址。

第一次攻击发生在以太坊主网区块高度 5930096,北京时间 7 月 9 日 8 时 6 分。攻击者利用 owner 身份,首先调用 withdrawTokens() 转走 0.1 ERC20 ETH 进行攻击测试 。
三分钟后,攻击者再次转走 22000 巨额数量的 ERC20 ETH 至其控制的地址(0x33ed22f4b6b05f8a5faac4701550d52286bd735a)上
随后,攻击者再调用 Ether Token 合约(0xc0829421C1d260BD3cB3E0F06cfE2D52db2cE315)的 withdrawTo() 方法,将 ERC20 版本的以太代币兑换为真实以太币 。
至此,22000 个 ETH 便完全被攻击者借用管理员身份所盗走。
攻击者还控制了以下账户,如法炮制地偷走其账户余额,以及其所管理合约中的代币。

目前,区块链浏览器网站 EtherScan 已将攻击者的地址标注为 Fake_Phishing1701 和 Fake_Phishing1702。

此外,Bancor SmartToken ERC20 合约也由 owner 完全控制,目前是一个名为 MultiSigWallet 的合约,暂未被盗用。
owner 对 SmartToken 合约具有以下权限:
owner 可通过 disableTransfers() 任意禁用转账功能
owner 可通过 issue() 任意增发代币
owner 可通过 destroy() 任意销毁代币
以上这些功能均通过 ownerOnly 进行限定,换句话说,owner 对 Bancor 合约拥有最高权限。
Bancor的三个后门:
早在一年前就有人曾吐槽Bancor智能合约,为自己留有了三个后门。
我们在外媒论坛中发现:
第一个门:
团队可以随时出于任何原因,禁用使用BNT代币的所有交易。据推测,团队有能力让代币在ICO之后,立即冻结大约一周,直到Bancor的主要产品准备就绪。但是,出于某种原因,在他们解冻代币后,团队将保留随时再次冻结交易的选项。惊!! 上代码:在Bancor Token 合约中,允许所有者随时禁止代币交易:
在Bancor Crowdsale 合约中,所有者(Bancor团队)可以使用Bancor Token Contract(上图)中的禁用交易函数
第二个门:
团队可以随时发布新代币。 Bancor的“更换器”产品,需要基于另一个智能合约中提炼的做市商公式(market-making formula)通过编程方式创建代币。因此它有能力创建更多代币(令牌)。但是,出于某种原因,团队居然有能力随意创建新的代币,无论他们选择什么原因
Bancor Token 合约,合同所有者可以任意签发新的代币(令牌):
Bancor Crowdsale合约,合同所有者(Bancor团队)被允许使用Bancor Token Contract(上图)中的函数,任意发行新令牌:
第三个门:(此次Bancor被盗事件的处理方法)
这次的Bancor被盗事件,该团队采取的解决方式就是利用第三个门:团队可以随时从任何账户中删除任何代币。Bancor的“更换器”产品,可以通过编程方式,销毁发送给其合同的代币,它居然具有销毁代币的功能—— 但它很容易被限制为:仅销毁发送给该合同的代币。相反,团队有权随时随地,以任何理由,挑选任何帐户的代币,并且销毁任何数量的代币。
经调查,Bancor 管理员实际动用了 destroy() 方法来“销毁”用户手中的 Token。
管理员可以从任意账户 _from 中扣除任意金额 _amount 的 Token,同时将总供应量 totalSupply 缩减。
这就是常说的 烧币 功能。由于攻击者在得手后,将偷来的币分散到若干个地址中。Bancor 的管理员不得不挨个依次调用destroy() 来销毁对应地址的代币,再调用 issue() 方法将烧毁的币重新增发到自己手中。但此补救方法对于 NPXS Token 和已转走的 ETH 无效,这些被盗的币将被转至交易所抛售。
Bancor 团队也发表声明称普通用户的钱包没有受到影响,并进一步解释铸币、烧币以及存储大量以太币是他们协议中价格发现机制的一部分。
对于这三个门的设定一直都具有广泛的争议,当时就曾有审计人员质疑他们,不过当时该团队的推理说法似乎是:目前他们主要的智能合约仍在测试中,但如果出现任何问题,他们应该保留完全控制权。他们计划随着时间的推移逐渐减少控制权,但并没有提到上面代码截图列出的后门。
1.TMT观察网遵循行业规范,任何转载的稿件都会明确标注作者和来源;
2.TMT观察网的原创文章,请转载时务必注明文章作者和"来源:TMT观察网",不尊重原创的行为TMT观察网或将追究责任;
3.作者投稿可能会经TMT观察网编辑修改或补充。

