事件回顾:
7月4日凌晨五点钟左右,币安交易所出现超大规模转账提现。在两小时内,交易的比特币数量超过7000枚,总价值接近5000万美元。与此同时,在7月4日上午8点48分,币安发布临时维护公告,暂时停止撤单、充值、提现等交易操作。
币安对此回复是将会删除所有已存在的API,请所有用户重新创建API
随后不久,币安在官方微博宣布关于SYS交易异常的处理方案。方案称此次事件为部分API用户的钓鱼事件,用户的资产完全安全。声称该事件是由不正常的 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数据表中我们发现这13152个SYS交易总量是由132个独立发起的交易订单组成的,每一个订单都以1.1比特币的单价购买了99个SYS,最后一次的购买订单为84个SYS,最终总订单交易量达到了13512个SYS,整个过程十分整齐划一。
我们已经联系了币安,并确认了上述每一个单笔交易都来自同一个人。这就意味着用于执行这些交易订单的帐户数量必须在1到133之间。
与VIA币价格暴涨进行数据对比
让我们将此与VIA价格暴涨事件进行比较,我们都知道这是一起由黑客钓鱼API密钥发起的攻击。
3月6日之前,VIA的数据还展现出正常的交易波动。就在3月7日,价格突然暴涨。
与SYS一样,VIA的订单数量和交易量也大幅上升。
历史订单数据
虽然VIA的交易活动图和烛台图看上去与SYS十分相似,但他们的历史成交数据却大相径庭。
我们看到了在SYS/BTC出现异常波动当天有不少大额订单,而VIA/BTC出现价格波动的时候则是存在大量账户提交了小额订单。在我看来,VIA这一次的价格波动是更为典型的API钓鱼攻击。
这么来看SYS的价格波动就相当古怪了。
再来看看这些在图中排成一条直线的诸多订单。
如果我们把所有的SYS交易拆分成单笔交易,并比较它和VIA的交易量分布,就会发现很明显SYS的交易量要大得多。
看到这两组截然不同的数据后,我们真的能说这两起事件都是API秘钥钓鱼攻击吗?
清除谣言
有大约7000比特币正在从币安的热钱包中被提走
许多人都以这个为证据到处张扬,认为这些资金是非自愿从币安的热钱包中撤走的。
到目前为止,币安还没有对这些指控做出回应,这种沉默让谣言的野火越烧越旺。
纠正一个常见的误区
我以为币安的最大提款额度是 50 比特币,那么 2000 比特币怎么能从热钱包里转出呢?
因为有时作为输出的金额超过了用户想要支付的金额。在这种情况下,比特币客户端会创建一个新的比特币地址,并把差额发送回这个地址,这就是比特币的找零机制。
比如你想从商店买一块钱的棒棒糖,你打开你的钱包,发现里面只有一张 20 元面值的人民币。你能支付的最小金额是多少呢?当然不是 1 块钱,你不能把这张 20 元钱的纸币撕下 20 分之 1 再交给营业员。你必须把这张 20 元面值的人民币全部交给收银员,然后因为你只需要支付 1 元钱,收银员会找给你 19 元。
币安很聪明地对一组提款进行了批量处理,并在一次交易中将它们全部发送出去。因此,将大量的找零发送回币安的找零地址这种事情并不少见。
我使用 Blockexplorer API 提取了从 4 月 30 日到 7 月 6 日交易输出列表,并以输出量进行降序排序。
针对 SYS 的 51% 攻击
我不想详细讨论这个话题,因为 SYS 开发团队已经发布了一份完整的情况报告。长话短说,他们声称这一起事件是一个奇怪的巧合,SYS 并没有被黑。
在 SYS 3.0.6 的更新中,许多矿工将自己需要的交易费用设定在高于违约率的水平之上。因此,许多收费低于这一费率的交易并不会被人知晓。
由于活跃的矿工较少,通常需要一分钟就能结清的交易往往会在内存池中等待数小时。当这种情况发生时,许多交易就会被集中到一个单独的区块中。这导致了巨大的批量输出,有些输出甚至超过 10 亿 SYS,同时还存在相当数量的未确认交易累积在一起。
在这些未经确认的交易中,SYS 团队监测到了一些企图从 SYS 价值最高的账户中提款的交易,这些价值最高的账户被怀疑是币安交易所的热钱包。
一开始,SYS 团队认为这是一种可疑的行为并通知了交易所。在那以后,他们从交易所得到确认这种交易并不是黑客攻击的产物。
领取专属 10元无门槛券
私享最新 技术干货