加密貨幣交易所 加密貨幣交易所
Ctrl+D 加密貨幣交易所
ads
首頁 > ICP > Info

研報丨硬核解析智能合約漏洞原理_SDD:usdn幣掛鉤

Author:

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

撰文:Chen?Bo?Yu、Hsu?Tzu?Hsiu

智能合約基礎介紹

在探討智能合約漏洞解析之前,我們先從一個基本的范例來了解一個智能合約會具備哪些元素。

●?變數:即此范例中的balances,在這個合約中負責存儲使用者地址在合約中對應的存款余額

●?函數:即此范例中的getBalance,使用者呼叫此函數時,會回傳使用者在合約中的存款余額

●?接收函數:即此范例中的receive,這是一個內建的函數。當合約收到使用者傳入ETH且無呼叫其他函示時會觸發,此范例在觸發接收函數時,會變更變數balances的狀態,而函數中的msg.sender代表的是交易的發送者地址

●?回退函數:即此范例中的fallback,這也是一個內建的函數。當使用者呼叫了不存在的函數時觸發,可以理解為例外處理函數。在此范例中,觸發時把交易回退,亦即讓交易失效。

常見漏洞解析

了解問題發生的原因,并且歸納問題的類別可以幫助我們更好的防范。DASP收錄了十種智能合約漏洞,下面我們整理了其中最常見的合約漏洞以及新型態的攻擊模式。

Messari發布USDD Q3調研報告:Q3錢包數量增5倍:11月3日消息,加密數據研究機構Messari發布了USDD Q3調研報告,報告從供應量、質押資產、儲備金、錨定、定性分析等多個維度對USDD進行了研究。Messari指出,在經過了二季度的震蕩后USDD成功回錨,第三季度PSM的推出有助于維持錨定,并提升針對USDD穩定性的信心。

報告還指出,其中持有USDD的錢包數量在該季度增長了5倍,達到了12萬個,且平均持有的USDD價值達到6000美元。USDD的累計交易量超過62億,日均交易量的最低筆數為400。由于采用了兌換工具兼匯率穩定機制PSM,USDD目前仍然維持著300%的超額抵押率。

據悉,USDD由波場聯合儲備(TRON DAO Reserve)與區塊鏈主流機構發起,5月5日正式上線,6月5日正式升級為去中心化超抵押穩定幣,升級當日抵押率超過130%,目前的抵押率維持在300%左右。USDD運行波場、以太坊和幣安鏈等全球主流公鏈,發行總額已達到7.25億美元,總質押達到21億美元。[2022/11/3 12:13:20]

1.重入漏洞

重入漏洞是最著名的智能合約漏洞,先前提到TheDAO事件中也是為此原因而被駭客攻擊,該漏洞原理是通過循環調用一個函數而達到攻擊目的。

研報:HT有望成為加密貨幣世界“新十年”核心資產:7月28日,據研究報告《下注加密新十年核心資產:通縮的生息資產HT》指出,以HT為代表的一系列幣種,已經良好地具備在加密貨幣世界新十年成為“核心資產”的條件。HT的生態具有高規格的價值注入,使其能夠在每年高速通縮的情況下,兼具生息的特點。

經過測算,在未來5年,HT很可能在目前基礎上實現每年4%~12%的通縮,則5年后HT保守預測可能僅剩約1.2億枚,是目前的61%。同時,HT持有者能夠獲取一個很有競爭力的生息增長,保守估計每年高達18.5%左右。因此,它將成為加密貨幣世界新十年最值得下注的新的核心資產。[2020/7/28]

這邊展示的是一個簡單的提款函數,讓使用者可以根據合約里的余額取走存款。可以注意到的是,當這個函數的調用者為一智能合約的時候,提款操作將會觸發該智能合約的receive函數,并把剩余的gas傳入。而此時還未把使用者在原先智能合約中記錄的余額歸零,攻擊者即可在receive函數里再次調用withdrawBalance函數,并通過余額狀態尚未修改的漏洞達到重復取款的目的,直到gas耗盡或合約被掏空。

攻擊流程圖展示

防范方式也很簡單,只要先把智能合約紀錄的余額做清空,再做轉帳動作,即可避免攻擊發生。

分析 | 研報:區塊鏈將率先在金融、游戲、通證資產實現落地:2月20日消息,維京資本近日發布《2018區塊鏈年度報告 》,其中指出,2019年,在區塊鏈產業方面,區塊鏈將在金融、游戲、通證資產率先落地并且比過往任何時候都走得更遠,此外,還有物聯網、供應鏈、BaaS方面都是值得期待的領域。產業也會出現某種形式上的整合浪潮,在熊市背景下,有獨特競爭優勢、產品優勢的項目將會存活并成功。[2019/2/20]

2.整數溢位漏洞

在以太坊智能合約中,uint256是常見的整數型別,這意味著此變數可以儲存的整數范圍為0~2^256-1,存儲上限大約是一個78位數的值,你可能會覺得這個數已經夠大了,但它仍然可被用來達成溢位,也就是說當一個變數的值為2^256-1,而對這個變數的值又再進行加一的操作時,他的值會因為超過存儲上限而變為0。要避免此漏洞,我們需要在整數運算前針對整數的范圍去做檢查,并在偵測到溢位運算時即時拋出異常。

3.阻斷服務攻擊

智能合約服務中斷是一個嚴重的問題,因為有些漏洞造成的服務中斷是永久性的,無法恢復。攻擊原理包括了:意外執行SELFDESTRUCT指令、訪問控制權限出錯、Gaslimit達到區塊上限使合約無法正常運作、以及我們這邊展示的利用異常拋出,造成合約永久性癱瘓。

動態 | 多倫多上市公司研報:全球哈希率與比特幣價格差異顯著:據消息,近日多倫多上市區塊鏈投資公司Block One Capital Inc.發表了一篇關于加密貨幣采礦業的研究報告。研究顯示,隨著越來越多比特幣礦工的加入,哈希率迅速上升,采礦收益率迅速下降,因此,當下并不是投資挖礦業的好時機。同時,研究還顯示,采礦硬件在運營最初幾天利潤率最高,采礦設備的部署時機對收入影響極大。[2018/9/6]

這是一個簡單的拍賣合約示例,出價高者可以成為currentLeader,并記錄該次競標出價為highestBid,同時把先前的出價金額還給前一個競標領先者。攻擊者可以部署一個智能合約,在正常出價后讓該合約成為currentLeader,并在合約內負責收款的receive函數中使用revert函數來拋出異常,讓交易失效。當其他使用者想出價競標時,會因為合約無法轉錢給currentLeader,而造成交易失敗,拍賣合約的功能也因此永久失效,攻擊者得以贏下此次的拍賣競標。

芝商所研報:比特幣供應嚴重欠缺彈性,無彈性供應將導致波動加劇:芝商所經濟學家Blu Putnam、Erik Norland發布最新研報稱,比特幣供應嚴重欠缺彈性,而且與商品一樣,無彈性供應將導致波動加劇;比特幣算法問題的“難度”與其價格形成反饋環路,“難度”是左右價格的主要因素,但價格也會影響“難度”;交易量可能影響價格走勢,交易成本上升對比特幣來說意味著風險。[2018/5/8]

攻擊者合約示例

4.?Txorigin漏洞攻擊

當開發者利用solidity中內建的tx.origin變數來驗證權限時,會讓攻擊者有攻擊的機會。在進入示例之前,須先了解tx.origin返回的是原始發送交易的地址,而msg.sender返回的是當前交易的發送者。以下示意圖情景為:

用戶A呼叫了合約B內部的函數,并在函數內又再呼叫了合約C。可以觀察tx.origin與msg.sender的差異。

接下來來看看實際的攻擊場景,上圖智能合約中的sendTo函數必須符合tx.origin與owner相等的條件才會被執行,但是攻擊者可以通過下圖的智能合約,利用上述提過tx.origin與msg.sender的差異,巧妙地繞過驗證,并觸發sendTo函數。具體細節是當攻擊者誘導上圖合約的owner去觸發了下圖合約的fallback函數時,若攻擊合約在fallback函數內去調用sendTo函數,就可以得到owner的權限去執行。

5.未適當處理externalcall的回傳值

在智能合約中,使用到低層級調用函數指令時,如:address.call()、address.callcode()、address.delegatecall()?和address.send()等等,如果調用失敗并不會拋出異常,僅會回傳調用結果的布林值,合約將能繼續往下執行。若未對調用結果的回傳值做檢查,可能將會使智能合約無法正常運作。

我們以一個簡單的取款函數作為示例,當使用一合約呼叫上圖的withdraw函數,且若該合約不能接收ETH轉入時,會造成呼叫方無法收到ETH,但因合約會繼續往下執行,導致其在合約中balances的狀態紀錄被改變。修正寫法如下:

6.?短地址攻擊

此攻擊手法大多出現在ERC-20智能合約中,須先了解到,當我們呼叫一個函數時,在EVM里實際上是在解析一堆ABI字符。而一般ERC-20標準的代幣都會實現用來轉帳的transfer函數,當我們調用transfer函數時,交易的調用內容由3個部分組成:

●4字節,函數名的哈希值,例如:a9059cbb

●32字節,以太坊地址,例如:

00000000000000000000000011223344556677889900aabbccddeeff11223344

●32字節,代表需要轉送的代幣數量:

0000000000000000000000000000000000000000000000000de0b6b3a7640000

若攻擊者地址為:0x1234567890123456789012345678901234567800,且在呼叫transfer時刻意舍去尾數零,若合約內沒有對內容格式做檢查,EVM讀取時會從第三個參數的高位拿00來補充,這將造成實際想要轉送的代幣數量缺少一個字節,即向左移位了8個比特,數值瞬間擴大256倍,攻擊者成功盜取代幣合約中的代幣。

