重入| 破解 Solidity

ChinaDeFi 去中心化金融社區 2022-01-07 22:24:35 阅读数:166

重入 破解 solidity

image.png

這篇文章背後的動機是我試圖了解智能合約中的一些常見漏洞。

我們可能聽說過著名的DAO攻擊,它導致了以太坊經典的誕生。被攻擊者利用的漏洞稱為“可重入性”。

什麼是重入攻擊?

假設有兩個合約A和合約B,合約A調用合約B。在這種攻擊中,當第一個調用仍在執行時,合約B調用合約A,這在某種程度上導致了一個循環。

我們將在下面給出的示例的幫助下嘗試更好地理解攻擊。我們有一個名為EtherStore的智能合約,用戶可以在其中存、取款和查看智能合約的當前餘額。

4bd6bb57e0fd8a5eac2f211eaf23ffe9.jpgEtherStore.sol

我們看到提款功能有一個檢查,不允許用戶取比他們擁有的更多的錢,但是bug出現在第16行。每當我們將以太坊發送到智能合約地址時,我們都會定義我們所說的fallback函數。在大多數情况下,這只是一個空函數,但攻擊者足够聰明,這是放置實際利用代碼的地方。

攻擊

攻擊者調用exploit函數,在EtherStore合約中存入1個以太坊,以通過EtherStor合約的第14行檢查。當代碼到達第16行時,攻擊者會調用攻擊者合約的fallback函數,攻擊者在其中調用EtherStore上的withdraw函數,直到耗盡資金。

ebfe0e386c8066ed3dd7c5ed7feb0af6.jpgReentrancy.sol

解决方案

這種攻擊是可能的,因為代碼從來沒有達到EtherStore合約的第20行,在這裏我們减去了從EtherStore合約中提取的金額。為了解决這個問題,我們有兩個解决方案。首先是在轉移餘額重新定比特從用戶那裏减去餘額的邏輯。

7c44ce75ffc965de6cb2aebc4caae4bf.jpg

修改後的提款()函數

第二個解决方案是使用noReentrancy保護修改器,它在執行時鎖定合約,並在執行結束時解鎖。

704010004c667415f09fb6211b4f4f6f.jpgnoReentrancy 守衛修改器

Source:https://zuhaibmd.medium.com/reentrancy-hack-solidity-1-aad0154a3a6b

關於

ChinaDeFi - ChinaDeFi.com 是一個研究驅動的DeFi創新組織,同時我們也是區塊鏈開發團隊。每天從全球超過500個優質信息源的近900篇內容中,尋找思考更具深度、梳理更為系統的內容,以最快的速度同步到中國市場提供决策輔助材料。

Layer 2道友 - 歡迎對Layer 2感興趣的區塊鏈技術愛好者、研究分析人與Gavin(微信: chinadefi)聯系,共同探討Layer 2帶來的落地機遇。敬請關注我們的微信公眾號 “去中心化金融社區”

本文首發於:https://mp.weixin.qq.com/s/9JkeFlD6RA2BmDJc5v28dQ

版权声明:本文为[ChinaDeFi 去中心化金融社區]所创,转载请带上原文链接,感谢。 https://gsmany.com/2022/01/202201072224349353.html