比特幣交易所 比特幣交易所
Ctrl+D 比特幣交易所
ads
首頁 > 波場 > Info

科普 | 智能合約安全審計入門篇 —— 溢出漏洞_TIME

Author:

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

By:小白@慢霧安全團隊

背景概述

上周寫了智能合約安全審計入門篇——重入漏洞,這次我們接著來說一個同樣很經典的漏洞——?溢出漏洞。

前置知識

首先我們還是先來看看溢出是什么:

算術溢出或簡稱為溢出分為兩種:上溢和下溢。所謂上溢是指在運行單項數值計算時,當計算產生出來的結果非常大,大于寄存器或存儲器所能存儲或表示的能力限制就會產生上溢,例如在solidity中,uint8所能表示的范圍是0-255這256個數,當使用uint8類型在實際運算中計算255+1是會出現上溢的,這樣計算出來的結果為0也就是uint8類型可表示的最小值。同樣的,下溢就是當計算產生出來的結果非常小,小于寄存器或存儲器所能存儲或表示的能力限制就會產生下溢。例如在Solidity中,當使用uint8類型計算0-1時就會產生下溢,這樣計算出來的值為255也就是uint8類型可表示的最大值。

國務院:推進科普與區塊鏈技術深度融合:為貫徹落實黨中央、國務院關于科普和科學素質建設的重要部署,依據《中華人民共和國科學技術進步法》、《中華人民共和國科學技術普及法》制定《全民科學素質行動規劃綱要(2021-2035年)》,其中要求實施智慧科普建設工程。推進科普與區塊鏈等技術深度融合,強化需求感知、用戶分層、情景應用理念,推動傳播方式、組織動員、運營服務等創新升級,加強“科普中國”建設,強化科普信息落地應用,與智慧教育、智慧城市、智慧社區等深度融合。(新華社)[2021/7/10 0:40:52]

如果一個合約有溢出漏洞的話會導致計算的實際結果和預期的結果產生非常大的差異,這樣輕則會影響合約的正常邏輯,重則會導致合約中的資金丟失。但是溢出漏洞是存在版本限制的,在Solidity<0

動態 | 報告:區塊鏈等熱點詞促使童書科普百科類成交額同比增速最高:近日,京東圖書與艾瑞咨詢聯合發布了《2019中國圖書市場報告》。報告指出,AI、5G、區塊鏈、機器人、VR、智能家居、AR這些熱點詞,不斷點燃科技熱潮,科技在改變大眾生活的同時,也吸引了越來越多家長的關注,從小培養孩子對科技的興趣和熱愛。因此童書中科普百科類成交額同比增速最高,占比將近40%。[2020/1/8]

functionincreaseLockTime(uint_secondsToIncrease)public{lockTime+=_secondsToIncrease;}

