買以太坊 買以太坊
Ctrl+D 買以太坊
ads
首頁 > 中幣 > Info

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

Author:

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

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

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

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

Arbitrum鏈上智能合約創建總量突破200萬:金色財經報道,Dune數據顯示,以太坊Layer2網絡Arbitrum鏈上智能合約創建總量突破200萬。截至目前為2,001,535個,累計鏈上ERC-20資產總價值超過85億美元。

歷史數據顯示,Arbitrum鏈上智能合約創建總量于2022年11月底突破100萬,這意味著該指標在不到五個月時間內翻了一番。[2023/4/10 13:54:45]

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

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

ConsenSys為其智能合約審計服務ConsenSys Diligence推出TURN Token,將于8月15日發售:7月20日消息,以太坊基礎設施開發商ConsenSys宣布為其智能合約審計服務ConsenSys Diligence推出TURN Token,該Token為安全審計的買賣雙方創建了一個新的開放市場,將于北京時間2022年8月15日20:00至8月19日20:00在turnplatform.bid限時發售。

TURN是用于Token化服務的NFT,每個TURN都是與ERC721兼容的Token,代表可以提供40小時的審計時間。TURN Token將直接授予客戶或在鑄幣時出售,可以在需要審計服務的客戶之間進行二次交易,因此可以優化服務參與和調度流程的價格發現。它們每個都代表智能合約審計員的時間片段,并且允許自由市場對其進行定價。[2022/7/20 2:24:59]

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

元界DNA開發團隊正在部署自定義智能合約:據元界官方推特消息,元界技術開發團隊正在Substrate平臺上實施智能合約。目前,開發團隊已經確定并正在測試可行的技術解決方案,以部署自定義智能合約。與此前的所有重大技術更新一樣,元界DNA始終以終端用戶的體驗為先,并致力于建立一個對用戶安全、友好、流暢的公鏈項目。[2020/12/15 15:14:19]

圖 1

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

動態 | Placeholder合伙人Burniske建議將術語智能合約改為數字合約:加密貨幣風投機構 Placeholder 合伙人 Chris Burniske 建議將區塊鏈和加密貨幣領域中常用的概念“智能合約”改為更貼近真實情況的“數字合約”。他表示,并不是所有合約都是智能的,但都是數字化的,因為任何人都可以接受這個概念:我們正在進入一個數字化的時代。在他發表的建議之下,不少用戶認為這個建議是合理的,但也有用戶表示不認同,因為像智能手機或智能汽車的概念可以讓智能合約更像是 2019 年的術語,而數字化這個前綴聽起來有點像是90年代的術語。[2019/12/30]

圖 2

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

聲音 | 比特幣核心開發人員:比特幣是最成功的智能合約平臺:據Ambcrypto消息,比特幣核心開發人員Peter Todd表示,比特幣作為智能合約平臺是最有效的,因為它非常簡單。EOS平臺在共識模型中包含了所有內容,這實際上太復雜了。[2019/3/12]

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

中幣
區塊鏈:資產數字化趨勢的底層邏輯是什么?_ETH

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

1900/1/1 0:00:00
SAVAGE:視頻 | 乘風破浪的交易所_區塊鏈

寫在前面:即將過氣網紅,不靠綜藝真的很艱難 大家好,我們是張姨楊姨 兩個區塊鏈從業者 國家地理傳奇攝影師Paul Nicklen擔任照片和視頻NFT市場Savage大使:1月20日消息.

1900/1/1 0:00:00
區塊鏈:“區塊鏈+”按下快進鍵 歐科云鏈徐明星:區塊鏈發展推動時代進步_聯盟鏈

7月14日,人民網編寫的《中國移動互聯網發展報告(2020)》正式發布。報告指出,2019年以來,在全球區塊鏈政策環境不斷向好、應用和標準化水平不斷提升的背景下,區塊鏈基礎設施特別是通用型基礎設.

1900/1/1 0:00:00
BTC:金色趨勢丨知史鑒今 BTC趨勢頂部在哪里?_NAN

上圖為BTC2017年至2020年目前長期走勢圖,研究可以發現,BTC每次階段頂部區域的構建都是在構筑一個大下降三角形態,后面放量砸破三角下邊線支撐,而后迎來瀑布行情.

1900/1/1 0:00:00
BTC:金色觀察丨Visa加密主管為年輕人理財支招:選擇加密貨幣和DeFi_萊特幣能取代比特幣嗎

金色財經 區塊鏈6月29日訊  Visa加密負責人庫伊·謝菲爾德(Cuy Sheffield)在推特上提出了一個問題:如果你現在16歲,能夠以自由開發者或設計師的身份在互聯網上賺錢.

1900/1/1 0:00:00
USD:7.4早間行情:日內振幅刷新上半 接下來這么操作_加密貨幣

昨日整體振幅應該是100美元不到,特意回翻了往日行情波動情況,上一次比這個更小的單日波動要追溯到2020年1月1日,即這是今年1月1日以來的單日振幅最小的一天,可見人氣之低迷.

1900/1/1 0:00:00
ads