以太坊交易所 以太坊交易所
Ctrl+D 以太坊交易所
ads

智能合約安全審計入門篇 : 重入漏洞

Author:

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

背景概述

看了一個關于學習 solidity 的站(https://solidity-by-example.org),里面講了關于 solidity 智能合約的很多漏洞,考慮到現在針對智能合約的攻擊事件頻頻發生,不法分子盜取的加密資產越來越多,我就想寫一些與智能合約安全審計相關的文章給想了解智能合約安全審計的入門者閱讀,讓一些對智能合約安全審計感興趣的初學者可以學到如何識別一些常見的漏洞和如何利用這些漏洞去做什么事情。這次我們就一起先看一個很經典的漏洞 —— 重入漏洞。

前置知識

重入漏洞相信大家都有所耳聞了,那么什么是重入漏洞呢?

以太坊智能合約的特點之一是合約之間可以進行相互間的外部調用。同時,以太坊的轉賬不僅僅局限于外部賬戶,合約賬戶同樣可以擁有以太并進行轉賬等操作,且合約在接收以太的時候會觸發 fallback 函數執行相應的邏輯,這是一種隱藏的外部調用。

OneCash 穩定幣 HKC 已完成在 PlatON 公鏈部署智能合約:據官方信息,OneCash 穩定幣 HKC 已完成在 PlatON 公鏈部署智能合約。此前 HKC 已在 TRON、ETH 部署且上線 Okcoin 交易所。HKC 是 OneCash 發行的合規港幣穩定幣。雙方將不斷發揮各自技術優勢,促進全面生態合作,提升產品隱私保護能力,并在Defi、元宇宙等領域開展應用探索。[2022/1/19 8:58:42]

我們先給重入漏洞下個定義:可以認為合約中所有的外部調用都是不安全的,都有可能存在重入漏洞。例如:如果外部調用的目標是一個攻擊者可以控制的惡意的合約,那么當被攻擊的合約在調用惡意合約的時候攻擊者可以執行惡意的邏輯然后再重新進入到被攻擊合約的內部,通過這樣的方式來發起一筆非預期的外部調用,從而影響被攻擊合約正常的執行邏輯。

上汽通用五菱區塊鏈智能合約平臺上線:10月25日消息,上汽通用五菱區塊鏈智能合約平臺正式上線。區塊鏈智能合約平臺可應用于物料收貨、退貨、對賬、差異調整業務場景,實現電子簽單及單據電子化管理。未來區塊鏈智能合約平臺還將對接業務執行系統,實現交易流程便捷化,助力公司數字化轉型。[2021/10/25 20:55:37]

漏洞示例

好了,看完上面的前置知識我相信大家對重入漏洞都有了一個大致的了解,那么在真實的環境中開發者寫出什么樣的代碼會出現重入漏洞呢,下面我們來看一個比較典型的有重入漏洞的代碼:

漏洞分析

看到這里大家可能會有疑惑了,上面的代碼就是個普通的充提幣的合約,憑什么說他有重入攻擊呢?我們來看這個合約的 withdraw 函數,這個函數中的轉賬操作有一個外部調用(msg.sender.call{value: bal}),所以我們就可以認為這個合約是可能有重入漏洞的,但是具體能否產生危害還需要更深入的分析:

DeFIL2.0智能合約已通過慢霧科技安全審計:據官方消息,DeFIL2.0智能合約已通過慢霧科技安全審計,并已發布完整審計報告。根據審計報告顯示,本次慢霧科技對DeFIL2.0包括平臺通證DFL的發行及銷毀智能合約、FIL標準算力通證FILST發行智能合約等進行了全面審計,并給出了通過慢霧安全審計,各項安全指標全部合格的結論。投資人可至慢霧科技官網輸入Token名稱(DFL或FILST)、合約地址或審計編號:NO. 0X002108300001進行查詢。[2021/9/2 22:54:03]

1. 所有的外部調用都是不安全的且合約在接收以太的時候會觸發 fallback 函數執行相應的邏輯,這是一種隱藏的外部調用,這種隱藏的外部調用是否會造成危害呢?

2. 我們可以看到在 withdraw 函數中是先執行外部調用進行轉賬后才將賬戶余額清零的,那我們可不可以在轉賬外部調用的時候構造一個惡意的邏輯合約在合約執行 balance[msg.sender]=0 之前一直循環調用 withdraw 函數一直提幣從而將合約賬戶清空呢?

金色晨訊 | 康涅狄格州立法者尋求將區塊鏈智能合約合法化:1.德國計劃通過“電子注冊”方式對區塊鏈行業進行監管。

2.比特幣期貨收于3900美元之下。

3.SEC專員:沒有必要建立國家范圍的區塊鏈政策。

4.紐約檢察官已逮捕OneCoin領導者。

5.康涅狄格州立法者尋求將區塊鏈智能合約合法化。

6.Facebook擴大區塊鏈相關職位的招聘數量。

7. IBM再提交兩項區塊鏈專利申請。

8.美國CFTC希望成為一個潛在節點 以訪問區塊鏈中的信息。

9.美國法警尋求數字資產公司幫其處理被扣押加密貨幣。[2019/3/9]

下面我們看看攻擊者編寫的攻擊合約中的攻擊手法是否與我們的漏洞分析相同:

攻擊合約

我們看到 EtherStore 合約是一個充提合約,我們可以在其中充提以太。下面我們將利用攻擊合約將 EtherStore 合約中用戶的余額清零的:

這里我們將引用三個角色,分別為:

用戶:Alice,Bob

攻擊者:Eve

1. 部署 EtherStore 合約;

2. 用戶 1(Alice)和用戶 2(Bob)都分別將 1 個以太幣充值到 EtherStore 合約中;

3. 攻擊者 Eve 部署 Attack 合約時傳入 EtherStore 合約的地址;

4. 攻擊者 Eve 調用 Attack.attack 函數,Attack.attack 又調用 EtherStore.deposit 函數,充值 1 個以太幣到 EtherStore 合約中,此時 EtherStore 合約中共有 3 個以太,分別為 Alice、Bob 的 2 個以太和攻擊者 Eve 剛剛充值進去的 1 個以太。然后 Attack.attack 又調用 EtherStore.withdraw 函數將自己剛剛充值的以太取出,此時 EtherStore 合約中就只剩下 Alice、Bob 的 2 個以太了;

5. 當 Attack.attack 調用 EtherStore.withdraw 提取了先前 Eve 充值的 1 個以太時會觸發 Attack.fallback 函數。這時只要 EtherStore 合約中的以太大于或等于 1 Attack.fallback 就會一直調用 EtherStore.withdraw 函數將 EtherStore 合約中的以太提取到 Attack 合約中,直到 EtherStore 合約中的以太小于 1 。這樣攻擊者 Eve 會得到 EtherStore 合約中剩下的 2 個以太幣(Alice、Bob 充值的兩枚以太幣)。

下面是攻擊者的函數調用流程圖:

修復建議

看了上面的攻擊手法相信大家對重入漏洞都會有一個自己的認知,但是只會攻擊可不行,我們的目的是為了防御,那么作為開發人員如何避免寫出漏洞代碼還有作為審計人員如何快速發現問題代碼呢,下面我們就以這兩個身份來分析如何防御重入漏洞和如何在代碼中快速找出重入漏洞:

(1)作為開發人員

站在開發者的角度我們需要做的是寫好代碼,避免重入漏洞的產生。

1. 寫代碼時需要遵循先判斷,后寫入變量在進行外部調用的編碼規范(Checks-Effects-Interactions);

2. 加入防重入鎖。

下面是一個防重入鎖的代碼示例:

(2)作為審計人員

作為審計人員我們需要關注的是重入漏洞的特征:所有涉及到外部合約調用的代碼位置都是不安全的。這樣在審計過程中需要重點關注外部調用,然后推演外部調用可能產生的危害,這樣就能判斷這個地方是否會因為重入點而產生危害。

Tags:ETHSTOETHERSTETHSHIB價格ASTOEthereumPayFirst Sirius

歐易okex官網
金色前哨 | 更多政府法規設定監管后 Facebook撤銷加密廣告禁令_BOOK:FACEMETA價格

Facebook周三宣布決定撤銷長期以來阻止大多數加密貨幣公司在其服務上投放廣告的政策,將允許在Facebook和Instagram上投放更多加密貨幣和區塊鏈廣告.

1900/1/1 0:00:00
比爾蓋茨:未來兩到三年內 大多數虛擬會議將轉向元宇宙_比特幣:TEA

在近日發布的一封年終信中,微軟聯合創始人、億萬富翁比爾蓋茨(Bill Gates)不僅回顧了“最不尋常和艱難的2021年”,同時也對2022年及以后充滿樂觀——包括一個 “更加數字化的未來”.

1900/1/1 0:00:00
金色前哨|游戲巨頭育碧將推出NFT游戲平臺Quartz 欲進軍元宇宙_QUA:Polychart

12月7日消息,育碧推出了新平臺Ubisoft Quartz的測試版,該平臺允許用戶獲取可在游戲中使用的物品的NFT,例如武器、服裝或車輛.

1900/1/1 0:00:00
格局打開 讓敘事杠桿拉滿_STRI:TRIP

項目募資越來越簡單了,沒錯,因為市場里的錢越來越多了。然而,你的估值能拉到多少?各個項目間的差異大相徑庭。市盈率是傳統金融中最常見的相對估值法,人們應用此指標將不同項目進行對比.

1900/1/1 0:00:00
最“懂”加密交易的倉鼠過世 投資回報超巴菲特_binance:GOX

也許是天妒英才,投資回報率超過巴菲特的加密股神倉鼠“Goxx先生”去世了。11 月 20 日,“Goxx先生”進行直播并完成最后一筆交易之后,接連兩天的直播都沒有看到它的身影,也讓許多關心的粉絲.

1900/1/1 0:00:00
火小律:解讀北京首例比特幣挖礦合同無效案_WEB:REEF

近日,北京朝陽法院審結一起因比特幣“挖礦”遲遲未見收益而引發的服務合同糾紛。 案情如下: 2019年5月,豐復久信公司與中研智創公司簽訂《計算機設備采購合同》《服務合同書》等協議,約定豐復久信公.

1900/1/1 0:00:00
ads