以太坊價格 以太坊價格
Ctrl+D 以太坊價格
ads
首頁 > 區塊鏈 > Info

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

Author:

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

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

在《西游記》中,六耳獼猴冒充猴王孫悟空,以假亂真,騙過了唐僧,騙過了眾神,縱使是照妖鏡也分不出真假。現在,智能合約遇上了“六耳獼猴”,又會擦出怎樣的火花?

在智能合約中,構造函數負責一些數據的初始化工作,owner值一般也會放在構造函數中進行初始化。owner是智能合約擁有者的稱呼,也常被用來作為該合約的超級管理員。對代幣合約來說,owner可能被分配的權限有:鑄造/銷毀代幣、凍結代幣等。如果開發者以錯誤的語法創建“構造函數”,造成構造函數缺失,致使“六耳獼猴”以假亂真,瞞過了開發者,最后使得攻擊者成為合約的擁有者(owner),那么攻擊者便可依賴owner的權限,對代幣進行增發或銷毀等操作,進而可能造成整個代幣的崩盤。

Offchain Labs:近幾日大量投資者和團隊的ARB將被轉至托管錢包或歸屬智能合約:5月5日消息,Arbitrum開發團隊Offchain Labs在推特上表示:“作為對社區的提醒,今天和未來幾天,大量投資者和團隊的ARB將被轉移到托管錢包和/或歸屬智能合約。提醒一下,所有投資者和團隊的ARB都被鎖定,并且鎖定由托管人以合同方式執行,或者通過對那些選擇自我托管的人授予智能合約來執行。”[2023/5/5 14:44:01]

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

以太坊Solidity 0.4.22版本中引入了關鍵字constructor,新的構造函數聲明形式:constructor() public { },引入的目的是用以替代低版本中將合約名作為構造函數名的語法形式,從而避免開發者筆誤造成構造函數命名錯誤的問題。引入的這個關鍵字看似平淡無奇,實則意蘊深刻,且聽我慢慢道來。

工行發放首單基于智能合約的數字人民幣供應鏈貸款:金色財經報道,工商銀行上海市分行成功實現了數字人民幣智能合約在供應鏈金融場景的創新試點應用,發放首單基于智能合約的數字人民幣供應鏈貸款,開辟了“數字人民幣+供應鏈金融”的合作新模式。[2023/2/11 12:01:10]

下面以ethernaut靶場的Fallout題目為例進行分析。一眼看去,這似乎是一個正常沒有漏洞的合約代碼,但經過仔細觀察發現,該合約存在一個致命錯誤——構造函數名稱與合約名稱不一致,Fallout合約的構造函數被寫錯成了Fal1out(字母l和數字1的差異),這樣的錯誤使其成為了一個被public修飾的普通函數,失去了構造函數僅在合約部署時被調用的特性,使得任何人都可以調用。該題目源碼如下圖所示:

攻擊者試圖利用Solend智能合約進行攻擊導致5名用戶被錯誤清算:Solana生態借貸協議Solend表示,8月19日北京時間20:40,攻擊者試圖利用Solend智能合約進行攻擊。Solend團隊及時發現并阻止了竊取資金的企圖,因此沒有資金被盜。攻擊者破壞了對UpdateReserveConfig函數的不安全身份驗證檢查,使幾乎所有賬戶都可以清算,并將所有市場的借入APY設置為250%。Solend的清算人錯誤地清算了5名用戶。這些用戶正在從清算人的不當收入(16,000美元)中獲得退款。針對此事件,Solend正在采取以下措施:增加漏洞賞金規模;構建更好的監控和警報服務。[2021/8/21 22:27:47]

