比特幣價格 比特幣價格
Ctrl+D 比特幣價格
ads

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

Author:

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

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

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

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

Juno Network 將進行 Lupercalia 升級,治理模塊將實現實例化和智能合約調用:3月24日消息,Cosmos 生態智能合約平臺鏈 Juno Network 宣布將進行 Lupercalia 升級,本次升級的內容包括:性能改進、治理模塊實例化和實現智能合約的調用、使用 wasmd 模塊而非分叉版本等。Juno 表示,本次網絡升級將在接下來的兩周內進行。[2022/3/24 14:14:57]

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

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

中幣(ZB)雙周報:中幣在TrueChain發布新智能合約并適當調整合約地址:據中幣(ZB)雙周報顯示:中幣將對其平臺幣ZB Token進行智能合約地址的適當調整,該調整將在新地址上生成2億可用于去中心化交易的ZB積分,同時也將在舊合約地址上銷毀2億的ZB積分。此外,為豐富ZB積分的應用場景以及支持TrueChain生態建設,中幣(ZB)也將發布基于TrueChain的、總量為4000萬ZB積分的ZB智能合約,并將在舊合約地址上銷毀對應的、同樣數目的ZB積分。官方表示,這些調整均不會對名稱、發行總量和流通量等造成影響。更多詳情請查閱中幣微博9月15日-9月30日雙周報。[2020/10/10]

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

洪蜀寧:DeFi必須擺脫以太坊智能合約范式的依賴才能成功:金丘區塊鏈研究院院長洪蜀寧今日發微博稱,imBTC的uniswap做市商被黑,是tokenlon自己的問題,uniswap本身就不支持erc777 tokrn非要強上。這種漏洞,究其根本原因跟不久前兩次flashloan事件是一樣的,還是起源于以太坊智能合約范式的不安全性。DEFI必須擺脫對這種范式的依賴才能真正成功。[2020/4/19]

圖 1

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

動態 | 以太坊智能合約編程語言新版本Solidity0.5.11已發布:據github數據顯示,針對以太坊智能合約的編程語言新版本Solidity0.5.11已發布。據悉該版本更新了諸多功能,并能幫助開發者修復錯誤編碼。[2019/8/16]

圖 2

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

在過去也曾發生過類似的安全事件,包含著假構造函數的合約被成功發布到主鏈上,其中比較出名的是“MorphToken事件”,其因為一個看似很小的問題而造成了數千萬市值的代幣被增發。合約代碼地址:https://etherscan.io/address/0x2ef27bf41236bd859a95209e17a43fbd26851f92#code

NULS發表聲明:NULS智能合約并無溢出風險:今日, NULS官方微信公眾號發布聲明稱:基于近日爆出的以太坊(Ethereum)Token智能合約中漏洞風險,被攻擊的ERC-20Token代碼,其數學運算沒有使用SafeMath,也沒有做溢出檢查。經過NULS核心技術團隊的反復檢查和測試,NULS雖然也是基于以太坊發行的ERC-20Token,但由于NULS采用的是標準的ERC20的代碼,已經做過溢出測試,不存在溢出問題,投資者和交易平臺均可進行正常的交易充提等操作。據了解,NULS主網公測在即,公測完成后將進行Token的映射。[2018/4/26]

在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:OWNNERTRUTOKDoge Your Own ResearchSuper miner token DecimalsInstrumental FinanceVANCAT Sperm Token

fil幣價格今日行情
DEX:去中心化交易所DEX:牛市的助推器?_SWAP

要想推動牛市,DEX會扮演越來越重要的角色。雖然Compound、Maker以及Synthetix在目前DeFi的市值位居前列,但DEX有希望后來居上.

1900/1/1 0:00:00
CVC:7.13午間行情:天地針對行情的影響與后期走勢_以太坊

文章系金色財經專欄作者牛七的區塊鏈分析記供稿,發表言論僅代表其個人觀點,僅供學習交流!金色盤面不會主動提供任何交易指導,亦不會收取任何費用指導交易,請讀者仔細甄別,謹防上當.

1900/1/1 0:00:00
區塊鏈:資產數字化趨勢的底層邏輯是什么?_數字資產

隨著區塊鏈的發展,有一個趨勢是越來越明顯了,就是資產數字化。相信到了今天,應該不會有再有人懷疑這個趨勢,畢竟我們已經感受到了數字貨幣的高效和便利,也親眼見證了數字貨幣爆炸式的發展,同時我們還源源.

1900/1/1 0:00:00
區塊鏈:產業周刊 | 多省市發布區塊鏈行動計劃 區塊鏈+政務成為潮流_穩定幣

金色周刊是金色財經推出的一檔每周區塊鏈行業總結欄目,內容涵蓋一周重點新聞、行情與合約數據、礦業信息、項目動態、技術進展等全行業動態。本文是其中的產業周刊,帶您一覽本周的區塊鏈產業動態.

1900/1/1 0:00:00
區塊鏈:業界談數字經濟:釋放數據要素價值 發揮數據倍增作用_BSP

近年來,數字經濟不斷成為驅動經濟增長、吸納就業、釋放消費潛力的新引擎。無論是日常生活中的網購、刷臉支付、共享單車等數字經濟模式,還是工業、能源、汽車等傳統實體產業積極擁抱數字經濟,都彰顯了數字經.

1900/1/1 0:00:00
區塊鏈:案例分析:發現員工在公司挖比特幣該怎么辦?_WICKED價格

馬某于2002年3月7日入職新X公司,雙方簽訂有生效日期為2011年3月7日至2014年3月6日期間的勞動合同。合同中約定:馬某在軟件開發部門從事軟件開發工作,月工資標準為稅前15750元.

1900/1/1 0:00:00
ads