買比特幣 買比特幣
Ctrl+D 買比特幣
ads

PLUT:智能合約安全實踐:練就“火眼金睛”,真假構造函數一眼看清_clowncoin

Author:

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

引子:“真行者珞珈山訴苦,假猴王水簾洞謄文。”——《西游記·第五十八回》在《西游記》中,六耳獼猴冒充猴王孫悟空,以假亂真,騙過了唐僧,騙過了眾神,縱使是照妖鏡也分不出真假。現在,智能合約遇上了“六耳獼猴”,又會擦出怎樣的火花?

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

公鏈Flow推出無需許可智能合約,支持任何開發人員部署智能合約而無需審查:7月6日消息,公鏈Flow宣布推出無需許可智能合約,旨在支持任何人都可以無需許可地在主網上部署合約,而無需強制性審查。據悉,該合約支持開發人員不再強制需要通過審查流程來部署智能合約,支持開發人員從在測試網上測試到在主網上部署其智能合約整個過程。[2022/7/6 1:53:58]

在Solidity語言中,當函數名和合約名相同時,此函數就是合約的構造函數,在合約對象創建時,會先調用構造函數對相關的數據進行初始化。以太坊Solidity0.4.22版本中引入了關鍵字constructor,新的構造函數聲明形式:constructor()public{},引入的目的是用以替代低版本中將合約名作為構造函數名的語法形式,從而避免開發者筆誤造成構造函數命名錯誤的問題。引入的這個關鍵字看似平淡無奇,實則意蘊深刻,且聽我慢慢道來。

zkTube項目智能合約代碼已通過PeckShield安全審計:據zkTube官方最新消息,zkTube已完成了智能合約的安全審計,此次審計工作由“以太坊賞金獵人”全球 Top 3的安全審計公司PeckShield完成,并表示:未發現任何關鍵或重大問題。審計過程主要關注合約運行的整體安全性,通過對其智能合約代碼庫進行嚴格的評估,確保智能合約的可靠性和正確性。詳情進展請關注zkTube官網信息。[2021/8/13 1:53:45]

二、Fal1out“以假亂真?”

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

Cardano將在Alonzo升級后利用本地Plutus語言編寫智能合約:Cardano發布了關于Plutus的更多細節,Plutus是一種本地編程語言,將在其下一次重大升級Alonzo之后用于編寫智能合約。Cardano背后公司IOHK在一篇博文中解釋稱,Plutus合約由鏈上運行的部件和鏈下在用戶設備上運行的部件組成。這兩部分實際上都是用Haskell語言編寫的,但都是由Plutus編譯(compile)的,后者為Cardano上的智能合約提供了框架。Plutus Core將用于定義EUTXO交易的參數,并編譯為智能合約開發的代碼。一個Plutus應用程序框架(PAF)將提供對運行在網絡上的服務和應用程序的便捷訪問,同時具有完整的web瀏覽器互操作性。Cardano在2月份的“Mary”升級中推出了原生代幣,允許用戶創建唯一定義的自定義代幣,并進行交易。Plutus將擴展當前代幣的能力,極大地改善鑄幣策略,這將有利于可能需要時間鎖的NFT。(Crypto Potato)[2021/4/15 20:22:21]

動態 | 媒體區塊鏈通過智能合約的形式可應用于數字版權等傳媒領域:人民網刊文,區塊鏈技術由互聯網金融縱深發展而來,相較于傳統的“廠商-中間商-消費者”,區塊鏈技術成為了新的中間商,通過簡化廠商與消費者之間的機構,來實現去中心化的、更為透明的、更為精準的“分布式記賬”,媒體區塊鏈通過智能合約的形式可應用于內容付費、數字版權、信息共享、廣告精準投放等傳媒領域。[2018/9/19]

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

現場 | 孫志勇:智能合約價值在于提供效率 證據保全 自動執行:金色財經現場報道,在”共識2018區塊鏈大會·北京”上,中國政法大學教授孫志勇在談到區塊鏈與智能合約時表示,智能合約的價值在于提供效率、證據保全和自動執行。而智能合約對現有法律的挑戰表現為,跨境執行與法律監管的沖突、稅收沖突、智能合約的自身爭議處理以及智能合約與傳統法律的銜接。[2018/7/27]

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

MorphToken事件分析在過去也曾發生過類似的安全事件,包含著假構造函數的合約被成功發布到主鏈上,其中比較出名的是“MorphToken事件”,其因為一個看似很小的問題而造成了數千萬市值的代幣被增發。合約代碼地址:https://etherscan.io/address/0x2ef27bf41236bd859a95209e17a43fbd26851f92#code在Owned合約中,由于首字母大小寫的錯誤,導致本該成為構造函數的Owned成為了普通函數owned,且被public修飾,可供任何人調用。如下圖所示:

圖3MorphToken合約繼承了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:OWNNERUTUPLUTclowncoinMINERBLOXFuture Of FintechPlutoPepe

POL幣最新價格
比特幣:ETH2.0第0階段預計11月份上線,以太坊將帶動下一輪牛市反彈?_以太坊

作者:OKEx內容策劃組焦國鋒、胡雅璐OKEx情報局行業周報帶你快速回顧行業動態,厘清產業動向.

1900/1/1 0:00:00
ETH:Deribit期權市場播報:0704 - 賣方大勝_BIT

本播報由Deribit和Greeks.live聯合推出。BTC歷史波動率7d17.70%14d32.54%30d34.81%60d60.45%1Y85.30%ETH歷史波動率7d28.22%14.

1900/1/1 0:00:00
Polkadot:Gavin親筆:競選出波卡理事會后,將開啟治理功能_dot幣今日價格行情美元

編者按:本文來自PolkaWorld,Odaily星球日報經授權轉載。 波卡正處于上線的風口浪尖上,DOT持有者必須行動起來,選出第一屆波卡理事會.

1900/1/1 0:00:00
區塊鏈:實際參與交易的BTC僅占19% ?_AVASTR價格

編者按:本文來自加密谷Live,作者:ChainalysisTeam,翻譯:Liam,Odaily星球日報經授權轉載.

1900/1/1 0:00:00
EOS:Deribit期權市場播報:0716 - 又到周四移倉_BTC

在以前的播報中提到過,大量交易者選擇在周四進行移倉。從目前的數據看,本周四同樣有大量的虛值期權被移倉到24日上.

1900/1/1 0:00:00
區塊鏈:區塊鏈是工業4.0的領引者_ORI

編者按:本文來自鏈內參,作者:內參君,Odaily星球日報經授權轉載。區塊鏈是一種革命性的技術,它迅速顛覆了許多行業,它可以解決當今企業最緊迫要解決的效率問題.

1900/1/1 0:00:00
ads