functionwithdraw()public{require(balances>0,"Insufficientfunds");require(block

聲音 | 浪潮集團云南分公司總經理:云南區塊鏈產業發展需從“科普”到“專精”不斷深化:據昆明日報消息,浪潮集團云南分公司總經理鄭昕表示,云南區塊鏈產業發展需從“科普”到“專精”不斷深化。下一步,浪潮將繼續加大云南農業產業高質量發展體系建設力度,重點以普洱茶等云南優勢產業為切入點,打造云南“綠色、有機農產品高地”的品牌形象,并在此基礎上,開展基于區塊鏈的供應鏈金融服務,解決中小企業貸款難、貸款貴問題。[2019/11/11]

}

漏洞分析

我們可以看到,TimeLock合約充當了時間保險庫。用戶可以將代幣通過deposit函數存入該合約并鎖定,且至少一周內不能提現。當然用戶也可以通過increaseLockTime函數來增加存儲時間,用戶在設定的存儲期限到期前是無法提取TimeLock合約中鎖定的代幣的。首先我們發現這個合約中的increaseLockTime函數和deposit函數具有運算功能,并且合約支持的版本是:0

動態 | 浙江衛視節目科普支付寶區塊鏈防偽溯源產品:昨日,在浙江衛視播出的科普綜藝欄目《智造將來》現場,支付寶首次展示了支付寶區塊鏈防偽溯源產品,以接地氣的方式公開向大眾展示區塊鏈在生活中的應用。[2019/3/4]

fallback()externalpayable{}

functionattack()publicpayable{timeLock

}

這里我們將使用Attack攻擊合約先存入以太后利用合約的溢出漏洞在存儲未到期的情況下提取我們在剛剛TimeLock合約中存入并鎖定的以太:

1.首先部署TimeLock合約;

2.再部署Attack合約并在構造函數中傳入TimeLock合約的地址;

3.調用Attack.attack函數,Attack.attack又調用TimeLock.deposit函數向TimeLock合約中存入一個以太,之后Attack.attack又調用TimeLock.increaseLockTime函數并傳入uint類型可表示的最大值加1再減去當前TimeLock合約中記錄的鎖定時間。此時TimeLock.increaseLockTime函數中的lockTime的計算結果為2^256這個值,在uint256類型中2^256這個數存在上溢所以計算結果為2^256=0此時我們剛剛存入TimeLock合約中的一個以太的鎖定時間就變為0;

4.這時Attack.attack再調用TimeLock.withdraw函數將成功通過block.timestamp>lockTime這項檢查讓我們能夠在存儲時間未到期的情況下成功提前取出我們剛剛在TimeLock合約中存入并鎖定的那個以太。

下面是攻擊流程圖:

修復建議

到這里相信大家對溢出漏洞都有自己的理解了,那么下面我們就以開發者和審計者的角度來分析如何預防溢出漏洞和如何快速找出溢出漏洞:

作為開發者

1.使用SafeMath來防止溢出;

2.使用Solidity0.8及以上版本來開發合約并慎用unchecked因為在unchecked修飾的代碼塊里面是不會對參數進行溢出檢查的;

3.需要慎用變量類型強制轉換,例如將uint256類型的參數強轉為uint8類型由于兩種類型的取值范圍不同也可能會導致溢出。

作為審計者

1.首先查看合約版本是否在Solidity0.8版本以下或者是否存在unchecked修飾的代碼塊,如果存在則優先檢查參數的溢出可能并確定影響范圍;

2.如果合約版本在Solidity0.8版本以下則需要查看合約是否引用了SafeMath;

3.如果使用了SafeMath我們需要注意合約中有沒有強制類型轉換,如果有的話則可能會存在溢出的風險;

4.如果沒有使用SafeMath且合約中存在算術運算的我們就可以認為這個合約是可能存在溢出風險的,在實際審計中還要結合實際代碼來看。

Tags:LOCLOCKTIMEIMEblockchain官方網站登錄不了blockchain蘋果版下載Nftimetimeassetscoin

波場
Huobi Global已完成中國大陸用戶幣幣交易清退,保留資產處置功能至12月31日_Huobi

巴比特訊,12月15日,HuobiGlobal發布關于已完成中國大陸用戶幣幣交易清退及關于資產處置的補充說明.

1900/1/1 0:00:00
資本市場“上鏈”加速進行時:首批金融科技試點多項目掛鉤區塊鏈_人工智能

圍繞資本市場技術創新的頂層推動一直在持續。日前,北京證監局發布了《關于就資本市場金融科技創新試點第一批試點項目方案公開征求意見的通知》,披露了證監會在北京地區首先啟動的資本市場金融科技創新試點工.

1900/1/1 0:00:00
區塊鏈在“抗疫”中發揮了哪些作用?后疫情時代,區塊鏈的應用落地有哪些進展?_ORK

來源:資本實驗室 作者:冉偉 原標題:《“抗疫”區塊鏈:新技術應用于社會治理的一次重要實踐》新冠疫情是人類社會進入21世紀后經歷的一場全球性的重大危機.

1900/1/1 0:00:00
B站測試“高能鏈”,啟動“元宇宙”業務_元宇宙

來源:Tech星球 文|?陳橋輝? 封面來源?|視覺中國? 對于元宇宙概念的突然火爆,國內不少互聯網頭部企業都宣布要參與其中,近期公開涉足元宇宙的就有百度的沉浸社交App“希壤”.

1900/1/1 0:00:00
內部分享曝光:Coinbase如何看待元宇宙?_元宇宙

作者:Coinbase創始人&CEOBrianArmstrong以及Coinbase身份產品負責人AlexReeve最近一段時間,每個人都在談論元宇宙.

1900/1/1 0:00:00
觀點 | Web3.0 興起之際,元宇宙不屬于任何一家科技巨頭!_WEB3

作者|?aNumak&Company 譯者|彎月 出品&來源:CSDN在聽到元宇宙時,你首先想到的可能是科幻小說,或另一個宇宙.

1900/1/1 0:00:00
ads