比特幣行情 比特幣行情
Ctrl+D 比特幣行情
ads

OWN:智能合約安全實踐(二)| 練就“火眼金睛”,真假構造函數一眼看清

Author:

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

引子:“真行者珞珈山訴苦,假猴王水簾洞謄文。”?——《西游記·第五十八回》

在《西游記》中,六耳獼猴冒充猴王孫悟空,以假亂真,騙過了唐僧,騙過了眾神,縱使是照妖鏡也分不出真假。

現在,智能合約遇上了“六耳獼猴”,又會擦出怎樣的火花?

在智能合約中,構造函數負責一些數據的初始化工作,owner值一般也會放在構造函數中進行初始化。

owner是智能合約擁有者的稱呼,也常被用來作為該合約的超級管理員。對代幣合約來說,owner可能被分配的權限有:鑄造/銷毀代幣、凍結代幣等。

如果開發者以錯誤的語法創建“構造函數”,造成構造函數缺失,致使“六耳獼猴”以假亂真,瞞過了開發者,最后使得攻擊者成為合約的擁有者,那么攻擊者便可依賴owner的權限,對代幣進行增發或銷毀等操作,進而可能造成整個代幣的崩盤。

波卡生態智能合約平臺Plasm Network將更新品牌形象和網站:官方消息,波卡生態智能合約平臺Plasm Network宣布,將在短期內更新品牌形象和網站。[2021/5/12 21:53:12]

一、構造函數簡介

在Solidity語言中,當函數名和合約名相同時,此函數就是合約的構造函數,在合約對象創建時,會先調用構造函數對相關的數據進行初始化。

以太坊Solidity0.4.22版本中引入了關鍵字constructor,新的構造函數聲明形式:constructor()public{},引入的目的是用以替代低版本中將合約名作為構造函數名的語法形式,從而避免開發者筆誤造成構造函數命名錯誤的問題。

引入的這個關鍵字看似平淡無奇,實則意蘊深刻,且聽我慢慢道來。

Uniswap V3智能合約已部署至主網:據etherscan.io,Uniswap V3版智能合約已經部署至以太坊主網,已可以通過該工廠合約創建資金池。另有消息稱Uniswap V3將于5月5日上線。[2021/5/5 21:25:09]

二、Fallout“以假亂真?”

–漏洞分析

下面以ethernaut靶場的Fallout題目為例進行分析。

一眼看去,這似乎是一個正常沒有漏洞的合約代碼,但經過仔細觀察發現,該合約存在一個致命錯誤——構造函數名稱與合約名稱不一致,Fallout合約的構造函數被寫錯成了Fal1out。

這樣的錯誤使其成為了一個被public修飾的普通函數,失去了構造函數僅在合約部署時被調用的特性,使得任何人都可以調用。該題目源碼如下圖所示:

波場與WAVES達成戰略合作,將利用Gravity連接區塊鏈智能合約語言:據官方消息,波場已與WAVES達成戰略合作,Waves和TRON將一起利用Gravity來連接各自區塊鏈的智能合約語言,即Ride和Solidity。Gravity是一個無基礎代幣的預言機,具有跨鏈通信網絡。TRON和Waves正在通過Gravity建立一座橋梁,這將允許兩個生態系統為兩個用戶群提供更多的服務。波場和Waves的生態系統計劃將這一趨勢擴展到其他區塊鏈生態系統并以此為鏈間DeFi行業帶來革命性改變。[2020/8/14]

圖1

在Fal1out函數中直接指定了函數調用者的地址即為owner,所以只需要調用Fal1out函數即可實現對合約owner的更改。

如下圖所示:

聲音 | 姜家志:CoinEx Chain目前已進入了智能合約的研發階段:1月8日,CoinEx Chain首席開發者姜家志在“張力紅人說:跨鏈雙雄”主題AMA分享中提到,Cosmos主網在CoinEx DEX使用開發的時已經上線,雖然還有不少的問題,但已經是一個可用的網絡了。而Polkadot是19年Q3才上線,1年的時間Cosmos的生態發展了很多,同樣吸引了很多的開發者。而CoinEx Chain之所以選擇基于Cosmos SDK進行開發最重要的原因也其完善的SDK,更多的定制性,以及IBC協議的設計。同時他透露了CoinEx Chain目前已進入了智能合約的研發階段。[2020/1/8]

圖2

“假猴王”Fal1out想借著一些字體類型的相似字符的視覺差異混淆視聽,可最終還是沒能逃過我們的“火眼金睛”。

三、前車之覆

