溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何從以太坊MorphToken事件看智能合約構(gòu)造函數(shù)大小寫編碼錯誤漏洞

發(fā)布時間:2021-12-24 11:25:13 來源:億速云 閱讀:121 作者:柒染 欄目:安全技術(shù)

如何從以太坊MorphToken事件看智能合約構(gòu)造函數(shù)大小寫編碼錯誤漏洞,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

一、漏洞概述

以太坊智能合約的含義就是一組代碼(函數(shù))和數(shù)據(jù)(合約的狀態(tài)),它們位于以太坊區(qū)塊鏈的一個特定地址上。智能合約一般使用solidity語言編寫。

Morpheus Network與世界上一些大型航運、海關(guān)和銀行公司協(xié)商,通過利用區(qū)塊鏈的智能合約技術(shù)建立一個全面服務(wù)的、全球性的、自動化的、開放的供應(yīng)鏈平臺和一個集成的加密貨幣支付系統(tǒng) ,發(fā)布基于以太坊的 MorphToken。

2018年6月22日,Morpheus Network 發(fā)公告稱將發(fā)布新的智能合約,以更新目前含有漏洞的合約代碼。新的Token名稱為MRPH,新舊Token以1:1兌換。

隨后,知道創(chuàng)宇404區(qū)塊鏈安全研究團(tuán)隊開始漏洞應(yīng)急,通過分析MorphToken合約代碼和交易歷史,確定該漏洞是由于大小寫編碼問題,錯誤的將Owned合約的構(gòu)造函數(shù)Owned的首字母小寫,使之成為了一個普通函數(shù)owned,任何以太坊賬戶均可調(diào)用該函數(shù)奪取合約的所有權(quán),進(jìn)一步實現(xiàn)盜幣等系列非法操作。隨即我們發(fā)布了相關(guān)應(yīng)急報告,同時我們也注意到BCSEC安全團(tuán)隊發(fā)布了相關(guān)的分析文檔。

在后續(xù)的研究中,我們發(fā)現(xiàn)早在2017年8月29日,Github上就有人提到了這種因構(gòu)造函數(shù)缺失導(dǎo)致的合約安全漏洞問題。該漏洞目前影響包括MorphToken、B2X、DoubleOrNothingImpl等多個智能合約。

二、漏洞原理

在MorphToken的合約代碼里:https://etherscan.io/address/0x2ef27bf41236bd859a95209e17a43fbd26851f92#code 可以明顯的看到相關(guān)大小寫編寫錯誤:

如何從以太坊MorphToken事件看智能合約構(gòu)造函數(shù)大小寫編碼錯誤漏洞

以太坊智能合約中的構(gòu)造函數(shù)主要用于初始化,如:確定合約的所有者,并且只會在合約部署時運行。在小于0.4.22版本的solidify編譯器語法要求中,構(gòu)造函數(shù)的名稱應(yīng)該和合約名稱保持一致。如果程序員在編寫合約時將構(gòu)造函數(shù)名稱寫錯,那么原本的構(gòu)造函數(shù)將成為任何人都可以調(diào)用的普通函數(shù)。漏洞示例代碼及在Remix-ide中的復(fù)現(xiàn)結(jié)果如下:

0x01 漏洞合約部署

下圖中,Bank合約繼承自O(shè)wned合約。在Owned合約中,由于錯誤的編碼,將構(gòu)造函數(shù)名稱寫錯,owned函數(shù)成為了一個普通函數(shù)。可以看到,Bank合約部署后,由于缺少構(gòu)造函數(shù),初始化時owner為0x0000000000000000000000000000000000000000。

如何從以太坊MorphToken事件看智能合約構(gòu)造函數(shù)大小寫編碼錯誤漏洞

0x02 漏洞現(xiàn)場還原

任何以太坊賬戶都可以調(diào)用Bank合約繼承自O(shè)wned合約的owned函數(shù),更改Bank合約的owner變量,從而使合約所有權(quán)發(fā)生轉(zhuǎn)移。

如下如所示,0x14723a09acff6d2a60dcdf7aa4aff308fddc160c這個賬戶調(diào)用了Bank合約的owned函數(shù)后,可以看到Bank合約的owner變成了0x14723a09acff6d2a60dcdf7aa4aff308fddc160c。同理,攻擊者也可以利用這個漏洞提權(quán),實施一系列惡意操作。

如何從以太坊MorphToken事件看智能合約構(gòu)造函數(shù)大小寫編碼錯誤漏洞

三、漏洞影響評估

我們使用內(nèi)部的以太坊智能合約審計系統(tǒng)對以太坊主鏈上所有30000+公開智能合約進(jìn)行了自動化審計,確認(rèn)受該大小寫編碼漏洞影響的共計16個,以下為統(tǒng)計結(jié)果:

(受漏洞影響程度取決于合約的邏輯,具體代碼審計結(jié)果可聯(lián)系知道創(chuàng)宇404區(qū)塊鏈安全研究團(tuán)隊)

如何從以太坊MorphToken事件看智能合約構(gòu)造函數(shù)大小寫編碼錯誤漏洞    

理論上在合約部署后,由于編碼錯誤引起的構(gòu)造函數(shù)缺失,owner默認(rèn)值會變?yōu)?x0000000000000000000000000000000000000000,這樣合約中涉及到owner的函數(shù)調(diào)用都會異常,合約所有者應(yīng)該能及時發(fā)現(xiàn)漏洞才是。然而MorphToken這種市值幾百萬美金的代幣,因為合約存在這個編碼漏洞而被盜幣。通過分析Morph Token源代碼,我們得到了答案。MorphToken繼承了Owned合約,但是自己實現(xiàn)了構(gòu)造函數(shù)。就是說,是父合約向外留了一個“后門”。    

如何從以太坊MorphToken事件看智能合約構(gòu)造函數(shù)大小寫編碼錯誤漏洞

另一種情況,如果合約中沒有涉及owner權(quán)限的函數(shù)調(diào)用,那么即使攻擊者盜取了合約所有權(quán),也沒有任何用處。上表B2X合約中就是這種情況。

總體來說,受漏洞影響的合約數(shù)量不多,屬于被MorphToken帶著“火”了一把的漏洞。

事實上,很多安全漏洞都來源于程序員的粗心編碼,智能合約這種部署后即不可更改的更應(yīng)加強代碼審計。

四、防護(hù)方案

0.4.22版本以后的solidity編譯器引入了constructors關(guān)鍵字,以替代低版本的將合約名作為構(gòu)造函數(shù)名的語法,從而避免程序員編碼錯誤。強烈建議采用最新版本編譯器。

如何從以太坊MorphToken事件看智能合約構(gòu)造函數(shù)大小寫編碼錯誤漏洞如何從以太坊MorphToken事件看智能合約構(gòu)造函數(shù)大小寫編碼錯誤漏洞

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI