“真行者珞珈山訴苦,假猴王水簾洞謄文。” ——《西游記·第五十八回》
在《西游記》中,六耳獼猴冒充猴王孫悟空,以假亂真,騙過了唐僧,騙過了眾神,縱使是照妖鏡也分不出真假。現在,智能合約遇上了“六耳獼猴”,又會擦出怎樣的火花?
在智能合約中,構造函數負責一些數據的初始化工作,owner值一般也會放在構造函數中進行初始化。owner是智能合約擁有者的稱呼,也常被用來作為該合約的超級管理員。對代幣合約來說,owner可能被分配的權限有:鑄造/銷毀代幣、凍結代幣等。如果開發者以錯誤的語法創建“構造函數”,造成構造函數缺失,致使“六耳獼猴”以假亂真,瞞過了開發者,最后使得攻擊者成為合約的擁有者(owner),那么攻擊者便可依賴owner的權限,對代幣進行增發或銷毀等操作,進而可能造成整個代幣的崩盤。
以太坊ERC-721智能合約數量創歷史新高:金色財經報道,CoinMetrics周二發布的報告顯示,由于最近的“NFT熱潮”,以太坊上ERC-721智能合約的數量達到了約19000的歷史新高。研究人員指出,NFT市場仍有很大的增長空間。[2021/3/26 19:19:15]
在Solidity語言中,當函數名和合約名相同時,此函數就是合約的構造函數,在合約對象創建時,會先調用構造函數對相關的數據進行初始化。
以太坊Solidity 0.4.22版本中引入了關鍵字constructor,新的構造函數聲明形式:constructor() public { },引入的目的是用以替代低版本中將合約名作為構造函數名的語法形式,從而避免開發者筆誤造成構造函數命名錯誤的問題。引入的這個關鍵字看似平淡無奇,實則意蘊深刻,且聽我慢慢道來。
Qtum提出基于智能合約的離線Staking機制:據官方消息,量子鏈Qtum發布新共識機制白皮書,把智能合約引入到PoS共識過程,提出了一種基于智能合約的離線Staking機制,使用戶可以在離線狀態參與Staking。在Qtum離線Staking機制中,成為SuperStaker可以代替普通節點進行Staking,并獲取收益,網絡中SuperStaker的數量沒有上限。同時,由于智能合約的引入,Qtum離線Staking機制的規則是可編程、可升級的,增加了Staking本身的靈活性。[2020/9/23]
下面以ethernaut靶場的Fallout題目為例進行分析。一眼看去,這似乎是一個正常沒有漏洞的合約代碼,但經過仔細觀察發現,該合約存在一個致命錯誤——構造函數名稱與合約名稱不一致,Fallout合約的構造函數被寫錯成了Fal1out(字母l和數字1的差異),這樣的錯誤使其成為了一個被public修飾的普通函數,失去了構造函數僅在合約部署時被調用的特性,使得任何人都可以調用。該題目源碼如下圖所示:
聲音 | MakerDAO基金會COO:以太坊伊斯坦布爾硬分叉不會對Maker智能合約構成問題:據Ambcrypto消息,MakerDAO基金會首席運營官Steven Becker日前接受采訪表示,即將推出的以太坊伊斯坦布爾硬分叉不會對Maker智能合約構成問題,因為Maker的合同沒有硬編碼的礦工費要求。[2019/12/4]
圖 1
在Fal1out函數中直接指定了函數調用者的地址即為owner,所以只需要調用Fal1out函數即可實現對合約owner的更改。如下圖所示:
聲音 | DAO 創始團隊Slock.it發言人:FAIRWIN 智能合約存在漏洞:DAO的創始團隊發言人 Griff Green今日發布推文提醒用戶,去中心化平臺 FAIRWIN 智能合約中存在漏洞。用戶應該停止使用該合約,以確保資金安全。細節將稍后公布,但黑客可以輕而易舉的發現該漏洞,據此前報道,FAIRWIN 是近期導致以太坊區塊鏈擁堵的DAPP,到目前為止該資金盤游戲合約內含 625456枚 ETH,價值約7.4 億元 。[2019/9/27]
圖 2
“假猴王”Fal1out想借著一些字體類型的相似字符的視覺差異混淆視聽,可最終還是沒能逃過我們的“火眼金睛”。
在過去也曾發生過類似的安全事件,包含著假構造函數的合約被成功發布到主鏈上,其中比較出名的是“MorphToken事件”,其因為一個看似很小的問題而造成了數千萬市值的代幣被增發。合約代碼地址:https://etherscan.io/address/0x2ef27bf41236bd859a95209e17a43fbd26851f92#code
聲音 | 智能合約之父Nick Szabo:比特幣ETF可能會導致更多的問題:據官方Twitter,智能合約之父Nick Szabo于8月12日發出的一系列推文顯示其似乎對比特幣ETF獲得監管機構批準持規避風險的態度。他在推文中寫道,“就我個人而言,我不會為為ETF或華爾街管理的資金游說,它們可能導致更多的問題。最近愚蠢的拋售已經或將很快摧毀這個領域的許多自以為是的、一無所知的東西。我們不需要新的人來代替他們。”[2018/8/14]
在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、 在合約正式上線前一定要找專業可信的機構做好合約代碼的審計工作。
金色財經 區塊鏈7月14日訊 2020年以來,山寨幣(altcoin)市值在整個加密貨幣市場總市值中的占比已經飆升至新高,不少山寨幣取得了令人瞠目的增長.
1900/1/1 0:00:00BTC/USDT永續合約 各級別性質:日線-盤整,4小時-盤整,1小時-盤整(偏空格局)截圖來自OKEX BTC/USDT永續合約1小時圖:對于行情從兩個角度來說.
1900/1/1 0:00:00比特幣繼續在9100美金附近震蕩,行情沒有太大變化。日線上看,MFI上行漸緩,小時OBV快速下行之后回升幅度也不大,一直低于8830時候的水平,短期難有較大拉升;四小時MA83繼續下行,今天在9.
1900/1/1 0:00:00文章系金色財經專欄作者幣圈北冥供稿,發表言論僅代表其個人觀點,僅供學習交流!金色盤面不會主動提供任何交易指導,亦不會收取任何費用指導交易,請讀者仔細甄別,謹防上當.
1900/1/1 0:00:00作為一家成立了近三年的合約平臺,58COIN雖然爭議不斷,但是根據公開渠道信息顯示,其在用戶資金安全方面從未出現過紕漏,要知道58作為合約平臺的領頭羊,單合約日平均成交量早已是億級體量.
1900/1/1 0:00:00導語:時至今日區塊鏈技術的應用已被諸多行業熟悉及采用,真正意義上實現了區塊鏈技術對產業的賦能,產業區塊鏈應用也越來越吸引市場的目光,引領著技術發展的新方向.
1900/1/1 0:00:00