波場與WAVES達成戰略合作 將利用Gravity連接區塊鏈智能合約語言:據官方消息,波場已與WAVES達成戰略合作,Waves和TRON將一起利用Gravity來連接各自區塊鏈的智能合約語言,即Ride和Solidity。Gravity是一個無基礎代幣的預言機,具有跨鏈通信網絡。TRON和Waves正在通過Gravity建立一座橋梁,這將允許兩個生態系統為兩個用戶群提供更多的服務。波場和Waves的生態系統計劃將這一趨勢擴展到其他區塊鏈生態系統并以此為鏈間DeFi行業帶來革命性改變。波場 TRON 以推動互聯網去中心化為己任,致力于為去中心化互聯網搭建基礎設施。旗下的 TRON 協議是基于區塊鏈的去中心化應用操作系統協議之一,為協議上的去中心化應用運行提供高吞吐,高擴展,高可靠性的底層公鏈支持。波場 TRON 還通過創新的可插拔智能合約平臺為以太坊智能合約提供更好的兼容性。[2020/8/14]

圖 1

OpenZeppelin的智能合約開發庫將遷移到Solidity 0.7版本:區塊鏈開發工具提供商OpenZeppelin的智能合約開發庫OpenZeppelin Contracts宣布將遷移到智能合約編程語言Solidity最新發布的0.7版本,目前已經發布了基于最新版OpenZeppelin Contracts 3.1的Solidity 0.7的特殊版本。OpenZeppelin表示Solidity 0.7是一個突破性的變化,但目前還沒有決定如何適應OpenZeppelin Contracts的版本規則,以及如何支持Solidity 0.6版本的繼續迭代。Solidity于7月底更新為0.7版本,官方稱這是對Solidity語言和編譯器的重大更新。[2020/8/10]

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

圖 2

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

在過去也曾發生過類似的安全事件,包含著假構造函數的合約被成功發布到主鏈上,其中比較出名的是“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

建議更換Solidity 0.4.22及以上版本,并使用正確的constructor()語法。如下圖所示:

圖 7

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

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

圖 8

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

1、 開發者在編寫智能合約敏感函數(如構造函數、回退函數fallback)時,應嚴格按照官方要求的代碼書寫規范,注意不要出現字符錯誤等情況。

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

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

Tags:OWNSOLNERSOLIDWolf Town WoolSOLDIER價格NervesSOLID價格

區塊鏈
ADO:波卡周報 | Staking 比例調整 75% 后 將增加驗證人的獎勵

波卡本周進展 6月29日,Web3 基金會發布新的學習視頻,分享了三個不同的區塊鏈是如何使用同一套源代碼運行的,Polkadot、Kusama 和 Westend 都共享相同的二進制文件.

1900/1/1 0:00:00
LIB:谷燕西:從泰國低面值數字債券看區塊鏈上普惠金融

通常我們了解新技術的應用,會首先看美國和歐洲,因為這些地區通常是新技術率先采用的地方。通常的情況確實如此,但是具體到數字債券的發行,泰國的數字債券實際上是在全球范圍內走在了這個行業的前列.

1900/1/1 0:00:00
區塊鏈:云南自貿試驗區紅河片區利用互聯網+區塊鏈技術助推中越邊民互市貿易

中國(云南)自由貿易試驗區紅河片區(以下簡稱紅河片區)掛牌成立以來,立足“沿邊”、“跨境”特點,圍繞147項試點任務,以敢為人先的膽識和魄力,敏銳把握重大機遇,大膽闖、大膽試、自主改.

1900/1/1 0:00:00
certik:10月15日門頭溝清算賠償方案再次推遲

關鍵要點 由于擔心7月1日公布的Mt. Gox計劃改變,市場波動減小Mt. Gox 清算賠償時間又推遲了3.5個月,到10月15日由于央行流動性互換協議到期.

1900/1/1 0:00:00
LEC:IPFS技術與應用研討論壇(鄭州)即將拉開帷幕 邀您逐鹿中原

從無人知曉到漸為人知;從冷門偏技到熱門關注,IPFS從2014年誕生至今,已經走過了六個年頭。正如它的創建者胡安·貝內特的天才經歷一樣,IPFS自大熱以來,同樣充滿傳奇故事——在實打實的技術開發.

1900/1/1 0:00:00
區塊鏈:6.18午間行情:走勢健康 即將選擇方向

文章系金色財經專欄作者牛七的區塊鏈分析記供稿,發表言論僅代表其個人觀點,僅供學習交流!金色盤面不會主動提供任何交易指導,亦不會收取任何費用指導交易,請讀者仔細甄別,謹防上當.

1900/1/1 0:00:00
ads