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

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

Author:

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

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

在《西游記》中,六耳獼猴冒充猴王孫悟空,以假亂真,騙過了唐僧,騙過了眾神,縱使是照妖鏡也分不出真假。現在,智能合約遇上了“六耳獼猴”,又會擦出怎樣的火花?

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

Circle歐盟事務總監:歐洲議會就《歐盟數據法》達成初步協議,其中包括對智能合約的監管:金色財經報道,Circle歐盟政府事務高級總監 Jonas Frederiksen 發推表示,歐洲議會已就其對《歐盟數據法》的談判立場達成初步協議,其中包括對智能合約的監管。EP(European Parliament)提案概述了智能合約的基本要求,包括穩健性和訪問控制、安全終止和中斷以及與傳統合約的等效性。更重要的是,歐洲議會提案刪除了委員會原提案中的許多嚴厲條款,包括合格評定和歐盟合格聲明、供應商的合規責任以及協調標準。這意味著歐盟將采用更加務實的方法來監管智能合約,提供必要的保護,同時消除部署和開發的障礙。[2023/2/2 11:44:00]

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

市場押注Cardano不會在10月1日之前發布智能合約功能:金色財經報道,Polymarket周四出現了允許參與者押注Cardano區塊鏈是否會在10月1日前發布智能合約功能的預測市場。目前該市場的交易量已超過157,000美元。選擇“是”的份額為0.37美元,“否”的份額為0.63美元。更昂貴的賭注被認為更有可能是正確的,因此該市場目前傾向于預測智能合約功能將不會在10月開始時在Cardano上線。[2021/7/16 0:56:01]

以太坊Solidity 0.4.22版本中引入了關鍵字constructor,新的構造函數聲明形式:constructor() public { },引入的目的是用以替代低版本中將合約名作為構造函數名的語法形式,從而避免開發者筆誤造成構造函數命名錯誤的問題。引入的這個關鍵字看似平淡無奇,實則意蘊深刻,且聽我慢慢道來。

數據:超過15%的以太坊供應鎖定在智能合約中:Unfolded近期在推特上表示,Glassnode數據顯示,超過15%的以太坊供應鎖定在智能合約中。DeFi Pulse數據顯示,有790萬枚ETH鎖定在各種DeFi平臺上。以380美元的價格計算,相當于大約30億美元。這意味著在DeFi中總鎖倉量的30%以ETH的形式存在。(EWN)[2020/9/20]

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

聲音 | 彭楓:智能合約交易可以減少人工干預:金色財經現場報道,在今日舉辦的金融界2018夏季達沃斯之夜+區塊鏈思享會上,中國人民銀行數字貨幣研究所規劃部負責人彭楓提出了自己的創新思路,認為區塊鏈可以做到數據上鏈登記,包括三流信息同步,多方信息一致,全新數據存儲結構,算法保障安全可信,對等協作新模式;全方位數據驗證,包括開放賬本體系,內部共識驗證,外部交叉驗證,共享驗證存證,探索跨鏈交互;信息穿透,包括底層資產信息披露,信息安全可信,動態數據更新,信息全局一致,滿足多方需求;智能合約交易,包括減少人工干預,簡化流程執行,公開透明交易,自動強制執行,創新業務探索等。[2018/9/17]

“末日博士”教授唱衰智能合約:據ccn消息,紐約大學教授,被稱為“末日博士”的Nouriel Roubini一直以其看跌的經濟預測而聞名,但在加密貨幣世界,他以對區塊鏈的鄙視而聞名。今天Roubini在其社交媒體稱,“智能合約”既不聰明也不是合約,每1000行代碼中有100多個錯誤 。不是合約是因為沒有法院可以執行這些合約。[2018/6/2]

圖 1

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

圖 2

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

在過去也曾發生過類似的安全事件,包含著假構造函數的合約被成功發布到主鏈上,其中比較出名的是“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

建議更換Solidity 0.4.22及以上版本,并使用正確的constructor()語法。如下圖所示:

圖 7

切記: constructor()前并無function,function constructor() public { }為錯誤的構造函數形式。

如果要使用低于0.4.22的版本,則一定要著重檢查函數名是否和合約名一致。如下圖所示:

圖 8

在智能合約中因開發者粗心,而造成安全漏洞的事件層出不窮,“千里之堤,潰于蟻穴”,成都鏈安-安全實驗室在此給出如下建議:

1、 開發者在編寫智能合約敏感函數(如構造函數、回退函數fallback)時,應嚴格按照官方要求的代碼書寫規范,注意不要出現字符錯誤等情況。

2、 在某些情況下,編譯器會對constructor的錯誤使用發出警告,開發者應予以正確對待,不可認為其只是警告信息而忽略不處理。

3、 在合約正式上線前一定要找專業可信的機構做好合約代碼的審計工作。

Tags:OWNNERBSPNBSClown PepeCRYPTO CARBON ENERGYbspt幣未來前景nbs幣官網

幣安交易所app下載
COI:灰度投資母公司CEO:美國或不再頒布“禁止比特幣”的法令_加密貨幣

自從十多年前創建以來,比特幣就與世界各地的監管者保持著緊張的關系。美國早在2012年就考慮了關閉比特幣的可能性,據報道,就在上個月,美國總統唐納德·特朗普告訴財政部長史蒂夫·姆努欽(SteveM.

1900/1/1 0:00:00
LUD:又被攻擊 VETH智能合約是如何被盜90萬美元的?_EXC

前言 2020 年 7 月 1 日,VETH 合約遭遇黑客攻擊。慢霧安全團隊在收到情報后對本次攻擊事件進行了全面的分析,下面為大家就這次攻擊事件展開具體的技術分析.

1900/1/1 0:00:00
區塊鏈:幣圈法律七問:幫某些幣打Call有風險嗎?離婚可以要求分割虛擬幣嗎?_CALIT

最近來咨詢我們的幣圈人員,出現了變化。之前基本都是實控人和股東來,現在越來越多法務總監沖在前面,基本上問完公司的事情,還會追問一句:颯姐,我自己沒啥法律風險吧?今天就來給大家答疑.

1900/1/1 0:00:00
ECOIN:金色趨勢丨BTC區間震蕩 高拋低吸_COIN

金色算力云副總裁Maggle Lin:IPFS仍處于早起發展階段,礦機廠商仍有機會彎道超車:由開源礦池和火幣主辦.

1900/1/1 0:00:00
以太坊:DeFi 通證會成為2020年表現最好的加密資產嗎?_Lendefi

DeFi正在飆升,這一點從該領域頭部代幣的表現就可以看出。一些顯著的加密貨幣資產在今年表現不錯,其中比特幣上漲了32%,以太坊上漲了82%,但排名在前100位的以太坊DeFi代幣有著一個 + 2.

1900/1/1 0:00:00
KEY:證監會姚前:很多丟幣是交易所“監守自盜” IPFS是重要發展方向(附直播要點)_Lilith Cash Share

7月12日上午,在清華大學公共管理學院與騰訊研究院聯合打造的 “明德為公,智達行果-2020公益數字經濟直播講堂”,中國證券監督管理委員會科技監管局局長,信息中心主任姚前進行了直播.

1900/1/1 0:00:00
ads