如何“安全”发送资产?从QBridge被攻击事情说起

2022-01-30 06:01:25

2022 年 01 月 28 日, QBridge 遭受攻击,损失约 8000 万美金。网上有慢雾的分析报告。在这个推文中,我们尝试从代码出发,分析问题出现的最本质原因。

原因

我们的分析发现,这一问题主要由于以下原因所造成。

  1. 项目方没有使用常用的OpenZeppelin的库来处理资产的安全转移,而是使用了自己实现的一个库(SafeToken.sol)

  2. 在自己实现的库中,对于safeTransfer函数的实现相比OZ缺少了是否为合约的判断(当然判断是否为0也可以)

  3. EVM在一个low level的函数调用中,如果target为0,返回值是 true。也就是返回值为true并不一定说明函数调用成功,也有可能说明目标合约根本不存在。

当然,具体是攻击的时候,还需要结合合约本身的逻辑来进行。

在以上原因汇总,第三个原因是比较出乎意料的,也就是对一个0地址合约的函数调用返回值是true,而不是false。有问题的代码如下图:


      如何“安全”发送资产?从QBridge被攻击事情说起

btw: 网上还有其他合约使用了safeToken的实现,可能存在类似问题。

实验

为了验证这个想法,我们写了一个测试合约:


      如何“安全”发送资产?从QBridge被攻击事情说起

执行TestSafeTransfer.test()函数是完全不会revert的。


      如何“安全”发送资产?从QBridge被攻击事情说起

如何应对

对于合约中涉及资产转移功能的代码,我们建议

  • 使用成熟的库,而不用自己重新设计

  • 可以在资产转移前和后分别检查balance,从而知道资产转移的真正数量。这个建议对于一些通缩和通胀的资产同样有效。


郑重声明:本文版权归原作者所有,转载文章仅为传播信息之目的,不构成任何投资建议,如有侵权行为,请第一时间联络我们修改或删除,多谢。

推荐文章

btc日内再次下跌 短线应当如何处理?

尽管以太坊现货ETF获批是个好消息,但市场反应却不如预期。在消息公布后,以太坊价格出现了小幅下跌,...

加密莲
958 1年前

7月23日、BTC(合约)ETH(合约)行情分析及操作策略

昨日收益还是不错的,日内给出的现价空单分别止盈我们目标点位,恭喜跟上的朋友吃肉。时间一晃到月底了,...

倪老师
948 1年前

币圈院士:血与泪的教训!交易者为何总是撞死在同一棵树上?

币圈院士谈。交易市场中的几种“死法” 在币圈市场鳞次栉比的海洋,风起云涌,时常让人感到惊手不及。在...

币圈院士
939 1年前

7月23:Mt. Gox 比特币钱包在市场紧缩的情况下转移了价值 28.2 亿美元的 BTC

7月23:Mt. Gox 比特币钱包在市场紧缩的情况下转移了价值 28.2 亿美元的 BTC一个引...

168超神
918 1年前

悦盈:比特币68000的空完美落地反弹继续看跌 以太坊破前高看回撤

一个人的自律中,藏着无限的可能性,你自律的程度,决定着你人生的高度。 人生没有近路可走,但你走的每...

我是周悦盈
915 1年前

btc完美盈利 晚间波动较大注意

昨日btc空单完美给到,最大化走出一千七百点空间~ btc: 日内开盘下跌继续测试66000一线,...

加密莲
900 1年前