数十万 EOS 被盗真相复盘推演 | TokenInsight
北京时间 2018 年 12 月 19 日凌晨,EOS 网络中,包括 BetDice 在内的数个游戏 DApp 遭受黑客攻击,损失数十万枚 EOS 通证。
TokenInsight 认为本次事件是由于部分游戏 DApp 为增强游戏体验,在自建节点中运行 DApp,导致链上数据同步时出现错误。
因为部分代码和数据未被公开,攻击的重现难度较高。据 TokenInsight 推演,黑客可能的攻击手段如下:
EOS 被盗流程推演图
来源:TokenInsight
1. 黑客向 DApp 发送参与游戏的请求;
2. 黑客直接向 BP 节点发送取消游戏的请求,或使账户余额不足而导致转账失败;
3. DApp 将黑客的游戏请求发送至 BP 节点,并在自建节点上运行黑客的游戏结果,若运算出玩家胜利的结果,则向 BP 节点发送给予玩家奖励的请求;
4. BP 节点先后收到“黑客取消游戏”请求、“DApp 发送游戏”请求、“DApp 给予游戏奖励”请求。因为时间顺序和转账冲突的原因,“黑客取消游戏”请求被执行,而“DApp 发送游戏”请求执行失败,“DApp 给予游戏奖励”请求被执行。
5. 黑客收到 DApp 的转账,一次攻击完成。
首先,应对该种攻击手段,可将 DApp 读取的状态数据改为 read-only 模式,read-only 模式下数据库包含传入区块的更改,但不影响 speculative 交易处理。
此外,关于此次 EOS 的安全事件,Anchain CEO Victor 指出,Anchain 在 Ethereum 以及 EOS 有关安全的问题上有着较丰富的经验与技术积累,并且也提供有关代码的安全检测服务,这次的安全事件是完全可以避免的。比如,DApp 可以使用 ref_block 功能,在给玩家发放奖励前,判断用户是否真的转账成功。同时,Victor 还指出,这个安全问题背后还暴露出了在 EOS 中更加严重的问题,相较于其他部分公有链,EOS 区块链并不记录失败的交易,浏览器也无法查询,这是 EOS 在架构设计方面的缺陷。