Soildity安全之时间戳依赖

曲速未来安全区
曲速未来安全区 机构得得号

Aug 17, 2018 专注于为读者提供区块链安全领域最新讯息

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

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

时间戳依赖

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

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

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


相关事件

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

 

游戏规则

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

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

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

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


此攻击的工作原理如下:

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

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

(3)部署攻击合同; 

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

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

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

(作者:曲速未来安全区;本文仅代表作者观点,不代表链得得官方立场)

链得得仅提供相关信息展示,不构成任何投资建议
本文系作者 曲速未来安全区 授权链得得发表,并经链得得编辑,转载请注明出处、作者和本文链接

更多精彩内容,关注链得得微信号(ID:ChainDD),或者下载链得得App

分享到:

相关推荐

    评论(0

    Oh! no

    您是否确认要删除该条评论吗?

    分享到微信