以太幣交易所 以太幣交易所
Ctrl+D 以太幣交易所
ads
首頁 > 萊特幣 > Info

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

Author:

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

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

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

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

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

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

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

以太坊技術服務商 OpenZeppelin 發布 Optimism 智能合約審計報告:11月25日消息,以太坊技術服務商 OpenZeppelin 發布 Optimism 智能合約審計報告。從 2021 年 3 月 15 日開始,OpenZeppelin 在 7 周的時間里與 3 位審計師一起審計了 Optimism 的代碼庫,共發現 4 個嚴重和 4 個高度嚴重的問題,并提出修改建議以減少代碼的攻擊面和提高其整體質量,Optimism 團隊已承認或修復所有嚴重問題,代碼已遷移到新存儲庫。[2021/11/25 7:10:27]

一、構造函數簡介

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

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

Bicc與泛融科技宣布就智能合約審計達成合作:據官方消息,Bicc與北京泛融科技宣布,雙方在智能合約審計方面達成合作,泛融科技將作為審計服務提供方對Bicc上線的第三方智能合約進行安全、性能等多方面審計,幫助Bicc對合約安全審計把關,Bicc會將泛融科技的合約審計結果納入上線項目是否優質的考量標準。

Bicc總部位于新加坡,是新一代數字資產與數字生態交易平臺,幫助更多區塊鏈項目發展生態規模,協助區塊鏈項目與Dapps落地,近期在Defi通證交易領域也積極跟進。北京泛融科技是工信部可信區塊鏈推進計劃副理事長單位,工信部賽迪研究院評選區塊鏈百強企業第11位,擔任工信部可信區塊鏈“溯源組”“供應鏈金融組”副組長,擁有充足的技術儲備與完善的技術測試能力。[2020/9/19]

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

聲音 | 分布式資本姚鏡儀:智能合約和token是區塊鏈的靈魂:據經濟參考報,分布式資本合伙人姚鏡儀表示,智能合約和token是區塊鏈的靈魂。她堅信智能合約的未來,但現在也看到智能合約出現了很多問題和事件。分布式資本的投資策略就是“容錯”。如果沒有足夠的容錯性,區塊鏈生態中就無法生長出足夠的多樣性。[2018/7/3]

二、Fallout“以假亂真?”

–漏洞分析

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

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

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

EON發布全球首個云端智能合約編輯器,開啟智能合約開發云時代:備受矚目的EON今日上線全球首個云端智能合約編輯器(editor.eon.org),開發者可以通過EON Editor在云端輕松完成智能合約的開發、調試、編譯等操作,極大提升了開發效率,從根本上促進整個區塊鏈行業的發展。

EON于2018年6月1日完成空投快照。作為落地的區塊鏈項目,在EOS的基礎上增加了包括EON Editor等新功能,并從根本上為實現高TPS進行了優化。EON已登陸幣諾交易所。[2018/6/2]

圖1

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

以太坊ERC20智能合存在漏洞 攻擊者可根據需要創建代幣:據coindesk報道,多達十幾個以太坊的ERC-20智能合約被發現含有漏洞,讓攻擊者可以根據需要創建盡可能多的代幣。在美國時間2017年4月24日下午1點17分50秒,區塊鏈安全初創公司PeckShield檢測到可疑的代幣有MESH、UGToken、SMT、SMART、MTC、FirstCoin、GGToken、CNY Token、CNTTokenPlus。[2018/4/26]

如下圖所示:

圖2

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

三、前車之覆

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:OWN區塊鏈NERTOKiOWN Token到底什么是區塊鏈Solar EnergySmart Game Token

萊特幣
BitMEX母公司重組,未來將探索非加密業務_BIT

原文:?TheBlock,作者:FrankChaparroOdaily星球日報譯者|余順遂加密交易場所BitMEX的母公司HDRGlobalTrading周二晚間宣布.

1900/1/1 0:00:00
觀點 | 挖礦是不是DeFi發展的一段彎路?_DEF

來源:區塊律動BlockBeats,作者:0x29當DeFi出現了YFI這樣的產品,故事已經達到一個高潮了.

1900/1/1 0:00:00
行情分析:震蕩上行是今日趨勢,區間操作是日內良機_BTC

今日消息:據7月17日消息,在CoinShares最新發布題為“新冠肺炎危機期間了解比特幣”的報告,強調在危機期間比特幣展示了很強的韌性.

1900/1/1 0:00:00
專訪 | 霍比特創始人巨建華:用平臺通證2.0打破存量市場下的交易所格局_HBC

DeFi、以太坊2.0、Filecoin,這個夏天,加密貨幣市場從不缺乏熱點。與“乘風破浪”的DeFi不同,第二季度平臺幣的熱點有所下降.

1900/1/1 0:00:00
BCA文獻 I 德勤:數字藝術日益成為國際藝術市場焦點_數字藝術

盧森堡德勤全球藝術金融總監AdrianoPicinatidiTorcello在第十二屆藝術金融會議現場,蒙特卡洛引言:《2019藝術金融報告》由國際著名咨詢公司德勤發布.

1900/1/1 0:00:00
CFTC承諾到2024年為數字資產制定“整體框架”_FTC

在7月8日公布的未來四年的最終戰略中,美國商品期貨交易委員會將全面的加密貨幣監管列為優先事項。 新戰略承諾擁抱創新 新框架在其戰略目標中承諾:“我們將開發一個整體框架來促進數字資產的可靠創新”.

1900/1/1 0:00:00
ads