以太坊交易所 以太坊交易所
Ctrl+D 以太坊交易所
ads
首頁 > 瑞波幣 > Info

智能合約安全實踐(一)| Fallback函數“越俎代庖”分析_KCS:為什么現在不提區塊鏈了

Author:

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

引子:“庖人雖不治庖,尸、祝不越樽俎而代之矣。”?--《莊子·逍遙游》

古時候,有一位杰出的領袖名叫唐堯。

他所治理的地區人們安居樂業,但是他聽聞隱士許由十分有才干,便萌生了將領導權讓給許由的想法。但是許由拒絕了,并說出了這樣一段話“鷦鷯巢于深林,不過一枝。”

至此,后人也用越俎代庖一詞來表達越權的含義。

“越俎代庖”

在智能合約的實現中存在著訪問權限,如果權限設置不合理,很容易造成智能合約被攻擊,嚴重的還會造成巨大的經濟損失。

成都鏈安-安全實驗室對于智能合約安全有著豐富的經驗和積累,但隨著區塊鏈技術越來越受重視,智能合約的數量也越來越多,隨之而來的智能合約被攻擊事件也越來越多,也讓我們感受到了“讓區塊鏈更安全”的企業使命是多么的重要,但是一己之力難于對抗所有的威脅。

接下來,我們將會把自己的安全經驗積累通過與智能合約CTF靶場ethernaut相結合,通過技術連載的方式向廣大智能合約開發者普及在開發過程中,如何實現更安全的代碼。

義烏發布數字人民幣試點10舉措:加大智能合約應用探索力度:金色財經報道,義烏市數字人民幣試點工作領導小組聯合辦公室發布《深入推進義烏小商品市場數字人民幣試點工作方案》,《方案》提出全面提升市場數字人民幣受理環境、推廣數字人民幣硬件錢包、加大智能合約應用探索力度、探索開展數字人民幣跨境支付應用等10條具體措施。[2023/3/25 13:26:15]

現在我們就來聊一聊ethernaut靶場的第一題Fallback,

代碼函數“越俎代庖”的事件。

一、權限漏洞簡介

越權漏洞是指在智能合約中,因函數可見性設置不合理或函數缺乏有效的驗證導致本不能調用某一函數的用戶通過直接或者繞過驗證的方式成功調用該函數。

該漏洞可被單獨利用,也可能結合其他漏洞進行組合攻擊,利用方式簡單,漏洞影響視存在漏洞的函數而定,可能對合約造成毀滅性打擊。

二、Fallback“越俎代庖”

漏洞原理詳細分析

庫幣將支持KCS智能合約升級:據庫幣KuCoin交易所消息,為滿足KCS未來的發展需求, 賦予KCS參與DeFi、DEX等區塊鏈多元化生態的功能,庫幣將支持KCS的智能合約升級,升級將于1月14日進行,KCS持幣用戶將1:1獲得新合約代幣。同時,庫幣也將支持KCS品牌戰略升級。KuCoin Shares將更名為KuCoin Token,簡稱保持KCS不變,代幣logo也將更新。 KCS是未來庫幣去中心化金融服務的生態代幣。KCS是開啟庫幣生態的一把鑰匙,也是庫幣社區未來的治理代幣。KCS總發行量為2億個,當前流通量為80,118,638 KCS,當前總量為170,118,638 KCS。[2021/1/11 15:54:23]

2.1合約中的“俎”與“庖”

如何理解合約中的“俎”與“庖”呢?先來看一段合約代碼,如下圖所示:

圖1

這一段合約代碼出自ethernaut靶場的第一題Fallback。針對于靶場中的問題,解題思路是通過調用回調函數function()payablepublic來觸發owner=msg.sender;,使得合約的所有者變成調用者。

動態 | 諾貝爾經濟學家奧利弗哈特將會為美國Prysm集團的智能合約系統提供幫助:據福布斯報道,美國經濟學家奧利弗哈特加入加密創業公司,擔任區塊鏈治理公司Prysm Group的顧問。盡管在加密創業公司擔任新職位,和許多同行一樣,他對比特幣持懷疑態度。奧利弗哈特表示,“就我認為區塊鏈和比特幣可以分開的程度而言,我認為我對區塊鏈更加熱衷。”[2018/8/2]