7.閃電貸攻擊

閃電貸,顧名思義就是快速貸款,那這個速度有多快呢?官方的解釋是,貸款發行和償還的交易必須在以太坊上同一個區塊內完成。可以說閃電貸是一種借助于區塊鏈技術的顛覆式創新,它與傳統的借貸有兩個主要的差別,一個是它無需抵押品,第二個是它要求要在執行借出的同一筆交易中執行還款操作,因此對于出借資金的那方來說是不用承擔違約風險的,因為只有當區塊鏈上借貸方執行的借出與還款操作都確實被執行了,這筆交易才有效。也就是說我們可以設計一個智能合約來借出資金,接著執行一些資金操作,最后在將資金歸還,而這些操作都會在同一筆交易中完成。這就給黑客們帶來了利用閃電貸發動攻擊的機會,因為它大大的降低了黑客的攻擊成本,近期在DeFi領域的多數攻擊都是使用閃電貸來實現,主要都是黑客通過借出的巨額資金來對協議制造價差并從中套利,還款后再帶著不當獲利逃之夭夭。我們從bZx攻擊事件來了解黑客的攻擊思路:

1.?黑客通過閃電貸從去中心化數字資產衍生交易平臺dYdX借出了一萬枚ETH

2.?使用其中的5000枚ETH抵押在去中心化借貸平臺Compound以借出112枚wBTC

3.?剩下的的5000枚ETH到去中心化借貸平臺bZx上開了wBTC的空單

4.?用借出的112枚wBTC到去中心化交易所Uniswap砸盤,讓wBTC價格快速下跌

這一系列操作讓黑客在bZx上開的空單倉位大賺,接著歸還閃電貸借出的一萬枚ETH,并在這個過程中獲得了價值35萬美元的收益。此次攻擊的主要原因是因為Uniswap的價格的劇烈變化最終導致資產的損失,這本該是正常的市場行為,但是黑客通過惡意操縱市場,使項目方造成損失。bZx合約被操縱一事,開始讓閃電貸進入了更多開發者的視線,一方面許多聰明的開發者開發出了全新的去中心化金融應用,同時也讓開發者更為警惕可能的邏輯攻擊。

結論

智能合約的運作為被動的,所有的合約動作均須由使用者發起交易、呼叫合約中的函數函數才會執行動作,而合約執行基于區塊鏈的特性是不可逆的,且當合約部署上區塊鏈后,所有資料都是公開透明的,即便代碼不開源,也可利用反組譯工具回推合約內容。因此,開發者需熟悉漏洞原理并避免之,使用者也應了解合約安全議題,維護自身權益。

Tags:SDDUSDUSDD區塊鏈usdd幣死亡螺旋usdn幣掛鉤usdd幣價格區塊鏈工程專業學什么課程

ICP
如何核算Filecoin網絡上的Gas費_GAS:FIL

之前撰寫了一篇《一文讀懂FilecoinGas費供需現狀與超額燃燒》文章,收到一些用戶的反饋。基于有部分用戶不太理解如何運用該公式,這次我們分享一下如何一步步核算Gas費,從礦工的角度來看如何支.

1900/1/1 0:00:00
德鄰資本研究院:淺析以太坊Layer-2 擴容解決方案_LAYER:ROL

需要擴容 自從以太坊主網上線以來,其擴容問題一直是討論最多的話題之一,尤其是當某些熱點事件引起網絡擁堵時,對于擴容話題的關注和討論往往更加白熱化.

1900/1/1 0:00:00
谷燕西:Kraken獲得加密數字銀行牌照的意義_比特幣:Bitcoin Token

最近,美國懷俄明州建立了一個新的洲銀行機構牌照。這樣的機構可以吸收用戶的資產存儲,但是必須保證100%的存儲,不能提供貸款服務。用戶托管的數字資產同這個銀行機構的關系是寄托關系.

1900/1/1 0:00:00
CFTC討論DeFi監管:如果平臺非法運行,誰來負責?_FTC:Defi Factory

美國商品期貨交易委員會技術咨詢委員會今日主持了題為“去中心化金融的增長和監管挑戰”的討論,法學教授AaronWright和律師GaryDeWaal進行了發言.

1900/1/1 0:00:00
行情分析 | BTC刷新歷史新高 需防范多翻空_BTC:Vadia Finance

上期回顧 市場快速回調,放量下跌,短期獲利盤拋售導致,當市場情緒恢復穩定之后,市場整體仍將再次上漲.

1900/1/1 0:00:00
DappRadar報告:2020年DeFi繁榮推動DApp總交易量增長近12倍_APP:以太坊交易軟件

根據DappRadar,2020年迄今為止的DApp總交易量已經高達2700億美元,其中95%來自以太坊上的DeFi生態系統.

1900/1/1 0:00:00
ads