美國佛羅里達州法案或將在法律層面承認區塊鏈簽名與智能合約:近日,美國佛羅里達州的一名議員提出了一項法案,如果通過,將為區塊鏈數據和智能合約創造法律基礎。眾議院法案1357引入了多項規定,在不違反任何既存法律法規前提下,區塊鏈分類賬和智能合約應被視為具有法律約束力的數據存儲方法。[2018/1/12]

MorphToken事件分析

在過去也曾發生過類似的安全事件,包含著假構造函數的合約被成功發布到主鏈上,其中比較出名的是“MorphToken事件”,其因為一個看似很小的問題而造成了數千萬市值的代幣被增發。

合約代碼地址:https://etherscan.io/address/0x2ef27bf41236bd859a95209e17a43fbd26851f92#code

在Owned合約中,由于首字母大小寫的錯誤,導致本該成為構造函數的Owned成為了普通函數owned,且被public修飾,可供任何人調用。

如下圖所示:

圖3

MorphToken合約繼承了Owned合約,并在自己的構造函數內進行了owner的初始化,但是父合約Owned的owned函數是可供任何人調用的,攻擊者便可通過調用owned函數更改合約的所有者owner。

owner的初始化代碼如下圖所示:

圖4

由上述可知,任何人都可以通過調用合約的owned函數,成為合約的擁有者(owner)。

如下圖所示:

圖5

失之毫厘,差之千里,一個小小的字母錯誤,卻導致了合約的代幣的崩盤。代幣也被惡意增發。

如下圖所示:

圖6

四、后車之鑒

開發者應如何正確使用構造函數

建議更換Solidity0.4.22及以上版本,并使用正確的constructor()語法。

如下圖所示:

圖7

切記:constructor()前并無function,functionconstructor()public{}為錯誤的構造函數形式。

如果要使用低于0.4.22的版本,則一定要著重檢查函數名是否和合約名一致。

如下圖所示:

圖8

五、安全建議

在智能合約中因開發者粗心,而造成安全漏洞的事件層出不窮,“千里之堤,潰于蟻穴”,成都鏈安-安全實驗室在此給出如下建議:

1、開發者在編寫智能合約敏感函數時,應嚴格

按照官方要求的代碼書寫規范,注意不要出現字符錯誤等情況。

2、在某些情況下,編譯器會對constructor的錯誤使用發出警告,開發者應予以正確對待,不可認為其只是警告信息而忽略不處理。

3、在合約正式上線前一定要找專業可信的機構做好合約代碼的審計工作。

Tags:OWNNERFALOUTTOWN價格MINERVAFALCONS幣fuyoutoken

火幣APP下載
比特幣:鏈上數據6月掃描:比特幣滑向9000美元,鏈上活躍度隨之墜落?

6月,可謂一個比特幣價格距離10000美元漸行漸遠的月份,根據CoinDesk的數據,在長期被壓制在10000美元之下后,2020年6月,比特幣價格盡管一度再上10000美元,但是很快回落.

1900/1/1 0:00:00
區塊鏈:觀點 | 朱幼平:優先鏈改的十個主要行業場景

本文來源:陀螺財經,作者:朱幼平 支付結算 比特幣本來設計是替代美元,現在看來,比特幣最有用的地方是支付結算。后來包括以太坊、瑞波等都有支付結算功能,實際上加密數字貨幣否或多或少有支付結算功能.

1900/1/1 0:00:00
BDC:泰國央行啟動CBDC項目第三階段,本土企業將先行測試

據Cryptopotato7月17日報道,泰國央行計劃啟動其央行數字貨幣開發的第三階段,在當地企業中試行該數字貨幣.

1900/1/1 0:00:00
EFI:DeFi 代幣發行的數十倍回報只是幻影,mStable競價失敗后的反思

這個周末,BTC和ETH,依舊處于無聊的低波動狀態,很多人開始乏了,但DeFi領域上演的一幕幕讓人驚愕的戲劇,確實可以讓人分泌出很多多巴胺,而筆者也體驗到了其中的瘋狂.

1900/1/1 0:00:00
比特幣:推特遭大規模攻擊后續:比特幣躺槍,黑客或另有所圖

北京時間周四凌晨社交媒體巨頭推特遭遇了迄今為止最大的黑客事件,全球眾多知名人士和公司的賬戶受到影響.

1900/1/1 0:00:00
DEF:觀察|如何理解Defi總市值突破100億美金?

19日,DeFi的總市值達到了95億美金之高,短短1日,DeFi就突破了100億美金大關。但DeFi的總市值遠不止這些.

1900/1/1 0:00:00
ads