題目非常的簡單,只要向此合約發起一筆交易,且滿足require的條件就可觸發fallback函數。

正常情況下,在對一個合約調用中,如果沒有其他函數與給定的函數標識符匹配,或者沒有提供附加數據,那么fallback函數會被執行。一般是作為轉入以太幣的默認操作。所以智能合約開發時一般是不需要將owner=msg.sender寫到fallback函數中的。

如下圖所示:

圖2

然而,在這里本不該被用戶調用的owner=msg.sender被調用了,導致權限控制不當,產生了越權,“俎”與“庖”就這樣發生了接下來的故事。

現場 | 孫志勇:智能合約價值在于提供效率 證據保全 自動執行:金色財經現場報道,在”共識2018區塊鏈大會·北京”上,中國政法大學教授孫志勇在談到區塊鏈與智能合約時表示,智能合約的價值在于提供效率、證據保全和自動執行。而智能合約對現有法律的挑戰表現為,跨境執行與法律監管的沖突、稅收沖突、智能合約的自身爭議處理以及智能合約與傳統法律的銜接。[2018/7/27]

2.2相關安全事件

2.2.1Bancor合約事件

2020年6月18日,Bancornetwork被爆出存在漏洞。

漏洞產生的原因是合約中存在一個public的safeTransferFrom方法,使得攻擊者可以直接調用此方法授權給Bancornetwork合約的代幣轉出到任意賬戶。

其關于轉賬和授權的三個函數權限均為public,這使得任何用戶都能對其進行調用。本次事件涉及資金50W余美元。

詳細代碼如下圖所示:

華爾街巨頭試行DLT 用區塊鏈智能合約管理股權互換交易:高盛和摩根大通在內的一些華爾街巨頭已經完成了一項試點,使用區塊鏈智能合約來管理股權互換交易和交易后生命周期事件,其試點項目是由DLT初創公司Axoni利用其AxCore平臺進行管理,這也拉動了DLT幣價值的上漲。[2017/11/22]

圖3

權限為public的safeTransferFrom方法這個“奸臣”并沒有得到Bancor合約“國王”的許可,直接奪走了“國家”的“財政大權”。

幸而Bancornetwork團隊和白帽首先發現了此問題,并對資金進行了轉移。在后續也對該漏洞進行了修復,才得以避免損失。

詳細分析見

而同樣的事件也在另外一個合約中上演,接下來我們將介紹6月底的VETH合約漏洞事件。

2.2.2VETH項目事件

2020年6月30,VETH項目被爆出漏洞。本次事件中“越俎代庖”的主角則是合約中的changeExcluded函數的external修飾符。

external修飾符使得任何人都可以調用changeExcluded函數來繞過transferFrom函數內部的授權轉賬額度檢查,將合約的VETH代幣盜走。

此次事件,攻擊者利用此漏洞盜走919299個VETH后大量拋售,導致VETH代幣價值瞬間流失。

詳細見涉及到的合約代碼如下圖所示:

圖4

通過以上兩個案例,相信大家已經意識到了合約中“越俎代庖”事件的嚴重影響,那么如何在合約代碼編寫的過程中有效的區分“俎”與“庖”呢?

2.3“俎”、“庖”信息大揭秘

針對越權事件,首先需要合約開發人員了解函數可見性。

函數的可見性,一共有external、public、internal和private四種:

-External

外部函數作為合約接口的一部分,意味著我們可以從其他合約和交易中調用。一個外部函數f不能從內部調用。當收到大量數據的時候,外部函數有時候會更有效率,因為數據不會從calldata復制到內存.

-Public

public函數是合約接口的一部分,可以在內部或通過消息調用。對于public狀態變量,會自動生成一個getter函數。

-Internal

這些函數和狀態變量只能是內部訪問,不使用this調用。

-Private

private函數和狀態變量僅在當前定義它們的合約中使用,并且不能被派生合約使用。

開發人員在構造一個函數時,應當遵循這些可見性進行開發,要明確哪些函數是可以由用戶調用的“俎”,而哪些又是合約中不能任意替代的“庖”,以最小原則進行分配。

