比特幣行情 比特幣行情
Ctrl+D 比特幣行情
ads

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

Author:

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

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

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

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

Cardano網絡上年初至今已新增超1000個Plutus V1智能合約:5月20日消息,自2023年初以來,Cardano網絡上增加了超過1000個Plutus V1智能合約。數據顯示,截至2023年5月17日,有5776個Plutus V1 Scripts,而1月1日記錄的V1 Scripts為4718個。

值得注意的是,Plutus V1的所有內置類型和功能都被添加到Plutus V2中。截至發稿時,Plutus V2 Scripts的數量為2494個。[2023/5/20 15:15:17]

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

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

Chainlink為智能合約支持新雙因素認證Oracle:金色財經報道,Chainlink現已為Matic Network上以及其他項目的智能合約支持由Digital Bridge構建的雙因素認證(2FA)Oracle。[2020/11/5 11:39:41]

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

以太坊智能合約開發工具Truffle總下載量已超350萬:金色財經報道,以太坊智能合約開發工具Truffle的總下載量已超過350萬,其中大部分下載發生在過去兩年中。目前該套件的平均每月下載量約12萬。[2020/7/7]

圖 1

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

圖 2

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

Bitfinex首席技術官:智能合約或社區不會讓項目去中心化:5月10日,Bitfinex首席技術官Paolo Ardoino發推表示,一份智能合約或一個社區并不會讓你的項目去中心化。一粉絲評論:“但是一份明智的合約和一個社區可以使一個項目具有審查抵抗性和非保管性。”Ardoino回復稱:“同意非保管性。對審查制度的抵制是有的,但也有其局限性。并不是說你不能通過智能合約實現所有這些,但不是我們在大多數項目中看到的那樣。”[2020/5/10]

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

動態 | 安永推出代幣和智能合約公開測試版:安永(EY)今日推出代幣和智能合約公開測試版。該測試版允許用戶粘貼代碼進行分析,在此期間,它可以通過測試智能合約的功能和效率以及評估編碼質量來識別安全風險。當前,該服務只能審閱以Solidity編程語言編寫的基于ERC-20的智能合約。安永并未透露未來是否計劃擴展對其他區塊鏈協議的支持。(Coindesk)[2019/12/18]

在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:OWNNERNBSBSPethdown幣怎么樣crazyminerNBS價格BSP幣

火幣網下載官方app
BTC:金色觀察|2020年二季度DeFi發生的三件大事

近日,以太坊開發公司ConsenSys旗下的Codefi發布了《2020年第二季度DeFi報告》,對2020年第二季度DeFi生態系統進行了全面總結和分析.

1900/1/1 0:00:00
比特幣:2020年上半年比特幣如何跑贏標普500和納斯達克指數?

盡管3月的黑色星期四因為市場崩潰造成了重大挫折,但加密貨幣市場和比特幣的收盤強勁。按市值計算的領先加密資產BTC也比表現最佳的股票市場指數高出近一倍,那么這樣的實力會持續到下半年嗎?第一季度結束.

1900/1/1 0:00:00
比特幣:十年血戰游戲慶端午 打怪式挖礦爆燃升級!

各位OASIS綠洲平臺的玩家們,之前在《十年血戰》第一期回收裝備活動刷BRC刷得過癮嗎?一期活動的熱度還未褪去,慶端午二期特別活動馬上又要開始了,這一波活動官方比上一期花費了更多的心思.

1900/1/1 0:00:00
以太坊:晚間必讀5篇 | 以太坊Dapp保持強勢 DeFi熱浪涌動

從這些數據看 以太坊依然能夠輕松擊敗EOS和TRon今年4月,比特幣開發者Udi Wertheimer發推表示.

1900/1/1 0:00:00
SUB:萬字報告|波卡生態項目 2020 年上半年進度報告?(下)

前言: 2020 年的上半年過去了,在這有點 “魔幻” 的半年里,波卡生態從未停下發展的腳步。從 Kusama 的上線到 Substrate 2.0,再到波卡開啟分階段上線過程,我們見證了波卡一.

1900/1/1 0:00:00
FIL:7.9午間行情:站穩這個位置 上方空間即可打開

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

1900/1/1 0:00:00
ads