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

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

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類型可表示的最大值。

歐易OKEx將于3月18日推出DeFi系列科普視頻:據歐易OKEx官方消息顯示,歐易OKEx將正式推出DeFi系列科普視頻《歐易DeFi20講》,本系列節目由歐易OKEx亞太區CEO馬克金主講。該視頻首期將于3月18日11:00(HKT)推出,用戶可以在歐易OKEx官方學院、金色財經觀看。

《歐易DeFi20講》主要包含DeFi入門指南、全景解讀DeFi生態及如何參與DeFi三個篇章,可以輕松使用戶了解DeFi原理,洞察DeFi價值,掌握DeFi熱點,更多詳情請關注歐易OKEx官方學院。[2021/3/18 18:55:59]

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

聲音 | 上海股交所總經理:區塊鏈想要大規模發展要做好社會科普工作:金色財經報道,上海股交所總經理張云峰表示,區塊鏈當前還處于一個“概念”的階段,距離成熟應用,影響到百姓的日常生活還有很長的路要走。對于“區塊鏈”和其會帶來的社會和經濟效果,沈陽應當持審慎的態度。區塊鏈想要大規模發展,一方面要做好這項復雜技術的社會科普工作,加快社會大眾對區塊鏈的了解。另一方面,要充分發揮市場的作用,讓企業用實實在在的技術創新,賦能實體經濟的發展。[2019/11/17]

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

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

動態 | 區塊鏈技術入選科普雜志《科學美國人》2019十大突破性技術榜單:據新浪網今日新聞報道,美國科普雜志《科學美國人》公布 2019 十大突破性技術榜單。區塊鏈技術因在保障食品安全中的作用而上榜。 入選榜單具體原因:區塊鏈技術的發展應用將顯著改善食品污染源數據追蹤的困境。利用區塊鏈云端系統,食品制造商可以依次在計算機儲存各類過程的信息。[2019/9/29]

}

漏洞分析

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

金色財經獨家分析 監管機構、媒體、業界提示詐騙風險 區塊鏈科普道阻且長:新華社今日發文表示,近來“區塊鏈”類詐騙案件頻發,不法分子以“投資虛擬貨幣周期短、收益高、風險低”為借口,騙取用戶信任并誘使其轉賬進行投資。無獨有偶,同日消息,騰訊手機管家安全專家也提醒此類風險,并從技術上提出防騙建議。在美國,監管機構警示加密貨幣欺詐現象普遍承諾高收益而不披露潛在風險。金色財經獨家分析,不法分子假借新技術之名進行詐騙,一方面是抓住民眾趨利的心理,一方面反映出區塊鏈科普的欠缺。區塊鏈是新興科技和底層技術并有改變社會生產關系的潛力,應該進行系統性的科普教育,當前,部分大學已經開始設置了區塊鏈課程,但對于普通民眾仍然有科普的需求,人們應該了解到系統和正確的知識,不僅要了解區塊鏈的好,也要明確局限和弊端,以在高收益的誘惑下,保持清醒客觀。[2018/4/11]

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:LOCLOCKTIMETIMBlocknetHashBit BlockChainTIME幣CyberTime Finance

幣安app官網下載
薩爾瓦多美元債務因比特幣債券計劃而跳水_比特幣

據Cointelegraph消息,薩爾瓦多的美元債券在11月22日跌至64.4美分兌1美元。此前薩爾瓦多宣布與加密貨幣公司Blockstream和Bitfinex達成協議,將通過Blockstr.

1900/1/1 0:00:00
郭臺銘:元宇宙概念還需要5到10年,甚至更長的時間才能落實_PAY

據DoNews12月5日消息,鴻海董事長郭臺銘近期出席個人投資成立的新創公司富佳生技醫療科技展記者會,并在活動中針對“元宇宙”等概念發表看法.

1900/1/1 0:00:00
監管邁出第一步,穩定幣鑄造贖回需透明_穩定幣

出品|白澤研究院 如果說加密資產是引擎的話,那么穩定幣就像它的活塞。在過去的七年里,穩定幣已經發展成為整個加密生態系統的主要支柱.

1900/1/1 0:00:00
融資新聞 | 加密托管銀行Anchorage Digital完成3.5億美元D輪融資,股權投資巨頭KKR領投_HOR

主要的加密托管銀行AnchorageDigital已完成新一輪融資,使其估值超過30億美元。AnchorageDigital周三宣布,其已在由股權投資巨頭KKR牽頭的D輪融資中募集3.5億美元.

1900/1/1 0:00:00
元宇宙區塊鏈游戲,兩周能賺14萬元?月收益近100%?記者實地探訪發現..._元宇宙

來源:央視財經 近期,元宇宙成了市場上的熱點,但與此同時,市面上出現了很多打著元宇宙旗號的區塊鏈游戲。這些游戲宣傳稱可以一邊玩游戲一邊賺錢,月收益甚至接近100%.

1900/1/1 0:00:00
融資新聞 | 用于構建元宇宙的3D NFT市場MetaMundo宣布籌集270萬美元種子輪融資,Animoca Brands領投_META

用于構建元宇宙的3D?NFT市場MetaMundo今天宣布,它已經籌集了270萬美元的種子資金.

1900/1/1 0:00:00
ads