引子:“真行者珞珈山訴苦,假猴王水簾洞謄文。”?——《西游記·第五十八回》
在《西游記》中,六耳獼猴冒充猴王孫悟空,以假亂真,騙過了唐僧,騙過了眾神,縱使是照妖鏡也分不出真假。
現在,智能合約遇上了“六耳獼猴”,又會擦出怎樣的火花?
在智能合約中,構造函數負責一些數據的初始化工作,owner值一般也會放在構造函數中進行初始化。
owner是智能合約擁有者的稱呼,也常被用來作為該合約的超級管理員。對代幣合約來說,owner可能被分配的權限有:鑄造/銷毀代幣、凍結代幣等。
如果開發者以錯誤的語法創建“構造函數”,造成構造函數缺失,致使“六耳獼猴”以假亂真,瞞過了開發者,最后使得攻擊者成為合約的擁有者,那么攻擊者便可依賴owner的權限,對代幣進行增發或銷毀等操作,進而可能造成整個代幣的崩盤。
跨鏈智能合約平臺CLV聯合Project Galaxy和Multichain發起了生態跨鏈活動:5月11日消息,據clv_org發推稱,跨鏈智能合約平臺CLV聯合Project Galaxy和Multichain發起了生態跨鏈活動,活動開始時間為5月11日10am(UTC)。[2022/5/11 3:07:33]
一、構造函數簡介
在Solidity語言中,當函數名和合約名相同時,此函數就是合約的構造函數,在合約對象創建時,會先調用構造函數對相關的數據進行初始化。
以太坊Solidity0.4.22版本中引入了關鍵字constructor,新的構造函數聲明形式:constructor()public{},引入的目的是用以替代低版本中將合約名作為構造函數名的語法形式,從而避免開發者筆誤造成構造函數命名錯誤的問題。
引入的這個關鍵字看似平淡無奇,實則意蘊深刻,且聽我慢慢道來。
灰度創建智能合約平臺基金,投資Cardano、Solana等代幣:金色財經消息,加密貨幣資產管理公司灰度(Grayscale)正在擴大其投資基金系列,以包括非以太坊智能合約代幣。
Grayscale Smart Contract Platform Ex-Ethereum Fund(簡稱GSCPxE)允許投資者選擇投資一些最大的智能合約網絡和以太坊側鏈。
該基金由Cardano(ADA)、Solana(SOL)、Avalanche(AVAX)、Polkadot(DOT)、Polygon(MATIC)、Algorand(ALGO)和Stellar(XLM)組成。Cardano和Solana各占該基金的24%以上,Avalanche和Polkadot各占超過16%。約10%的資金分配給Polygon,Algorand和Stellar各占超過4%。(Decrypt)[2022/3/22 14:11:47]
BadgerDAO關于“升級智能合約”的提案BIP 76已開啟投票:12月11日消息,BadgerDAO表示,其論壇已上線關于“升級智能合約”的提案BIP 76。該提案旨在覆蓋重要的智能合約升級,以拯救用戶資金,改進暫停功能,并通過黑名單提供額外的保障。本提案不包括擬議拯救資金功能的執行和解除暫停。這些功能將通過未來的BIP解決。基于社區反饋,為了加快智能合約的重新激活,該提案將直接轉向48小時快照投票。
提案稱,Badger致力于在安全的情況下重新啟動智能合約。考慮到時間鎖的因素,一旦最終BIP決定執行擬議的拯救資金和解除暫停,在進行這些升級之前等待標準時間框架將增加至少3天的延遲。因此,該提案將智能合約升級與拯救行動的執行和解除暫停分開,以便執行決策可以遵循Badger的治理流程,同時還確保生成的治理決策能夠迅速制定。[2021/12/11 7:32:26]
二、Fallout“以假亂真?”
現場丨Chainlink聯合創始人:預言機是將智能合約連接至鏈下世界的關鍵:金色財經現場報道,由Web3基金會主辦的Web3大會10月29日在上海舉行。Chainlink聯合創始人Sergey Nazarov在會上表示,目前智能合約已經邁入鏈下連通階段,有金融、國際貿易、保險等越來越多的場景被覆蓋,但它們都需要數據輸入如價格數據,這些數據都需要以某種形式傳輸到區塊鏈上。現在的趨勢就是將腳本化智能合約連接至鏈下世界,而預言機則是實現這一趨勢的關鍵。這一趨勢將驅動DeFi智能合約實現極大增長。[2020/10/29]
–漏洞分析
下面以ethernaut靶場的Fallout題目為例進行分析。
一眼看去,這似乎是一個正常沒有漏洞的合約代碼,但經過仔細觀察發現,該合約存在一個致命錯誤——構造函數名稱與合約名稱不一致,Fallout合約的構造函數被寫錯成了Fal1out。
nChain獲得第一個基于區塊鏈的智能合約發明專利:nChain宣布,該公司已經從歐洲專利局(EPO)獲得了第一項專利,該專利涉及基于區塊鏈的智能合同的注冊和自動化管理方法。[2018/4/12]
這樣的錯誤使其成為了一個被public修飾的普通函數,失去了構造函數僅在合約部署時被調用的特性,使得任何人都可以調用。該題目源碼如下圖所示:
圖1
在Fal1out函數中直接指定了函數調用者的地址即為owner,所以只需要調用Fal1out函數即可實現對合約owner的更改。
如下圖所示:
圖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、在合約正式上線前一定要找專業可信的機構做好合約代碼的審計工作。
據朝日新聞7月14日報道,世界第五大銀行、日本最大的金融公司三菱日聯金融集團計劃在2020年下半年發行自己的數字貨幣MUFGCoin.
1900/1/1 0:00:00作者|?indiGO Filecoin主網上線在即,想要抓住機會的投資人摩拳擦掌躍躍欲試。礦機太復雜搞不懂,云算力坑太多怕被騙,期貨無支撐怕崩盤,“財富列車”呼嘯而來,想上車,但卻不知道正確的姿.
1900/1/1 0:00:00今日消息:7月11日有消息指出,50%的比特幣投資者是千禧一代。隨著千禧一代進入投資成熟期的頂峰時期,這一精通技術的群體將推動投資者人口結構的重大轉變,進而增加比特幣投資的傾向.
1900/1/1 0:00:00免責聲明:本專欄內容概不構成任何投資意見,內容亦并非就任何個別投資者的特定投資目標、財務狀況及個別需要而編制。投資者不應只按本專欄內容進行投資.
1900/1/1 0:00:00為什么之前無人問津的預言機賽道現在突然這么火呢?首先一個很明顯的原因就是預言機龍頭ChainLink沖進市值榜前10,提高了預言機項目的曝光度;其次就是由于DeFi項目的崛起.
1900/1/1 0:00:007月6日,由杭州市余杭區政府指導,杭州未來科技城管委會、巴比特主辦的“2020杭州區塊鏈國際周”進入第二天議程.
1900/1/1 0:00:00