关注我(原作者)的人都知道我是一家量化交易投资公司的创始人,我们利用交易所的API为投资者提供简单的数字加密货币多样化投资。目前,我们的平台调用Binance的API进行工作。
可想而知,当我得到币安(Binance)上周被黑客盗取了4500万美元(7000个比特币)的消息时,内心十分惶恐不安。
在那之后,暴风雨似乎平息了,币安发布声明表示资金现在是安全的,他们将承担起所有损失。
但是我对这一声明并不满意,关于此次事件的新闻报道少得可怜,很少有信息流露出来,正因为如此各路谣言如野火一般燎原。
作为一个希望币安获得成功的人,我在写这篇文章的时候感到很矛盾。但是我必须对自己的用户和社区负责,对这起事件进行彻底的调查。我将尽力对事件进行全面的分析,澄清谣言。
我们知道的事情
在我们深入挖掘细节之前,先来利用官方来源发布的信息整理出事件的简要时间表。
7月3日晚上8:44UTC
SYS的价格从0.0004BTC拉升到96比特币。
7月3日晚上9点左右UTC
币安因为计划外的维护而关闭了交易所
7月3日晚上11点左右UTC
作为安全防范措施,币安重置了所有API密钥。
7月4日上午12点左右UTC
币安重新启用了API密钥的创建。
7月4日下午4点左右UTC
币安完成了系统维护
7月4日下午6点左右UTC
币安发布了一份官方事件回顾报告,声明该事件是由不正常的API交易活动造成的。
币安所谓的不正常的API交易活动是什么?
要理解为什么API攻击常常会带来加密货币的价格被拉升到匪夷所思的高度,我们首先需要了解币安的API是如何工作的。
对于门外汉来说,币安的API允许计算机以编程方式与交易所进行交互,就好像是用户自己在操作一样。想要启用API访问,用户首先要生成一组API密钥,这些秘钥是为用户账户提供交互权限的凭证。
在币安的系统中,有三个不同级别的API权限:
只读权限:获取用户有关持仓、交易历史和市场活动的数据。
交易权限:可替用户执行交易
提款权限:可从交易所中提款
在默认情况下,只读权限与交易权限是默认启用的,然而提款权限却不是默认启用的。因为提款权限涉及的风险更高,币安强制用户为其预先设置IP白名单和双重认证。
因此,即便攻击者窃取了用户名、密码或API密钥,他们往往不能获得提款权限。在这种限制条件下,黑客必须想法设法将盗取的资金转移到有提取权限的账户中。
黑客拿到API后通常的做法:
在攻击之前,攻击者会囤积大量的某一种加密货币,这种被选为目标的加密货币通常交易量很小,订单也很少。
在这之后,攻击者使用被盗账号通过API提交大量的购买订单,交易价格通常高得离谱(一般来说是正常价格的1万倍)。
攻击者通过出售他们之前低价囤积的此种加密货币赚取了巨额利润。
最后一步,攻击者把他们的战利品巨额资产从币安中提走。一旦这些资金从交易所转移到了区块链中,几乎任何人都不可能逆转交易。
API数据告诉我们的那些事
与其在黑暗中抓瞎,不如让我们用币安的API来提取SYS/BTC交易的历史数据,一探究竟。
价格波动与交易量
在7月3日之前SYS的价格并没有什么特别之处,然而7月3日当天价格却十分可疑地飙升至96比特币。
与此同时,SYS的单笔交易量和总交易量都出现了大幅上升。
历史订单数据
当我们开始从/api/v1/aggTrades中提取数据时,事情变得有趣起来。
从此端点获取的完成交易的历史记录显示,同一时间,相同的订单以相同的价格发起交易,使得交易数量迅速攀升。
请注意,当时每个人都在谈论的焦点都是11个SYS居然以每个价值96个比特币的价格成交(约700万美元),但是他们更应关注的是另一个大单,有13152个SYS以每个价值1.1比特币的价格成交(价值约为9700万美元)。
通过在一个气泡图上绘制所有的交易订单,我们对于这种交易规模可以有更直观的认识。图中每一个圆圈都代表一个订单,每个圆的大小表示以美元计算的总交易量。
总量为13,152个SYS的交易订单非常可疑
因为我们掌握了所有参与交易的ID,因此可以用它来获取所有单个交易订单。
/api/v1/historicalTrades
我把所有交易订单的历史数据都放在了google数据表中(区块律动BlockBeats友情提示:点击阅读原文查看,科学上网)。
我们发现这13152个SYS交易总量是由132个独立发起的交易订单组成的,每一个订单都以1.1比特币的单价购买了99个SYS,最后一次的购买订单为84个SYS,最终总订单交易量达到了13512个SYS,整个过程十分整齐划一。
我们已经联系了币安,并确认了上述每一个单笔交易都来自同一个人。这就意味着用于执行这些交易订单的帐户数量必须在1到133之间。
比较常见的解释是API密钥被钓鱼了,这些被黑了的账户被黑客用于发起攻击。我觉得这种说法还是存在很多疑点,黑客们从哪里能找到这么多土豪账户(账户中至少有69万美元)?
以单价96比特币的价格购买了11个SYS的订单就更加离奇了,这意味着某人的账户上一定有1056个比特币(约为6,694,406美元)。
在这一点上,或许是黑客制造了系统故障或利用了系统漏洞提交了大量错误交易。
与VIA币价格暴涨进行数据对比
让我们将此与VIA价格暴涨事件进行比较,我们都知道这是一起由黑客钓鱼API密钥发起的攻击。
3月6日之前,VIA的数据还展现出正常的交易波动。就在3月7日,价格突然暴涨。
与SYS一样,VIA的订单数量和交易量也大幅上升。
历史订单数据
虽然VIA的交易活动图和烛台图看上去与SYS十分相似,但他们的历史成交数据却大相径庭。
我们看到了在SYS/BTC出现异常波动当天有不少大额订单,而VIA/BTC出现价格波动的时候则是存在大量账户提交了小额订单。在我看来,VIA这一次的价格波动是更为典型的API钓鱼攻击。
这么来看SYS的价格波动就相当古怪了。
再来看看这些在图中排成一条直线的诸多订单。
如果我们把所有的SYS交易拆分成单笔交易,并比较它和VIA的交易量分布,就会发现很明显SYS的交易量要大得多。
看到这两组截然不同的数据后,我们真的能说这两起事件都是API秘钥钓鱼攻击吗?
清除谣言
有大约7000比特币正在从币安的热钱包中被提走
这里被监测到的交易链接(区块律动BlockBeats友情提示:点击阅读原文查看,科学上网)。许多人都以这个为证据到处张扬,认为这些资金是非自愿从币安的热钱包中撤走的。
到目前为止,币安还没有对这些指控做出回应,这种沉默让谣言的野火越烧越旺。
纠正一个常见的误区
我以为币安的最大提款额度是50比特币,那么2000比特币怎么能从热钱包里转出呢?
因为有时作为输出的金额超过了用户想要支付的金额。在这种情况下,比特币客户端会创建一个新的比特币地址,并把差额发送回这个地址,这就是比特币的找零机制。
比如你想从商店买一块钱的棒棒糖,你打开你的钱包,发现里面只有一张20元面值的人民币。你能支付的最小金额是多少呢?当然不是1块钱,你不能把这张20元钱的纸币撕下20分之1再交给营业员。你必须把这张20元面值的人民币全部交给收银员,然后因为你只需要支付1元钱,收银员会找给你19元。
币安很聪明地对一组提款进行了批量处理,并在一次交易中将它们全部发送出去。因此,将大量的找零发送回币安的找零地址这种事情并不少见。
我使用BlockexplorerAPI提取了从4月30日到7月6日交易输出列表,并以输出量进行降序排序。
如图所示,有许多大笔交易输出都超过了2000比特币,这是因为找零被发送回了返回地址。
我不是说我确信这一种提款行为得到了币安公司的授权,但是超过2000个比特币的高额交易并非罕见,当然它们也不能被当成盗窃的证据。
针对SYS的51%攻击
我不想详细讨论这个话题,因为SYS开发团队已经发布了一份完整的情况报告。长话短说,他们声称这一起事件是一个奇怪的巧合,SYS并没有被黑。
在SYS3.0.6的更新中,许多矿工将自己需要的交易费用设定在高于违约率的水平之上。因此,许多收费低于这一费率的交易并不会被人知晓。
由于活跃的矿工较少,通常需要一分钟就能结清的交易往往会在内存池中等待数小时。当这种情况发生时,许多交易就会被集中到一个单独的区块中。这导致了巨大的批量输出,有些输出甚至超过10亿SYS,同时还存在相当数量的未确认交易累积在一起。
在这些未经确认的交易中,SYS团队监测到了一些企图从SYS价值最高的账户中提款的交易,这些价值最高的账户被怀疑是币安交易所的热钱包。
一开始,SYS团队认为这是一种可疑的行为并通知了交易所。在那以后,他们从交易所得到确认这种交易并不是黑客攻击的产物。
*本文翻译自量化交易投资公司HodlBot的Medium文章,因为该公司使用币安交易所的API进行投资交易,与币安有直接利益关系,所以相关涉嫌软广的内容已做淡色处理,读者请自行斟酌内容的合理性,本文重点讨论币安API重置事件的经过和分析,不讨论去中心化和中心化交易所利弊
保卫中心化交易所
在这种时刻,你总是可以听到人们在呼唤变革。
我也认同去中心化交易所是未来的大势所趋。但在我们抨击中心化交易所之前,是否可以先问问自己:
我们是否将去中心化和区块链的不可逆想的过于理想化?
毕竟,在一些灾难性事故面前集权才是大多数组织的采用的标准解决方式,因为它快速而有效。
就拿币安来说吧,币安没有将交易上链,而是将它们记录在一个内部分类账上,因为这样做他们能够回滚所有的恶意交易。
迄今为止,币安在及早发现异常交易行为并采取预防措施方面做得很好。他们对并非自身错误的黑客攻击也承担起了责任。他们不仅支付了用户的损失,甚至将所有交易费收入用的10%投入了保险基金,用以防范未来的攻击与事故。
币安在VIA与SYS上避免了两次灾难性事故,这难道还不能让我们对其报以信任吗?
将这次SYS事件与区块链上发生的其他错误比较一下吧。
还记得造成6000万ETH损失的DAO事故吗?你在其中角色如何?一些人认为代码就是法律,而另一些人则想挽回错误。这一次的争论如此激烈,不仅引发了一次硬分叉,并催生了ETC。
我不知道最终的答案如何,但绝对不是所有的中心化交易所都应该下地狱。我们离完全抛弃中心化交易所还有很长的路要走。
针对V神的评论‘中心化交易所应该在地狱里彻底烧毁’,Kraken的CEO杰西•鲍威尔(JessePowell)做出了下述回应,他的说法也回应了我的观点:
‘我可以向你保证,我们交易所已经在地狱里燃烧了。谢天谢地还没有完全烧光,但是已经处于地狱第六层的冤魂界了,这里可难熬着呢。我们这些中心化的异教徒就是那些不得不与监管者、银行、黑客和困惑的新手打交道的一群人。
我知道Vitalik的评论不是针对我个人的。我也梦想有一天我们能走到这一步:去中心化交易所越做越大以至于中心化交易所不再具有任何优势。但是在今天离这一点还有很长的一段路要走,我们需要经由中心化交易所才能走到梦想中的这一境界。’
想要到达彼岸就得先修桥,过了桥之后才能一把火烧掉它。