WF曲速未来 安全课堂:Soildity安全之时间戳依赖

区块链安全公司WF曲速未来安全开课:

WF曲速未来:Soildity作为编写智能合约的语言,已经被广泛的应用。但同时,开发者和用户也得到了惨痛的教训,智能合约的安全问题层出不穷。因此,我们总结了一些常见的Solidity安全问题。前车之鉴,后车之师,希望后来者能有所警惕。

时间戳依赖

时间戳:一个能表示一份数据在某个特定时间之前已经存在的、 完整的、 可验证的数据,通常是一个字符序列,唯一地标识某一刻的时间。

数据块时间戳历来被用于各种应用,例如随机性的函数,锁定一段时间的资金以及时间相关的各种状态变化的条件语句。通常来说都是使用矿工的本地时间作为时间戳,而这个时间大约能有900秒的范围波动,当其他节点接受一个新区块时,只需要验证时间戳是否晚于之前的区块并且与本地时间误差在900秒以内。一个矿工可以通过设置区块的时间戳来尽可能满足有利于他的条件,从中获利。

代码案例

以下函数仅接受特定日期之后的调用。由于矿工可以影响他们的块的时间戳(在某种程度上),他们可以尝试使用未来设置的块时间戳来挖掘包含其事务的块。如果它足够接近,它将在区块上被接受,并且将在任何其他玩家试图赢得游戏之前给予矿工ETH。

相关事件

Governmental(一个古老的庞氏资金盘游戏)

游戏规则

你必须要发送至少1ETH到合约,然后你会被支付10%的利息。

如果“政府”(合约)在12小时内没有收到新的资金,最后的人获得所有的奖池,所有人都会失去资金。

发送到合约的以太币分配如下:5%给奖池,5%给合约拥有者,90%根据支付顺序,用来支付给发送资金的人

当奖池满了(1万Ether),95%的资金会发送给支付者。

此攻击的工作原理如下:

(1)部署政府在创建时提供至少1ether;

(2)让其他人一起玩,以增加累积奖金;

(3)部署攻击合同;

(4)调用攻击者的攻击功能,防止累积奖金被交付给合法的胜利者。

攻击合同:作为玩家的矿工可以调整时间戳(未来的时间,使其看起来像是一分钟过去了),以显示玩家是最后一分钟加入的时间(尽管现实中并非如此)。

区块链安全公司WF曲速未来 观点:

时间戳不应该用于函数或产生随机数,或者说他们不应对游戏产生决定性作用,或者对某个重要状态能产生重要影响。开发者在编写合约时应注意这点。

注: 本文内容由区块链安全公司WF曲速未来(WarpFuture.com) 编译,转载请注明来自WF曲速未来。WF是交易所与超级节点的安全技术提供商,为区块链交易所提供媲美某猫双十一级别的账户安全与交易安全对抗云引擎,现交易所每日安全攻防调用量达亿级。微信关注公众号“曲速未来安全区”,知识星球请搜索“曲速区”。

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20180816A1CZ8Z00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券