比如一個函數safeTransfer在設計時是用于轉賬操作的,用戶可以通過調用此函數,轉賬此合約發行的代幣。我們使用public和external都可以滿足需求,但就安全的角度,我們應當使用external,避免合約內對此函數進行調用,造成不可預期的風險。

如存在有一個safeTransferFrom函數,用戶可以通過授權給此合約其他代幣,將其他代幣轉移到一個指定地址的,當_token等于合約本身時,就會以合約本身的身份調用sadeTransfer函數,即而將合約內的錢轉到其他地址。

圖5

然而只是遵循函數可見性是遠遠不夠的,函數的可見性,只是區分了合約內部、繼承合約和外部這三個界限,遠遠不能滿足我們的需求。

想要達到較為完善的權限管理,我們應當引入“角色”的概念,如:管理員、普通用戶、特權用戶等。在合約中存儲這些角色的地址,通過判斷地址或標志變量來進行權限的控制。

如下圖所示:

圖6

通過修飾器對這些不同的“角色”進行管理,如使用onlyOwner修飾器,限制特定的地址才可調用此函數。對應“角色”的權限管理。使用修飾器的方式,可以更加清晰的判斷出是否存在紕漏。

三、安全總結

就鏈上現狀來看,智能合約權限管理錯誤造成的漏洞比比皆是,其中不乏很多“著名項目”,而此類漏洞造成的損失也是巨大的。

成都鏈安安全團隊依據多年合約審計和鏈上分析安全經驗給出以下幾點建議:

1、遵循權限最小化開發原則,在設計函數時應當就規劃好可見性。

2、建立角色機制,使用修飾器對各函數進行權限管理,避免紕漏。

3、上線前一定找專業機構做好代碼審計,正所謂“一人一個腦,做事沒商討;十人十個腦,辦法一大套”。

Tags:KCSERN區塊鏈TERkcs幣最新價格Nimbus Governance Token為什么現在不提區塊鏈了Splinterlands

瑞波幣
PeckShield:今年以來流入交易所的高風險資產達14.7萬BTC_OIN:BTC外貿

0.概要 2020?年以來,在全球新冠肺炎疫情的影響下,全球經濟開啟了數字化轉型的步伐。互聯網科技巨頭Facebook牽頭發起的Libra項目試圖做新一代的全球數字貨幣,而全球各國央行則紛紛推出.

1900/1/1 0:00:00
2020 Q2 DeFi報告:流動性挖礦狂熱未帶來新用戶,DeFi任重道遠_DEFI:DEF

自3月以來,DeFi生態系統不僅恢復了增長,而且活動量也顯著增加,這主要歸功于2020年6月COMP的發行。加上一些引人注目的安全事件,本季度DeFi顯然一直在經歷新技術發展的痛苦.

1900/1/1 0:00:00
區塊鏈2020半年回顧:誰在見證歷史,誰在創造歷史?_比特幣:COIN

“2020年什么也沒干,光見證歷史了。”見證歷史這件事,對于現實世界的人而言如此,對于加密世界的從業者更是如此.

1900/1/1 0:00:00
云南加速區塊鏈場景應用,廣發“英雄帖”,招募8大應用試點項目_比特幣:十年比特幣曲線圖

本文轉自《云南日報》。 彩云之南,正因一場前所未有的數字革命而發生改變。 以區塊鏈、大數據等為代表的新一代信息技術加速向實體經濟融合滲透,催生發展新動能、釋放發展新活力.

1900/1/1 0:00:00
瓶中伊甸園:透明的中心化_區塊鏈:COI

一我一直都在思考加密世界、數字未來。這個市場里的不少人眼神充滿了欲望,昨天我說了幾句實話,又被人怪怪地看,好像在說“要咬你幾口才出氣”.

1900/1/1 0:00:00
開盤上漲300%,有人預測市值將會超越ETH,200刀的波卡還能買么?_COIN:JEDI Coin

“關注波卡,幾年一次的大機遇,再次提醒。”7月16日,某幣圈投資人在朋友圈喊單。次日,DOT在火幣、OK等多個主流交易所公開交易.

1900/1/1 0:00:00
ads