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

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

Author:

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

背景概述

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

前置知識

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

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

Ripple前開發者關系總監:目前正在開發XRP Ledger的智能合約:金色財經報道,Ripple的前開發者關系總監Matt Hamilton透露了一些關于XRP Ledger即將創新的細節。Hamilton特別表示,XRP Ledger很快將被采用,目前正在開發智能合約。[2022/12/22 22:01:49]

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

漏洞示例

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

聲音 | 布比CTO王璟 : 智能合約更大的安全隱患一定會出現在虛擬機本身:11月24日,在杭州舉辦的2018中國區塊鏈技術大會上,布比CTO王璟在演講中表示,目前區塊鏈底層大多數采用Nosql數據庫,在大并發下,需要實現Nosql數據庫集群,或更加高效的文件存儲方式。而商用級別的隱私保護,除了最基本的數據加密,還需滿足性能、監管、靈活授權查看等需求。此外,單鏈的性能永遠存在性能瓶頸,因此同構鏈的主子鏈、側鏈:異構鏈間的跨鏈,都將成為未來的研究方向。而在合約安全方面,目前,智能合約的安全僅僅停留在合約代碼本身,更大的安全隱患一定會出現在虛擬機本身。[2018/11/24]

漏洞分析

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

分析 | 昨日新增226個代幣型智能合約:第三方大數據評級機構RatingToken最新數據顯示,2018年8月24日全球共新增1277個合約地址,其中226個為代幣型智能合約。 在RatingToken同時發布的“新增代幣型智能合約風險榜”中,MindWalk Token Pre-sale(MINDW)、Green World(GW)和FoMo3D Long Official(F3D)風險最高排名前三,其中MindWalk Token Pre-sale(MINDW)存在31個安全風險,檢測得分為3.1。此外,其他登上該風險榜TOP10的還包括Giegle(GIEGLE)、F3DGo(F3DGo)、Ionixx DigiRights(INX DIGI)、Orderbook Global Token(OBK)、MOBU token(MOBU)、Trans coin(TC)和Luckydice Official(LK3D)。如需查看更多智能合約檢測結果,請查看原文鏈接。[2018/8/25]

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

火幣正在對平臺上的ERC20智能合約代碼進行復審:火幣發布公告稱:近期基于以太坊ERC20標準的智能合約漏洞出現較為頻繁,火幣Pro安全風控團隊已經做了充分的防范工作,在新發現漏洞時都會第一時間停止該合約幣種的充提與交易,并進行資產快照,以確保用戶資產安全。正在對火幣平臺上的ERC20智能合約代碼進行復審;同時,為了進一步加強安全防范,火幣Pro決定聯合全球知名的網絡安全機構知道創宇,慢霧科技等公司對火幣Pro已經上線的智能合約項目進行代碼復審。 未來,火幣將聯合全球最頂尖的安全機構推出“安全火伴計劃”。申請上線火幣的項目方,需要提供火幣認可的安全機構做出的審計報告。[2018/5/24]

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

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

攻擊合約

我們看到 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:OREACKSTOREETHCipher CorePACKmatchstorevalueDSETH

幣贏
區塊鏈:中國區塊鏈產業生態地圖報告(2021第三期)_MAP

來源:清華大學社會治理與發展研究院;中關村大數據產業聯盟;2021年12月 目錄 導讀 第一章 中國區塊鏈產業發展宏觀分析 一、 國際熱點與趨勢 二、 中國區塊鏈產業發展概況三、 中國區塊鏈產業.

1900/1/1 0:00:00
加密貨幣:金色觀察|清退倒計時:這些平臺將在12月退出中國大陸市場_COI

監管重錘之下,加密市場相關的平臺已陸續撤出中國大陸市場。2021年進入最后一個月,距離加密貨幣相關的平臺徹底退出中國大陸也進入了倒計時.

1900/1/1 0:00:00
BOOK:元宇宙公司Meta命途多舛的數字貨幣項目終將擱淺?離職高管再添一員_BOOK幣

美東時間11月30日周二,元宇宙公司Meta Platform(原Facebook)一波未平一波又起,先是被英國監管機構要求出售才收購不久的動態圖片公司Giphy.

1900/1/1 0:00:00
certik:紅杉資本布局區塊鏈安全賽道 以近10億美元估值領投CertiK 8000萬美元B2輪_ERT

CertiK于2021年11月30日,宣布完成8000萬美元的B2輪融資,再次刷新區塊鏈安全賽道單筆最大融資額.

1900/1/1 0:00:00
PIC:Epic Games銷售副總裁:虛幻引擎是支撐元宇宙技術的中堅力量_GAME

游戲引擎技術正跨行業進入影視、汽車等領域隨著游戲產業蓬勃發展,引擎自然也在進化。玩家們越來越渴求高質量3A大作,游戲大廠們也透過引擎技術革新,提高制作游戲效率并生產高質量作品,豐富玩家游戲體驗.

1900/1/1 0:00:00
WORLD:NFT黑客盜圖的背后:是180萬美金的大生意_WOR

2021年,元宇宙、NFT這幾個詞徹底出圈。自從扎克伯格將Facebook改名為Meta之后,不管你是否知道這到底是什么意思,你都一定聽說過這幾個詞.

1900/1/1 0:00:00
ads