WTF Solidity 合约安全: S07. 坏随机数

我最近在重新学solidity,巩固一下细节,也写一个“WTF Solidity极简入门”,供小白们使用(编程大佬可以另找教程),每周更新1-3讲。

这一讲,我们将介绍智能合约的坏随机数(Bad Randomness)漏洞和预防方法,这个漏洞经常在 NFT 和 GameFi 中出现,包括 Meebits,Loots,Wolf Game等。

很多以太坊上的应用都需要用到随机数,例如NFT随机抽取tokenId、抽盲盒、gamefi战斗中随机分胜负等等。但是由于以太坊上所有数据都是公开透明(public)且确定性(deterministic)的,它没有其他编程语言一样给开发者提供生成随机数的方法,例如random()。很多项目方不得不使用链上的伪随机数生成方法,例如 blockhash() 和 keccak256() 方法。

坏随机数漏洞:攻击者可以事先计算这些伪随机数的结果,从而达到他们想要的目的,例如铸造任何他们想要的稀有NFT而非随机抽取。更多的内容可以阅读 WTF Solidity极简教程 第39讲:伪随机数。

goblintown

}它有一个主要的铸造函数 luckyMint(),用户调用时输入一个 0-99 的数字,如果和链上生成的伪随机数 randomNumber 相等,即可铸造幸运 NFT。伪随机数使用 blockhash 和 block

}攻击函数 attackMint()中的参数为 BadRandomness合约地址。在其中,我们计算了随机数 luckyNumber,然后将它作为参数输入到 luckyMint() 函数完成攻击。由于attackMint()和luckyMint()将在同一个区块中调用,blockhash和block.timestamp是相同的,利用他们生成的随机数也相同。

OpenSea上Goblintown.wtf NFT系列地板价达到8ETH:6月2日消息,据OpenSea数据,目前Goblintown.wtf NFT系列地板价今日最高涨至9ETH,目前为8ETH,近7日交易量逾13135枚ETH,累计交易量为21800枚ETH。[2022/6/2 3:58:52]

由于 Remix 自带的 Remix VM不支持 blockhash函数,因此你需要将合约部署到以太坊测试链上进行复现。

部署 BadRandomness 合约。

部署 Attack 合约。

将 BadRandomness 合约地址作为参数传入到 Attack 合约的 attackMint() 函数并调用,完成攻击。

调用 BadRandomness 合约的 balanceOf 查看Attack 合约NFT余额,确认攻击成功。

我们通常使用预言机项目提供的链下随机数来预防这类漏洞,例如 Chainlink VRF。这类随机数从链下生成,然后上传到链上,从而保证随机数不可预测。更多介绍可以阅读 WTF Solidity极简教程 第39讲:伪随机数。

仿goblintown.wtf的NFT项目进入OpenSea交易榜前五:金色财经消息,据OpenSea数据显示,仿goblintown.wtf(与其画风相似)的NFT项目zombiestown.wtf 24小时交易额达到578.7ETH,进入OpenSea 24小时交易额排行第五名。截至目前发稿时,zombiestown.wtf的地板价为0.14ETH。行情波动较大,请做好风险控制。

此前今日上午消息,goblintown.wtf NFT系列地板价突破8ETH,24小时交易额排名在OpenSea达到第一。[2022/6/2 3:58:28]

这一讲我们介绍了坏随机数漏洞,并介绍了一个简单的预防方法:使用预言机项目提供的链下随机数。NFT 和 GameFi 项目方应避免使用链上伪随机数进行抽奖,以防被黑客利用。

推特:@0xAA_Science|@WTFAcademy_

社区:Discord|微信群|官网 wtf.academy

goblintown.wtf NFT系列地板价突破8ETH,24小时交易额排名达到第一:金色财经消息,据OpenSea数据显示,goblintown.wtf NFT系列地板价突破8ETH,目前为8.2ETH,24小时的交易额为4997.18ETH,24小时交易额在OpenSea排名达到第一。[2022/6/2 3:58:03]

所有代码和教程开源在github: github.com/AmazingAng/WTFSolidity

来源:bress

Bress

个人专栏

阅读更多

金色早8点

比推 Bitpush News

Foresight News

PANews

Delphi Digital

区块链骑士

深潮TechFlow

链捕手

区块律动BlockBeats

DeFi之道

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

水星链

[0:0ms0-1:31ms