引子:“真行者珞珈山訴苦,假猴王水簾洞謄文。”——《西游記·第五十八回》在《西游記》中,六耳獼猴冒充猴王孫悟空,以假亂真,騙過了唐僧,騙過了眾神,縱使是照妖鏡也分不出真假。現在,智能合約遇上了“六耳獼猴”,又會擦出怎樣的火花?
在智能合約中,構造函數負責一些數據的初始化工作,owner值一般也會放在構造函數中進行初始化。owner是智能合約擁有者的稱呼,也常被用來作為該合約的超級管理員。對代幣合約來說,owner可能被分配的權限有:鑄造/銷毀代幣、凍結代幣等。如果開發者以錯誤的語法創建“構造函數”,造成構造函數缺失,致使“六耳獼猴”以假亂真,瞞過了開發者,最后使得攻擊者成為合約的擁有者,那么攻擊者便可依賴owner的權限,對代幣進行增發或銷毀等操作,進而可能造成整個代幣的崩盤。一、構造函數簡介
王蓬博:智能合約技術是數字人民幣關鍵創新:金色財經消息,博通咨詢金融業資深分析師王蓬博認為,智能合約技術是數字人民幣關鍵創新,數字人民幣要想真正被普及和使用,必須形成完整的有商業性的產業鏈條,才能更緊密地團結互聯網平臺和收單機構。人民銀行數字貨幣研究所智能合約平臺最大的價值,在于未來可以突破支付體系的傳統商業模式,重新通過創新構建出新型的商業模式。(中新經緯)[2022/7/13 2:09:23]
在Solidity語言中,當函數名和合約名相同時,此函數就是合約的構造函數,在合約對象創建時,會先調用構造函數對相關的數據進行初始化。以太坊Solidity0.4.22版本中引入了關鍵字constructor,新的構造函數聲明形式:constructor()public{},引入的目的是用以替代低版本中將合約名作為構造函數名的語法形式,從而避免開發者筆誤造成構造函數命名錯誤的問題。引入的這個關鍵字看似平淡無奇,實則意蘊深刻,且聽我慢慢道來。
DFINITY創始人兼首席科學家:相信十年后會看到在互聯網計算機上部署超過10億個開放式應用及智能合約:10月26日消息,DFINITY創始人兼首席科學家Dominic Williams演講表示,互聯網計算機是基于ICP(互聯網計算機協議)的,ICP協議使用了非常新的加密算法,所以能夠使得互聯網計算機實現世界計算機的功能。通過互聯網計算機區塊鏈,可以存儲所有軟件,包括分布式應用、DeFi、Web3游戲等等。在互聯網計算機中,在許多方面都是去中心化的。首先,它的容器Canister上所有的去中心化應用、智能合約都是去中心化的。另外是沒有主網,只有子網的區塊鏈。相信十年后會看到在互聯網計算機上部署超過10億個開放式應用及智能合約,同時也相信未來十年在互聯網計算機上會出現呈百萬的節點計算機。[2021/10/26 20:57:11]
Flashbots核心貢獻者等人發表新論文,研究DeFi智能合約經濟安全的形式化驗證框架CFF:9月18日消息,Flashbots核心貢獻者PhilipDaian、康奈爾大學計算機安全博士生KushalBabel和MahimnaKelkar以及康奈爾理工學院教授AriJuels共同發布關于ClockworkFinanceFramework(CFF)的新論文,這是一種DeFi智能合約經濟安全的形式化驗證框架。論文中表示,CFF具有三個關鍵特性,合約完備、以漸近最優的模型大小實現、在構造上窮舉攻擊。CFF可以支持多個目標,開發者對合約的經濟安全性分析、用戶對DeFi交易風險的分析、機器人或礦工對套利機會的優化。此外,CFF框架引入了一個新的DeFi合約經濟安全概念,可提取價值(EV)。[2021/9/18 23:35:18]
二、Fal1out“以假亂真?”
前NBA運動員:Chainlink是將數據帶入智能合約的唯一解決方案:前NBA運動員、金·卡戴珊前夫Kris Humphries發推稱:“世界越來越依賴數據,智能合約也不例外。Chainlink是通過去中心化、安全的方式將數據帶入智能合約的唯一解決方案。未來已至。”[2020/4/9]
–漏洞分析下面以ethernaut靶場的Fallout題目為例進行分析。一眼看去,這似乎是一個正常沒有漏洞的合約代碼,但經過仔細觀察發現,該合約存在一個致命錯誤——構造函數名稱與合約名稱不一致,Fallout合約的構造函數被寫錯成了Fal1out。這樣的錯誤使其成為了一個被public修飾的普通函數,失去了構造函數僅在合約部署時被調用的特性,使得任何人都可以調用。該題目源碼如下圖所示:
英特爾與Enigma合作 確保其隱私智能合約安全:據coindesk消息,英特爾正與區塊鏈創業公司Enigma合作,幫助確保其隱私增強型智能合約的安全。Enigma的協議將集成智能合約技術及英特爾系統。[2018/6/21]
圖1在Fal1out函數中直接指定了函數調用者的地址即為owner,所以只需要調用Fal1out函數即可實現對合約owner的更改。如下圖所示:
圖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、在合約正式上線前一定要找專業可信的機構做好合約代碼的審計工作。
當你得知喬丹某款限量球鞋AJ今晚6點正式發售,從早上就搬好了小板凳在店面還排到了一個不錯的位置,正準備摩拳擦掌勢在必得時,發現前面的某幾個排隊者根本不是真粉而是黃牛.
1900/1/1 0:00:00編者按:本文來自DeepChain深鏈,作者:不二做,Odaily星球日報經授權轉載。和平平無奇的主流幣相比,今年的山寨幣迎來了自己的春天.
1900/1/1 0:00:00導語:數據顯示,投資者人口結構和貨幣支配權力的急劇變化可能將比特幣價格推向新高。還有,機構也將發揮重要作用,因為它們可以為新散戶和機構投資者提供最便捷的入口來投資比特幣.
1900/1/1 0:00:00作者:AnneConnelly譯者:Shirley翻譯機構:DAOSquare最新進展--致項目支持者感謝所有的支持者!您的捐贈,以及來自ConsensysGrants.
1900/1/1 0:00:00編者按:本文來自Cointelegraph中文,作者:MICHAELKAPILKOV,Odaily星球日報經授權轉載.
1900/1/1 0:00:00編者按:本文來自區塊記,星球日報經授權發布。在這篇文章中,我們將了解狀態通道如何工作的基礎知識,以及為什么它們的實現很復雜.
1900/1/1 0:00:00