引子:“庖人雖不治庖,尸、祝不越樽俎而代之矣。”?--《莊子·逍遙游》
古時候,有一位杰出的領袖名叫唐堯。
他所治理的地區人們安居樂業,但是他聽聞隱士許由十分有才干,便萌生了將領導權讓給許由的想法。但是許由拒絕了,并說出了這樣一段話“鷦鷯巢于深林,不過一枝。”
至此,后人也用越俎代庖一詞來表達越權的含義。
“越俎代庖”
在智能合約的實現中存在著訪問權限,如果權限設置不合理,很容易造成智能合約被攻擊,嚴重的還會造成巨大的經濟損失。
成都鏈安-安全實驗室對于智能合約安全有著豐富的經驗和積累,但隨著區塊鏈技術越來越受重視,智能合約的數量也越來越多,隨之而來的智能合約被攻擊事件也越來越多,也讓我們感受到了“讓區塊鏈更安全”的企業使命是多么的重要,但是一己之力難于對抗所有的威脅。
接下來,我們將會把自己的安全經驗積累通過與智能合約CTF靶場ethernaut相結合,通過技術連載的方式向廣大智能合約開發者普及在開發過程中,如何實現更安全的代碼。
歐盟金融穩定監督機構:需要新法規來涵蓋加密集團和智能合約:金色財經報道,歐盟金融穩定監督機構表示,可能需要新的法規來涵蓋大型加密貨幣集團和智能合約,因為它警告說,不斷增長的數字資產和DeFi部門可能會對經濟構成系統性風險。
隨著新的加密資產市場法規(MiCA)將于2024年在集團內部生效,由歐盟央行行長Christine Lagarde主持的歐洲系統性風險委員會(ESRB)在周四的一份報告中警告說,加密貸款和投資的風險以及數字資產市場的高杠桿率仍存在。
雖然MiCA為錢包提供商和穩定幣發行人等參與者設定了治理、許可和準備金要求,但它遺漏了加密貸款和押注等領域,這些領域可能“對消費者構成重大風險”。[2023/5/25 10:39:46]
現在我們就來聊一聊ethernaut靶場的第一題Fallback,
代碼函數“越俎代庖”的事件。
一、權限漏洞簡介
越權漏洞是指在智能合約中,因函數可見性設置不合理或函數缺乏有效的驗證導致本不能調用某一函數的用戶通過直接或者繞過驗證的方式成功調用該函數。
AAX支持LEND智能合約置換為AAVE:根據Aave官方說明,Aave已經啟動通過智能合約將原LEND代幣按照100LEND:1AAVE的比例轉換為AAVE新代幣,新的AAVE持有人將可以根據持幣權重參與Aave protocol協議的治理。據AAX官方公告,AAX將支持Aave Protocol(LEND)智能合約置換為Aave Protocol(AAVE)的計劃。AAX交易平臺將下架LEND,而AAVE將會上架。LEND / USDT 交易對也已于香港時間 2020 年10月12日15:00起暫停交易,暫停交易期間LEND仍可用于充幣和提幣。AAVE/USDT交易對開啟時間請留意AAX官方公告。[2020/10/12]
該漏洞可被單獨利用,也可能結合其他漏洞進行組合攻擊,利用方式簡單,漏洞影響視存在漏洞的函數而定,可能對合約造成毀滅性打擊。
二、Fallback“越俎代庖”
漏洞原理詳細分析
2.1合約中的“俎”與“庖”
如何理解合約中的“俎”與“庖”呢?先來看一段合約代碼,如下圖所示:
IOTA基金會高級開發人員:以太坊智能合約比IOTA更適合高價值轉移:IOTA基金會高級開發人員將以太坊與IOTA進行了比較,認為以太坊智能合約比IOTA更適合高價值轉移。他進一步指出,有些應用中以太坊智能合約比IOTA更適合,因為IOTA的靈活性在此類應用中成為劣勢。在以太坊這樣的合約中長期持有大筆資金比較安全。他指出,這樣的網絡可以讓你毫無畏懼地依賴它們。Hop表示,與其他區塊鏈同類產品相比,IOTA智能合約協議(ISCP)具有資源豐富、高效且高度靈活的特點。因此,相比之下,IOTA智能合約為更低的交易成本提供了空間。他還透露了IOTA將物聯網(IoT)用于記錄和執行交易的好處。Hop稱贊IOTA的巨大靈活性,同時指出IOTA的智能合約不僅有內置的虛擬機(VM),還允許準確處理SC代碼。這證實了IOTA將適用于未來實施的任何變更或擴展。[2020/5/10]
圖1
這一段合約代碼出自ethernaut靶場的第一題Fallback。針對于靶場中的問題,解題思路是通過調用回調函數function()payablepublic來觸發owner=msg.sender;,使得合約的所有者變成調用者。
題目非常的簡單,只要向此合約發起一筆交易,且滿足require的條件就可觸發fallback函數。
動態 | Blockstream推出新的區塊鏈智能合約編程語言:據Crypto Insider消息,區塊鏈公司Blockstream宣布推出區塊鏈智能合約編程語言Simplicity。據其團隊介紹,以太坊的EVM語言具有安全漏洞,會導致資金被盜且無法追回,而比特幣的script語言表達能力有限。Simplicity克服了這些缺點,而且語法和語義更簡單。[2018/12/1]
正常情況下,在對一個合約調用中,如果沒有其他函數與給定的函數標識符匹配,或者沒有提供附加數據,那么fallback函數會被執行。一般是作為轉入以太幣的默認操作。所以智能合約開發時一般是不需要將owner=msg.sender寫到fallback函數中的。
如下圖所示:
圖2
然而,在這里本不該被用戶調用的owner=msg.sender被調用了,導致權限控制不當,產生了越權,“俎”與“庖”就這樣發生了接下來的故事。
2.2相關安全事件
現場 | 國際區塊鏈研發俱樂部副主席:區塊鏈3.0時代將使智能合約與應用場景相結合:金色財經現場報道,2018金融科技區塊鏈峰會就“應用為王”這一主題,國際區塊鏈研發俱樂部副主席趙梓雄表示,區塊鏈3.0時代將使得智能合約與應用場景結合,希望未來區塊鏈能結合應用和實體產業,并與云計算、人工智能、物聯網等技術混合在一起創造更大價值,它會像互聯網一樣影響社會生活。具體到應用來講,在馬來西亞,榴蓮的銷售量很大,如何帶動它在其他地區的銷售,目前種榴蓮樹和吃榴蓮都會產生榴蓮通證,將區塊鏈應用加入實體產業里,使其互相發揮作用。本次峰會也倡導各方專家和人士從不同角度理性分析區塊鏈應用的價值。[2018/9/9]
2.2.1Bancor合約事件
2020年6月18日,Bancornetwork被爆出存在漏洞。
漏洞產生的原因是合約中存在一個public的safeTransferFrom方法,使得攻擊者可以直接調用此方法授權給Bancornetwork合約的代幣轉出到任意賬戶。
其關于轉賬和授權的三個函數權限均為public,這使得任何用戶都能對其進行調用。本次事件涉及資金50W余美元。
詳細代碼如下圖所示:
圖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、上線前一定找專業機構做好代碼審計,正所謂“一人一個腦,做事沒商討;十人十個腦,辦法一大套”。
懷揣著無比激動的心情,我們要宣布一則新消息:以COMP代幣為標的資產的七日二元期權上線啦! 二元期權很好理解,而且容易上手,因此對于那些想要投機資產未來價格的用戶來說,是非常好的金融產品.
1900/1/1 0:00:00CenterPrime基于Hyperledger,是一條有權限訪問韓國開放的銀行API的私有鏈.
1900/1/1 0:00:00今日消息:據7月17日消息,在CoinShares最新發布題為“新冠肺炎危機期間了解比特幣”的報告,強調在危機期間比特幣展示了很強的韌性.
1900/1/1 0:00:00轉自:Odaily星球日報整理?|昕楠?運營|蓋遙?編輯|郝方舟IPFS終于將迎來「落地」的高光時刻.
1900/1/1 0:00:005月份以來,比特幣幾乎橫盤了將近12周。不少喜歡高風險、尋求高收益的投資人,默默離場,殺入風頭正勁的股票市場……不少交易員,被硬生生磨成了囤幣黨,懶得打開一下交易軟件……短期看,比特幣到底是漲還.
1900/1/1 0:00:00與傳統中心化交易所的做市商不同,自動化做市商是無需許可的,這意味著任何人都可以參與進來,而且幾乎沒有門檻.
1900/1/1 0:00:00