羅瑞杰, 王炳森, 宋書瑋, 姜人楷, 羅 豐, 林煌坤, 張小松, 陳 廳
(電子科技大學 網絡安全技術實驗室, 四川 成都 611731)
近年來,去中心化金融DeFi(Decentralized Finance)應用在各類公共區塊鏈上發展迅猛,特別是以太坊這類,具有運行預定義自動化程序(通常稱為智能合約)的公鏈,給DeFi的發展提供了廣闊的前景[1]。去中心化應用利用區塊鏈的透明性和開放性,在公鏈上運行具有各類具有金融功能的智能合約,提供了包括代幣交換、數字資產抵押等多樣化的金融服務[2]。DeFi應用相比傳統金融服務提供商在效率、透明性、可訪問性以及可組合性上有著顯著的優勢[3]。各類更加高效、更具有創新性的去中心化金融協議的提出,讓DeFi應用進入高速發展的時期。截至2022年2月,鎖定在DeFi應用上的總資產達到了1 500億美元,而在2021年DeFi的資產增長率更是達到了驚人的1 700%[4]。
DeFi的快速增長,在帶來了巨大收益并使相關區塊鏈技術進一步發展的同時,也面臨著嚴峻的安全挑戰。由于DeFi應用中存在著不少的漏洞,給黑客提供了各類竊取DeFi應用資產的手段。以太坊是DeFi應用的主要運行環境,據TokenInsight的行業報告顯示[5],截至2021年12月,DeFi應用中63%屬于以太坊,現有攻擊大多數是針對以太坊的DeFi應用。本文主要對以太坊上的攻擊情況進行分析,同時有PolyChain,幣安鏈等新興公鏈的攻擊研究。在過去的2021年里,DeFi上資產的迅速上漲,極大地提高了安全威脅帶來的風險。在2021年8月,DeFi平臺PolyNetWork被盜超過6億美元的加密資產[6],而在2022年2月,Wormhole平臺被盜取超過3億美元的加密資產[7]。截至2021年12月,在DeFi上共有超過120億美元的資產遭受損失[8]。其中,僅2021年,被盜取和欺詐的DeFi資產達到了105億美元,遠遠高于2020年的15億美元[8]。這些攻擊都給DeFi平臺以及相關用戶帶來了巨大的損失,嚴重影響了DeFi系統的生態環境。
學術界中關于DeFi的安全研究較少且主要是針對某一具體類型的攻擊進行分析。Qin等[9]詳細闡述了DeFi應用中出現的套利攻擊,對其進行了定量分析,并量化了套利行為可能出現的風險。Wang等[10]提出了一種可擴展的安全分析框架, 可以檢測DeFi應用中存在的價格預言機漏洞。 Tolmach等[11]提出一種形式化的過程代數技術,分析DeFi協議組合后存在的經濟以及安全方面的問題。Wang等[2]在智能合約漏洞檢測的基礎上,提出了一種挖掘漏洞的工具,可以對DeFi的智能合約進行相關分析,并通過監控DeFi所在公鏈的相關交易來進行攻擊檢測。學術界關于DeFi的安全研究大多是在已有智能合約漏洞的基礎上進行的[2],或是針對某一類具體的攻擊進行檢測防御[9-11]。由于DeFi攻擊方式多變,現有關于DeFi的安全檢測和防御方法使用的傳統區塊鏈安全中的方法,只能針對某一具體類別的攻擊。本文總結了現有關于DeFi的各類安全檢測和防御方法,使用層次化的方式研究DeFi安全問題。通過將不同的攻擊分類到所屬的DeFi架構層次中,依據DeFi層次的特點對現有檢測和防御方法進行劃分,同時提出新的方法用于改進。區別于原有的DeFi安全研究,本文通過層次化的方法,可以更加全面地解決現有的各類安全攻擊問題,并對DeFi系統中存在的安全漏洞提出了解決或改善方法,有效地防止了各類可能存在的DeFi安全攻擊。
DeFi自應用以來,國內外已有多篇關于DeFi的綜述。如Jensen等[12]研究了DeFi市場分類和常見用例,并指出了潛在的一些關鍵風險。Sch?r[3]對DeFi的架構以及常見類型進行了一個較為完整的總結,并針對可能存在的安全漏洞做出了相關分析。Katona[13]的研究對DeFi進行了更加準確和全面的定義,并對DeFi的相關收益進行了分析。Werner等[14]則從協議層面對DeFi進行分類并分析協議可能帶來的技術和經濟風險。Kim等[15]分析了現有DeFi的常見應用,并對常見類型進行了分組。Andrea等[16]分析了常見的DeFi應用,并抽象出了各個類型應用中的關鍵模型,提出了這些模型涉及到的技術以及非技術的安全問題。Corbet等[17]研究了DeFi代幣和傳統加密貨幣(如比特幣等)的區別,并研究了DeFi上出現的市場波動等情況。Popesce等[18]對比了和傳統金融的關系后,總結了DeFi應用新增加的各類金融功能。Qin等[19]除了對比與傳統金融的關系外,著重研究了DeFi可能出現的經濟安全風險。由于DeFi發展時間較短,現有綜述主要是對DeFi應用的種類進行研究,關于DeFi安全的討論則層次較為單一,通常是按照不同DeFi的協議或功能分析背后的安全問題[14,16]。本文與現有的DeFi安全綜述不同,總結了大量的真實攻擊案例,并首次按照DeFi的架構模型進行分層分類,系統探究了DeFi生態系統中存在的各類安全風險。本文在分類的同時,首次對每類攻擊的典型案例進行了詳細分析,并對攻擊流程中涉及到的安全漏洞進行了分析,從DeFi架構的各個層次對安全問題進行較為全面的探究,同時本文總結了已有DeFi攻擊的檢測和防御方法,并在此基礎上進行了改進。
本文首先總結了自DeFi提出以來的各種攻擊案例,依據DeFi的層次架構,對不同的DeFi攻擊進行了分類總結。隨后本文探究了各類攻擊對DeFi生態系統造成的影響,選取了各類攻擊中的典型案列進行詳細的流程說明,以此挖掘攻擊背后涉及到的安全漏洞。在完整的對所有攻擊分類后,本文總結了現有針對DeFi攻擊的各種檢測和防御手段,分析各個方法的優缺點,之后結合DeFi各層次的特點對現有方法進行改進,或提出新的解決方案。最后,本文探索了未來DeFi安全中檢測和防御方法的研究重點,并對全文進行了總結。本文主要有以下3點貢獻:①總結了自2020年來至今(2022年2月)的所有真實攻擊案例,并首次按照層次對DeFi攻擊進行了系統的分類;②首次對每一類攻擊的典型案例進行了詳細的流程分析,并挖掘了DeFi架構下存在的各類安全漏洞和風險;③總結了DeFi安全的各類檢測和防御方法,分析現有方法的優缺點,并對方法進行改進或提出新的解決方案。
本文的組織安排:第1節介紹了區塊鏈相關概念,DeFi應用的通用模型及層次劃分,以及各層次對應的安全風險;第2節針對DeFi攻擊進行分類,并提出分類的依據和方法;第3節針對攻擊的分類,總結已有檢測和防御方法的優缺點,提出改進措施或者提供新的解決方案;第4節分析DeFi安全問題的發展趨勢以及未來研究方向;第5節總結全文。
本節介紹區塊鏈和DeFi的相關概念,以及DeFi的通用模型,分析該模式下的各類安全風險。
區塊鏈是一種分布式數據庫解決方案,它維護著一個不斷增長的數據列表,并由參與其中的節點確認記錄[20]。區塊鏈的相關概念由中本聰在2008年首次提出[21],并在近年來不斷發展完善,現有的比特幣和以太坊是區塊鏈技術的主要代表。區塊鏈技術涉及多個領域的知識,其數據的所有權和隱私安全依賴于密碼學來保障,而隨著區塊鏈不斷發展,以及區塊鏈相關領域應用價值的不斷增大,區塊鏈相關安全的研究變得更加重要。
智能合約是一種運行在以太坊鏈上的程序。可以由高級語言開發并編譯成以太坊虛擬機字節碼,智能合約在部署后不能修改。在執行智能合約時,虛擬機會維護一個堆棧、內存和存儲數據的賬戶存儲[22]。為了防止濫用資源,智能合約的部署和調用將向交易發送者收取費用。
汽油(gas)是用來衡量一筆交易所消耗的計算資源的基本單位[23]。當用戶進行交易時,以太坊虛擬機會計算這筆交易中所使用的資源,交易的發起者需要支付執行交易的費用。
去中心化金融DeFi可以定義為建立于公共智能合約平臺上的開放無需許可且高度可互操作的的協議棧,它以更加開放和透明的方式實現傳統的金融服務[3]。DeFi應用是傳統金融依托區塊鏈的去中心化實現,DeFi與傳統金融存在一些相似之處,DeFi應用的類別也來源于傳統的金融服務類別。現有的DeFi應用中,主要提供有借貸、交換、抵押、存儲、投資、保險等金融業務。DeFi應用依托于支持智能合約運行的區塊鏈,主要是以太坊為主,其他如EOS, TRON, 以及Cosmos等鏈的DeFi應用也在逐步發展中[13]。
DeFi應用的類型較多,其中主要包括了數字資產交換,以及代幣抵押。DeFi的數字資產交換主要通過自動做市商(automated market maker,AMM)實現。AMM是一類DeFi應用,它將一或多對的數字資產記錄后作為流動性代幣池(實質是智能合約),代幣池中存有相應的數字資產[24]。買賣雙方可以直接與流動性代幣池進行交互,代幣池使用數學公式計算流動池中的代幣價格[25],并使用經濟模型維持代幣池的交易市場。AMM改變了傳統買賣雙方訂單匹配的模式,使用去中心化的方法完成交易。
DeFi的生態系統,以一種高度自由和透明的方式構建。DeFi中不同應用提出的協議以及程序本身都可以組合以提供更好的金融服務。Sch?r[3]提出了一種通用概念模型,該模型通過分層的方式很好的解釋了DeFi協議的運行及交互的方式,突出了DeFi系統中關鍵的組合特性。下文詳細介紹該模型下的DeFi分層,并針對各層特點提出面臨的風險以及安全漏洞。DeFi的架構模型,如圖1所示。
(1)結算層。結算層是DeFi應用最底層的實現。由于DeFi應用需要依托于智能合約來實現其相應的金融服務功能,因此,結算層通常是允許智能合約運行的區塊鏈組成,而DeFi系統的最終交易也是在結算層實現。結算層除了存在傳統區塊鏈的安全風險,如雙花攻擊、日蝕攻擊等,針對于DeFi特性而言,結算層更為重要的漏洞在于區塊鏈的交易順序。DeFi中的各類金融活動中,許多都依賴具體的交易順序,不同金融活動在不同的交易順序下,會有很大的差異。而區塊鏈中的礦工或者節點可以通過條件競爭的方式[26],改變具體的交易,使用套利的行為來實現獲利[9]。
(2)資產層。資產層在結算層之上,由結算層發行的加密貨幣構成,如ETH、BNB等貨幣。該層的資產包括依托于區塊鏈的原生代幣,以及其他依托于智能合約的代幣。由于代幣中存在各類標準,但是仍然存在許多有缺陷的代幣[27],這和DeFi應用的智能合約存在接口不一致,導致出現漏洞,造成DeFi平臺資產的損失。
(3)協議層。協議層通常由實現了各類金融服務的智能合約構成,DeFi應用各種功能的運行邏輯在協議層實現。協議層是DeFi模型中最為主要的層次,其中的協議通常運行于智能合約,由各個DeFi應用的開發者提出運行于區塊鏈中。由于協議主要由智能合約構成,因此,過去的智能合約漏洞也會對DeFi的生態系統造成威脅,比如常見的重入漏洞、權限驗證漏洞、變量覆蓋漏洞等都會影響到DeFi[28],且現有的大量DeFi攻擊都是針對協議層存在的漏洞進行攻擊。
(4)應用層。DeFi應用的應用層是用戶和DeFi平臺交互的接口,通常依托于傳統Web瀏覽器前端,以網頁等方式呈現。DeFi應用與傳統Web應用類比,也可以分為前后端。DeFi應用的后端建立區塊鏈上,但前端需要使用傳統的Web應用的構建方法,這就給DeFi應用帶來了較大的風險。DeFi應用前端受傳統網絡攻擊手段的影響,存在有諸如XSS、CSRF漏洞攻擊、網絡劫持等漏洞[29],前端受到攻擊不會直接對DeFi的協議層造成影響,但是造成的漏洞被攻擊者利用會造成DeFi應用或用戶資產的損失。
(5)聚合層。聚合層用于實現DeFi生態系統的可擴展性,通過聚合層不同開發者實現的DeFi應用得以組合交互。聚合層主要將不同的DeFi協議關聯連接,使其得以交互,在實現更復雜功能的同時,呈現出相對簡潔的形式。由于不同的協議有不同的實現標準,在通過聚合層進行交互時可能會出現協議之間不兼容的情況,造成使用金融服務時出現漏洞,攻擊者利用漏洞造成DeFi生態系統的破壞。
預言機攻擊:預言機是一種單向的數字代理,可以查找和驗證真實世界的數據,并以加密的方式將信息提交給智能合約,相當于區塊鏈世界中的一個第三方數據代理商[30]。預言機是區塊鏈網絡與互聯網以及其他區塊鏈網絡等保持數據、信息溝通的橋梁。特別是在DeFi智能合約這類去中心化應用(Dapp)中,通過預言機,開發者可以調用包括行情價格在內的各種外部數據資源,讓Dapp連通外部現實世界的數據環境。
2021 年以來,以太坊 DeFi生態中有10多起利用閃電貸的大規模攻擊事件陸續被媒體曝光,而這些事件已經呈現出明顯的模式化和重復性特征,從表面上看,其共性是有些AMM協議會作為DeFi智能合約的預言機報價源,而攻擊者通過操縱 AMM 資產池內的資產價格或者資產數量來造成損失。攻擊流程是依賴預言機報價的系統,會臨時操縱報價以扭曲協議的內部核算,然后將資金以優惠的利率存入,再將預言機重置為正常值后立即以另一種貨幣或同一種貨幣提走。 通常黑客們選擇使用閃電貸(即允許用戶零抵押貸出巨額資產,但必須在同一個區塊內還款,否則交易會回滾)來獲取攻擊所需的巨額籌碼。黑客通過一系列手段出入各類抵押、借貸、交易協議,利用巨額資金扭曲某個單一市場的價格數據,進而擾亂預言機報價結果,最終實施套利。攻擊原理[31],如圖2所示。
(1)準備,獲得用于操縱AMM預言機的資產Y及準備存入攻擊目標的資產A;
(2)抵押,將資產A抵押至攻擊目標,獲得代表抵押物的頭寸代幣B,有些情況下,不發放頭寸代幣B,只在智能合約內部記賬;
(3)操縱,將資產Y投入AMM兌換資產X,改變 AMM流動性池內資產的比例從而改變報價,更新攻擊目標合約內資產A或頭寸代幣B的定價;
(4)收尾,若為借貸業務,則通過抬高的抵押物估值借出更多資產并不再歸還;若為機槍池業務,則通過抬高價格后的頭寸代幣B贖回資產,獲得增值收益。
2020年12月18日,DeFi借貸協議WarpFinance遭到黑客攻擊[32],造成了近800萬美元的資產損失。其攻擊過程如下:
(1)Warp Finance使用的是Uniswap交易對的相對價格作為其預言機的報價源;
(2)攻擊者在了解到這個情況后,使用從閃電貸中獲取的巨額資金操縱了Uniswap交易對的價格;
(3)通過控制預言機報價源信息,攻擊者破壞了Warp Finance的借款價值判斷標準;
(4)在Warp Finance錯誤的數據環境下,攻擊者竊取了遠遠超過抵押品價值的資產;
(5)攻擊者歸還了從閃電貸中借出的款項。
三明治攻擊:三明治攻擊是DeFi里流行的搶先交易技術的一種。為了形成一個“三明治”交易,攻擊者會找到一個待處理的受害者交易,然后試圖通過前后的交易夾擊該受害者。這種策略來源于買賣資產從而操作資產價格的方法[33]。區塊鏈的透明度以及執行訂單的延遲(往往在網絡擁堵情況下),使搶先交易更加容易,并極大降低了交易的安全性。
所有區塊鏈交易都可在內存池中查到。一旦掠奪性交易者注意到潛在受害者的待定資產X交易被用于資產Y,他們就會在受害者之前購買資產Y。掠奪性交易者知道受害者的交易將提高資產的價格,從而計劃以較低的價格購買Y資產,讓受害者以較高的價格購買,最后再以較高的價格出售資產。
實現三明治攻擊的3個要素點[34]:①交易公開性,可以在內存池中獲取交易的詳細信息;②以太坊交易執行機制,通過汽油競爭的方式搶先完成交易,用戶可以提高汽油價格來優先讓礦工進行打包交易;③AMM 交易曲線機制,通過恒定乘積機制可以造成較大滑點來使用戶受損。
平臺與代幣不一致攻擊:代幣資產通過DeFi進行交易,但DeFi和代幣之間的交互方式卻不一定能保證正確。不正確的交互可能導致不一致的行為。現有交易中的大多數情況都默認DeFi和代幣的交互是一致的,這就可能會導致不一致攻擊的發生。例如攻擊者利用某種有缺陷的代幣A作為資產與DeFi交互,然而,DeFi平臺默認代幣A是正常資產,因此,在成功調用轉賬接口后,錯誤的對資產進行了記錄,同時并未檢查實際資產情況,導致出現不一致,造成財產損失和用戶混亂。
不一致的定義:用戶用代幣在DeFi平臺進行交互時,代幣的行為與DeFi平臺的行為不匹配。M 代表存儲用戶余額在 Token 合約中的核心數據結構,N代表存儲每個用戶余額記錄在DeFi合約中的核心數據結構,將每個用戶的余額記錄存儲在一個DeFi 合約。為了證實表征不一致,讓Bm表示修改M的行為。假設Bn表示修改N的行為,通過比對Bm、Bn來判斷是否不一致。
2020年6月28日,DeFi應用 Balancer遭受攻擊[35]。Balancer是一個提供AMM服務的合約,也就是自動化做市商服務,自動化做市商服務提供者采用代幣池中的各種代幣之間的數量比例確定代幣之間的價格,用戶可通過這種代幣之間的動態比例獲取代幣之間的價格,進而在合約中進行代幣之間的兌換。攻擊原理如圖3所示。
攻擊過程如下:
(1)從 借貸平臺dYdX 進行貸款;
(2)不斷地調用swapExactAmountIn()函數,將Balancer池中的 STA 數量降到低點,推高 STA 兌換 其他代幣的價格;
(3)使用1個STA兌換WETH,并在每次兌換完成后(調用 swapExactAmountIn()函數)調用gulp()函數,覆蓋STA的余額,使STA兌換WETH的價格保持在高點;
(4)使用同樣的方法攻擊代幣池中的其他代幣;
(5)償還閃電貸貸款;
(6)獲利離場。
此次攻擊利用了STA代幣的特殊性從而導致的不一致行為,STA代幣是通縮型代幣,使用1個STA進行兌換,轉賬過程中著1個STA被燃燒掉,實際上Balancer收到0STA,將交易池中STA的數量始終維持在一個很低的水平。產生不一致攻擊的主要原因在于STA合約記錄的代幣更新量與balancer合約記錄的代幣更新量不一致。當用戶在使用通縮型代幣進行兌換的時候,Balancer合約沒有有效地對接收到的通縮型代幣的實際余額進行校驗,導致余額記錄錯誤。
重入攻擊:攻擊者利用DeFi智能合約存在的重入漏洞,通過自定義的惡意合約多次重復調用平臺關鍵操作,造成平臺和用戶的資產損失。智能合約中的重入漏洞官方定義為:從智能合約A與任意不同的智能合約B的交互,以及A與B之間發起的以太幣轉移,都會將控制權移交到B,同時B擁有在交互結束前回調合約A函數的能力[36]。重入漏洞是智能合約中的典型安全漏洞,由于DeFi應用中會涉及到多個合約,且具有較多的外部調用和交互[37],因此,DeFi項目中重入攻擊較為嚴重。
已有重入攻擊中,有直接針對DeFi平臺資產記錄的重入攻擊,針對平臺關鍵計算變量的重入攻擊,以及針對平臺代幣轉賬的重入攻擊。重入攻擊在DeFi項目中造成了較為嚴重的損失,Uniswap V1[38]、Akropolis[39]、BurgerSwap[40]等大型DeFi平臺均遭受了重入攻擊。截至2021年12月,已報道的DeFi重入攻擊至少造成了約2 400萬美元的損失。
針對DeFi項目的重入攻擊要造成經濟損失,需要滿足至少2個條件:首先是DeFi關鍵函數存在重入漏洞。這里的關鍵函數主要指涉及平臺資產計算、存儲、更新操作的函數。這類函數如果存在重入漏洞,攻擊者可以通過多次調用關鍵函數,造成平臺資產的非法變動,導致經濟損失;其次是DeFi應用關于外部合約的限制情況。如果平臺不限制代幣合約類型以及地址,導致攻擊者可以使用惡意合約偽裝為資產傳入平臺,并在DeFi應用上使用含有重入漏洞的函數進行外部調用時,發起重入攻擊。
2021年5月18日, DeFi 項目 BurgerSwap 遭受攻擊,損失達330萬美元[40]。該項目屬于DeFi應用中的自動做市商AMM類型,項目架構主要由Delegate層,lpPlatForm層和Pair層構成,項目結構如圖4所示。
用戶在BurgerSwap交易時,需要確定2種資產代幣,由Delegate層判斷2種代幣是否已經建立代幣池合約。如果還未建立,由Delegate層產生對應資產對的lpPlatForm層和Pair層,其中,lpPlatForm層進行邏輯運算,同時掌握Pair層的權限,可以發起轉賬并記錄用戶資產情況,Pair層合約則存儲實際資產。此架構下的IpPlatForm層中,由于實際轉賬前未核算Pair層資產實際情況,完全按照函數參數和平臺記錄進行邏輯運算,導致出現了重入漏洞,構成了威脅。攻擊者利用該漏洞,發起了攻擊,攻擊過程如圖5所示。
(1)攻擊者申請閃電貸,獲取WBNB代幣作為攻擊資本;
(2)攻擊者發起資產交換請求,要求用自己的惡意代幣換取WBNB代幣;
(3)BurgerSwap平臺建立惡意合約代幣與WBNB流動性池子,并調用函數計算相關轉賬參數開始交換;
這段歷史讓NIH前院長哈羅德·瓦默斯(Harold Varmus)對2025年的目標持有謹慎態度。他說:“沒有人否認對阿爾茨海默病的研究亟須取得進展,但是我希望不要對其限定日期。”
(4)平臺開始發起實際轉賬,調用了惡意合約的transferfrom()函數;
(5)惡意合約發起重入操作,再次向BugerSwap發起資產交換請求;
(6)回到原函數,最開始的交換操作已經改變流動性池子資產,資產兌換比例理應發生變化,而后續的交換操作使用原有比例而檢查實際比例,導致用較高比例兌換出WBNB;
(7)攻擊者通過重入以高比例兌換出BugerSwap的WBNB代幣,實現從DeFi平臺盜取資產。
參數校驗攻擊:參數檢驗攻擊主要是分為函數權限設置問題和未正確校驗傳入參數2種[41],在DeFi與Token交互中雙方都可能會出現的問題,函數權限設置問題通常是由于合約開發者的疏忽導致,很多內部函數在運行時會直接更改合約存儲數據,而不進行相關的檢測,如果這部分函數的可見性被設置為public或者external,將產生重大的漏洞。未正確校驗傳入參數問題可能導致函數按照不可預想的結果執行,從而導致攻擊者可以通過事先設計好的交易順序來獲利。比如permit()函數如果未做零地址校驗,且對應代幣的銷毀代幣方式是將代幣發送至零地址,那么攻擊者可以轉移零地址中被銷毀的代幣。還例如在一些智能合約中會存在freeze()函數,用于凍結賬戶,但是在進行代幣轉賬時,只驗證了來源賬戶,未對轉入地址進行驗證導致轉入的代幣無法提出,還需注意的有transferFrom()要額外驗證from地址。黑名單驗證也有類似問題。
截至2022年3月,參數校驗攻擊DeFi中造成了大量的損失,MonoX Finance[42]、DeFi Saver[43]、Superfluid[44]等平臺均遭受攻擊,至少造成了4 400萬美元的損失。
2021年11月30日,DeFi 平臺 MonoX Finance 遭遇攻擊,本次攻擊中約合1 820萬美元的WETH和1 050萬美元的 MATIC 被盜,其他被盜Token包括WBTC、LINK、GHST、DUCK、MIM和IMX,損失共計約3 100萬美元[42]。本次攻擊造成的漏洞主要有2個,第一個是利用了 swap 合約里沒有對池中傳入和傳出代幣作檢查,從而利用價格更新機制的問題;第二個是移除流動性的函數未對調用者進行檢測,任何用戶都可以移除提供者的流動性,使得攻擊者傳入和傳出代幣相同時,價格被二次計算并覆蓋,導致代幣價格不斷被推高,并以此代幣換出池中的其他代幣來獲利。攻擊過程如圖6所示。
(2)黑客移除了pool內全部流動性,防止攻擊受到影響或者價格波動被檢測到,此處沒有用戶的權限進行校驗,使得任何人都可以去除流動性;
(3)黑客添加了自己控制的流動性,便于兌換操作;
(4)黑客通過重復MONO兌換MONO的操作,不斷抬高MONO價格,此處沒有進行對換入換出的代幣地址進行校驗,可以同種代幣進行交換;
(5)利用已經被抬高的MONO兌換pool內其他資產達到獲利目的。
權限攻擊:DeFi權限攻擊來源于用戶向平臺批準ERC20代幣的無限授權,無限授權會導致攻擊者有機會可以通過存在有漏洞的DeFi合約盜取用戶所有該類ERC20代幣,而不僅是盜取用戶存在DeFi的代幣資產。大多數DeFi應用中,都會默認要求用戶賦予所存入代幣的無限權限。原因在于,DeFi應用集合了各類資產代幣,其中最為廣泛的是使用以太坊ERC20標準的代幣。而在ERC20代幣中,如果用戶要進行資產轉出前,都會檢查調用者的權限大小和交易資產數額是否匹配,即需要用戶批準相應轉賬的權限[45]。通過無限權限批準,可以讓用戶的DeFi交易變得更簡便,同時也降低了每次賦權所需的交易費用。不過無限授權的形式卻會帶來極大的風險。
已有利用無限權限的攻擊中,大多數與其他攻擊結合,呈現一種復合攻擊的形式。權限攻擊可以和常見漏洞攻擊結合,攻擊者如果能利用平臺漏洞進行代幣盜取時,且恰好具有無限授權,則可以將用戶的該類資產全部盜取。同時,在一些遭受釣魚攻擊的DeFi以及一些惡意DeFi項目中,攻擊者都會通過無限授權的方式來盜取用戶更多的代幣,造成更大的損失。權限攻擊擴大了DeFi項目遭受的損失,截至2021年12月,Furucomb[46]平臺被黑客利用漏洞的同時,使用權限攻擊造成了巨量損失,UniCat等惡意DeFi平臺則使用權限攻擊增加騙取的資產[47],權限攻擊至少造成了約4 000萬美元的損失。
權限攻擊的關鍵在于用戶向DeFi平臺的無限授權,而這一現象在DeFi應用中是普遍默認的。同時,權限攻擊由于其復合形式的特性,權限攻擊還需要DeFi本身具有可攻擊的漏洞。如果DeFi本身沒有安全問題,則無限授權的方式是有利于用戶的使用體驗的,因此,更多的DeFi項目正在尋找便利和安全兩者的一個平衡點。
2021年2月28日,DeFi項目Furucombo發生了權限攻擊,造成超過1 400萬美元的損失[46]。該平臺主要使用代理合約來完成各類資產的交換,用戶存入資產后,使用平臺建立的代理合約進行各類金融活動。由于該平臺要求用戶進行無限授權,而同時平臺出現了一個驗證漏洞,最終導致了攻擊,攻擊過程如圖7所示。
(1)攻擊者調用函數,將官方代理合約AaveV2Proxy地址作為參數傳入,請求使用AaveV2模式交易資產;
(2)Furucombo收到請求后,需要檢查參數地址有效性,通過后會使用Delegatecall指令調用,且參數可由用戶傳入,導致用戶可以決定具體的函數調用[48];
(3)攻擊者傳入數據直接調用AaveV2Proxy地址上的初始化函數,該初始化函數只能調用一次,且應該由DeFi官方進行第一次調用,但由于Furucombo未進行初始化,攻擊者因此通過該函數將代理合約地址進行了修改;
(4)由于Delegatecall指令[49]中,執行環境為調用者的運行環境,所以攻擊者通過初始化函數將Proxy層關于Aave資產的代理合約修改為攻擊者惡意合約;
(5)由于Furucombo平臺要求用戶無限授權,而現在攻擊者惡意合約作為平臺官方代理合約,擁有關于Aave資產的全部權限,可以直接盜取用戶的資產(包括用戶未存入Furucombo平臺的Aave資產)。
前端攻擊:DeFi架構中,通過構建應用程序來與區塊鏈上的DeFi智能合約進行交互[13]。大多數的DeFi平臺使用基于Web網絡瀏覽器的前端界面,通過簡潔的圖形化操作替代復雜的代碼來完成各類指令,極大地提高了用戶的使用體驗及便利性。但是由于使用了常規瀏覽器的前端界面,使DeFi應用面臨了傳統Web網絡攻擊的威脅,包括XSS(cross-site scripting) 跨站腳本攻擊、CSRF(cross-site request forgery)跨站請求偽造攻擊、網絡劫持攻擊和網絡釣魚。攻擊者通過各類Web攻擊,控制DeFi的前端網站,在用戶進行交易時,將用戶的交易對象,從DeFi應用的官方智能合約替換為攻擊者的惡意合約,以此盜取資產。
DeFi中的前端攻擊主要目的分為2種,第一種是誘導用戶調用攻擊者的惡意合約,第二種是直接竊取用戶的私鑰。2種方式中,第一種更為常見,攻擊者通過尋找前端代碼的漏洞或者使用釣魚網站,將DeFi前端生成的與官方智能合約交互的交易替換為與惡意合約交互,并誘導用戶批準,以此獲取交易。前端攻擊造成的損失往往是巨大的,用戶在不知情的情況下可能會將代幣的權限直接授予惡意合約,導致攻擊者可以盜取用戶的所有資產,而不僅限于盜取該平臺上的資產。BadgerDAO[50]以及SushiSwap旗下的MISO應用[51]等都遭受了前端攻擊,造成了巨額損失。截至2021年12月,前端攻擊至少造成了約1.5億美元的損失。
前端攻擊造成的原因較多,關鍵在于DeFi應用實際上并未完全的去中心化。DeFi上的協議(即智能合約)實現了去中心化,但是DeFi應用并不能真空運行,仍然需要靠中心化的前端網站和應用程序提供支持,使用中心化的域名、網關進行訪問,這就給攻擊者提供了使用傳統網絡攻擊方法獲利的機會。
2021年12月2日,DeFi應用BadgerDAO收到前端攻擊,通過劫持BadgerDAO的前端,誘導用戶調用攻擊者惡意合約,導致了大量的資產被盜。BadgerDAO應用使用Cloudfare服務作為代理轉發,生成交易后請求用戶的簽署,以此完成交易。在1.1中,介紹了DeFi應用使用web3與區塊鏈智能合約交互的形式(中間通過網橋,將交易包發送給用戶的錢包應用請求簽名,如果用戶同意則交易包上鏈,完成交易。)詳細攻擊過程如圖8所示。
(1)攻擊者利用了Badger開發人員遺漏的受損API密鑰,利用了前端的一個漏洞,將惡意腳本注入到前端代碼;
(2)用戶在BadgerDAO網頁嘗試交易時,被劫持的前端生成與攻擊者惡意合約交互的交易包;
(3)通過網橋轉發至用戶錢包應用,要求用戶授予權限,并請求用戶簽署批準;
(4)用戶一旦同意,攻擊者則獲取了相關資產的代理權限,通過與惡意合約交易,盜取用戶的相關所有資產。
聚合器攻擊:DeFi聚合器是在DeFi快速發展到一定規模后才提出的概念。聚合器是DeFi應用的進一步延伸,將不同的DeFi應用在同一個平臺上進行整合,通過一定的算法和規則,嘗試獲取更大的利益。但是,正是因為需要去聚合各種不同的DeFi應用,在各式的DeFi協議中間尋找更優的利潤,聚合器不可避免地會出現各類的攻擊,這類攻擊通過尋找聚合器中因為協議兼容性出現的漏洞進行攻擊,造成了大量損失。截至2021年12月,PancakeBunny[52]、PolyYeld Finance[53]等平臺均遭受了攻擊,造成了約4 500萬美元的資產損失。聚合器攻擊發生在DeFi的聚合層,主要的形式是在不同DeFi協議之間交易時,聚合器會鑄造代幣獎勵用戶,攻擊者利用聚合器漏洞,拉高獎勵代幣的數量或者價值,以此賺取利益。分析其原因,主要是因為聚合層在提供金融服務時,需要在各類的協議之間交互,而不同的協議因為擁有各自的標準,極易出現標準不兼容的情況,如果開發人員未妥善處理協議間的不兼容性,就會導致出現漏洞,最終造成攻擊。2021年7月,聚合器PancakeBunny遭受攻擊,造成約4 000萬美元的資產損失[52]。Pancake允許用戶抵押流動性代幣以此獲利,在用戶獲利時收取一定的費用,并根據收取費用計算一定數量的平臺原生代幣返回給用戶。用戶在該平臺抵押流動性代幣后,可以獲取一定的收益,但是由于平臺在計算用戶收益時,使用了其他DeFi的協議獲取代幣價格用于用戶收益計算,導致攻擊者利用此漏洞非法獲取了大量收益。攻擊具體過程如圖9所示。
(1)攻擊者在AAVE閃電貸借出USDT/USDC/WETH代幣。
(2)攻擊者將借取的代幣在DeFi平臺SushiSwap中添加流動性獲得SLP。
(3)攻擊者將獲取的SLP小部分抵押到VaultSushiFlipToFlip合約。
(4)剩余的大部分SLP直接轉至MiniChefV2合約。
(5)VaultSushiFlipToFlip合約記錄用戶的抵押數量,并轉至MiniChefV2合約。
(6)攻擊者調用VaultSushiFlipToFliph合約的WithdrawAll()函數取出抵押所獲取收益,此時,合約會進行鑄幣,而鑄幣的PolyBunny幣由用戶抵押品獎勵數量和抵押品官方價格共同決定獎勵幣數量。
(7)聚合器的預言機未被修改,但是抵押品數量被攻擊者操縱。正常的抵押品獎勵數量由VaultSushiFlipToFliph合約中計算抵押的占比,再乘以MiniChefV2合約中抵押品總量算出。但是攻擊者繞過合約記錄,直接轉賬。導致攻擊者抵押品在合約中記錄的占比正常,但乘以MiniChefV2合約中極大的抵押品總數,導致了一個超量的獎勵數。
(8)攻擊者獲取預言機正常價格計算出的獎勵代幣(如果攻擊者正常抵押,此時獎勵代幣價值應該偏低),并在其他平臺賣出此獎勵代幣后歸還閃電貸,以此獲利。
本節根據每類攻擊的特性總結了相對應的檢測與防御方法,表1總結了DeFi攻擊的攻擊方式以及攻擊特征。

表1 DeFi攻擊方式以及攻擊特征Table 1 DeFi attack methods and characteristics
結算層中根據是否依賴交易來進行分類,分為了預言機攻擊和三明治攻擊。表2總結了結算層中攻擊的檢測與防御。

表2 結算層中攻擊的檢測與防御Table 2 Detection and defense of settlement layer attacks
預言機攻擊的檢測與防御:為了檢測套利,并識別出套利攻擊行為,現有方法主要是針對DeFi的語義進行檢測。Wu等[54]提出了一種基于恢復的DeFi語義檢測攻擊的方法,檢測過程如下:
(1)將收集到的以太坊原始交易構造成現金流樹(CFT),CFT用于將原始交易轉換為Token轉移,對該樹進行剪枝操作,可以減少絕大部分無用的交互。
(2)定義DeFi的行為,并從CFT中提升DeFi語義。具體行為如下,轉移:指將Token(資產)從一個地址(發送方)轉移到另一地址(接收方)。此外,在ERC20Token標準定義中,當將支出者字段設置為零地址時,這意味著進行Token挖掘,即將Token直接存入地址(收件人)中。同樣,如果收件人設置為零地址,則表示Token正在燃燒;流動性挖礦和流動性取消:為了獲得更多的流動性,DeFi應用程序發行了LPToken以激勵用戶提供流動性(存款加密貨幣),這被稱為流動性挖掘。此外,流動性提供者可以使用LPToken作為證書贖回加密貨幣,這被稱為流動性取消。因此,流動性挖掘包括2個部分,即存放用戶的流動性和鑄造DeFi應用的LPToken。取消流動性包括燃燒LPToken和贖回已存入的流動性;交易:在正常情況下,交易包括2次代幣轉移。通過流動資金池來交換Token通過2個啟發式準則來進行語義的恢復,如果CFT樹中相鄰的2個葉子符合以上定義的DeFi行為條件,則將它們合并為DeFi高級操作;如果在相鄰的2片葉子中存在轉移鏈,則將其中一個并入另一個。
(3)通過將恢復的語義與攻擊模式進行匹配來檢測是否有價格操縱攻擊。
Wu等[54]的工作所覆蓋的DeFi種類并不全面。本文提出一種方法,通過使用一個去中心化的預言機網絡來尋找反映廣泛市場覆蓋的匯率的真實數值,這樣可以覆蓋到所有的DeFi應用。DEX作為交易所是去中心化的,但作為價格參考信息它是中心化的。為了防止收到惡意用戶干擾,預言機應收集所有中心化和去中心化交易所的價格,按交易量加權并去除異常值再按照時間同步更新,確保提供給智能合約的數據可靠、可信、抗干擾。提供報價更新的同時維護、調整AMM的權重,確保內部匯率與外部市場價格保持匹配,并通過驗證機制、異常報警機制等有效攔截攻擊者對價格、匯率的操縱,防止套利空間的產生。
三明治攻擊的檢測與防御:Qin等[19]根據三明治攻擊的特征設定一些啟發式規則來檢測三明治攻擊,但是關于防范三明治攻擊并沒有提及。本文根據三明治攻擊的本質,從如何避免搶先交易方面提出2種解決方法:①使用零知識證明技術來將每筆交易的信息都加密隱藏起來,讓機器人無從下手。當前的以太坊交易執行機制是通過 Gas 競爭來完成的,即誰出的 Gas 費高,礦工就優先打包誰的交易,如果繞過這種機制,把交易發給礦工讓其直接打包,就杜絕了搶跑機器人在中途攻擊的可能性。通過構建交易者和礦工之間的橋梁,交易者可以通過打賞的形式讓礦工直接打包自己的交易,這就避免了被 搶先交易的可能。②在AMM機制下,大額交易產生過大的價格滑點,是搶先交易的利潤空間。可以改變AMM機制的計算函數曲線,另外采用預言機對交易資產進行報價來降低滑點
資產層的攻擊主要是利用了Token的特殊性來與DeFi進行交互,從而造成攻擊。表3總結了資產層中攻擊的檢測與防御。

表3 資產層中攻擊的檢測與防御Table 3 Detection and defense of asset layer attacks
不一致攻擊的檢測與防御:現有分析工具可以檢查漏洞智能合約中的關系,但很難檢測到DeFi平臺出現的不一致行為,因為這類檢測工具專注于代碼漏洞而不是設計缺陷,比如重入漏洞、整數溢出、沒有檢查的call調用等。案例中的DeFi應用沒有檢查代幣是否實際收到,導致假存款。實際上,這是一個設計缺陷而不是代碼漏洞。
本文提出一種基于模式匹配的方式來檢測不一致攻擊。檢測原理如圖10所示。
(1)通過啟發式規則從字節碼中篩選出DeFi以及Token合約來獲取,啟發式規則1是字節碼符合ERC-20和ERC-777標準的Token合約,以及字節碼中含有DeFi的特殊函數,比如swap(),deposit(),withdraw();
(2)通過符號執行來識別出DeFi和Token的核心數據結構的字節碼序列;
(3)拿到M、N后通過以太坊客戶端Geth的全節點同步獲取每筆交易中的Bm,Bn;
(4)通過啟發式規則2來比對交易行為,啟發式規則2是在一筆完整的交易路徑中改變了M、N并且Bm、Bn的不匹配則被判定為不一致。
DeFi上的智能合約在處理兌換邏輯過程中,需要檢查進行兌換的2種代幣在兌換過程中合約是否收到了相應的代幣,保證代幣的余額正確記錄,不能只是依賴 ERC20等Token標準中關于轉賬的返回值,從而避免因代幣余額記錄錯誤導致的問題。
協議層中的攻擊根據DeFi智能合約的漏洞來進行分類,分為重入攻擊和參數校驗攻擊。表4總結了協議層中攻擊的檢測與防御。

表4 協議層中攻擊的檢測與防御Table 4 Detection and defense of protocol layer attacks
重入攻擊的檢測與防御:DeFi重入攻擊來源于智能合約的重入漏洞,現有檢測防御方法都是在智能合約漏洞的基礎上進行的:①使用如Oyente,ZEUS,Vandal,Ethir等[28]檢測工具對智能合約代碼進行檢測,挖掘可能存在的重入漏洞。使用工具分析的方法存在誤報率高且效率較低的問題。②增加修飾器,對關鍵變量進行加鎖操作。通過限制關鍵操作,防止在攻擊者通過外部調用,使合約中的關鍵函數被執行多次。
本文基于DeFi平臺重入攻擊的特點,提出新的解決方法。首先分析DeFi平臺重入攻擊需要的3個條件:①調用關鍵函數前是否有修飾器或者變量用于限制關鍵操作;②關鍵函數中的轉賬操作是否在修改平臺資產記錄操作之前進行;③平臺是否允許使用用戶自定義的資產合約。
基于此條件,解決方法如下:①優化現有檢測工具。修改漏洞檢測工具檢查條件,可以預先定義DeFi平臺的各類關鍵操作和變量,檢測工具需要檢測是否有修飾器限制重入路徑,且檢測工具只有在檢測到外部調用后又修改了關鍵函數才算作DeFi智能合約的重入漏洞;②平臺可以設置外部代幣合約白名單,只有符合ERC標準的外部代幣合約才加入白名單。白名單內的合約可以正常建立流動池,對于不在白名單內的外部合約調用,應該保證不對DeFi平臺的關鍵變量進行修改。
參數校驗攻擊的檢測與防御:此類攻擊多數都是因為合約代碼本身的設計缺陷,現有的檢測工具smartcheck[55]可以對返回值以及交互中的數據沒有進行校驗的智能合約進行檢測,但是存在檢測效率低以及漏洞檢測不完全等問題。
為了防止DiFi的參數校驗攻擊,本文提出如下解決方案:①所在合約部署的主網之前做好外部審計,另外可以通過一些測試套件的樣本作為參考的起點,如chainlink的套件倉庫[56],來提供一種檢測思路。②所有由用戶調用的函數都要對傳入的參數進行合理性檢查,避免參數使用不合理導致的異常。在使用具有限制的函數時,要驗證傳入不合要求的參數是否會繞過限制執行,或者有其他類似的函數可以進行繞過。③對鑄幣、權限更改等敏感函數做嚴格的權限檢查,并根據業務邏輯確定這類函數的可見性。
應用層的攻擊根據是否為傳統的Web攻擊進行分類,分為了權限攻擊和前端攻擊。表5總結了應用層中攻擊的檢測與防御。

表5 應用層中攻擊的檢測與防御Table 5 Detection and defense of application layer attacks
權限攻擊的檢測與防御:現有檢測防御方法有:①使用權限檢測工具如Token Allowance Checker[57]、smart contract allowance checker[58]等工具檢測用戶在各平臺的授權狀況,并可以對授權行為進行撤銷或修改。這類工具通過重放以太坊交易的模式,檢測用戶在代幣資產上的Approve()函數調用情況,獲取用戶授權額度,并通過重新調用代幣資產的權限函數修改授權額度,但該方法只能減少用戶資產被盜的風險,不能解決權限攻擊問題。②DeFi平臺限定授權額度。每次交易時,用戶只向DeFi平臺授權相應額度的權限,而不是無限授權的方式。如Zapper等[59]DeFi平臺都可以讓用戶自由選擇是否要限制授權。但每次授權時,平臺都需要額外發起一筆交易,帶來了新的費用,給用戶帶來了不便。
為了防止DeFi的權限攻擊,平衡便利性和安全性之間的關系,本文提供多種方案解決DeFi平臺的授權問題:①使用熱錢包。如果要使用DeFi平臺的無限授權功能,可以借助熱錢包,將需要在該平臺的交易資產單獨劃分到另一個獨立地址。這樣,即使遭受安全攻擊,也只有該部分的資產收到威脅,降低了用戶使用無限授權功能的風險。②使用代理合約。該方法較為復雜,且有一定的技術門檻,要求用戶自己編寫一個代理合約,使用此代理合約直接與DeFi平臺合約進行交互。用戶向代理合約可以提交無限授權,而代理合約與DeFi平臺交互時,會自動批準單筆交易所需要的額度,再執行交換交易,并由代理合約接收代幣。③使用EIP-2612標準。在該標準下,用戶可以通過發送消息的方式來賦予平臺每筆交易權限,而不是發送交易的方式。因此,可以節約每次賦權所需的額外費用。但由于該標準下的開發生態一般,需要更多的DeFi項目逐步遷移使用該標準。
前端攻擊的檢測與防御:由于前端攻擊較多來源于傳統網絡攻擊方式,現有的解決方法有:①直接使用Web3官方接口與DeFi智能合約交互。但該方法需要用戶自己編寫代碼,具有較高的門檻,用戶體驗差,較少被使用。②加強Web網絡安全防御。如使用安全套件編寫前端代碼,以及僅執行安全域名下的腳本等方法。③Uniswap提出使用IPFS(InterPlanetary File System)[60],即星際文件系統技術,將前端代碼分割到網絡節點中,使用IPFS服務在用戶訪問時再獲取前端代碼,防止前端被劫持。④DeFi應用Liquity使用ICP[61]服務,通過ICP的DNS服務器為每個域名指定各自的web文件,以此將域名和前端內容綁定,同時記錄前端代碼修改記錄,防止前端頁面被劫持。
針對DeFi應用的特點,本文提出以下解決方案:為了保證DeFi應用前端沒有更改,防止攻擊者欺騙用戶與惡意合約的交易,將DeFi官方智能合約地址與前端應用捆綁,并將該捆綁包進行簽名,然后用戶在使用錢包應用簽署交易時,錢包應用會檢查前端應用程序簽名,若接收到的前端包的計算簽名與簽名地址不匹配,則會顯示警告消息,并建議用戶不要與應用程序交互,通過方法減少釣魚,劫持等前端攻擊的風險。
聚合層中的攻擊主要是聚合器合約在計算其他DeFi項目的數據上面設計不合理。表6總結了聚合層中攻擊的檢測與防御。

表6 聚合層中攻擊的檢測與防御Table 6 Detection and defense of aggregation layer attack
聚合器攻擊的檢測與防御:由于DeFi聚合器發展時間較短,在DeFi應用興起后,才有對各種DeFi應用進行綜合整理的聚合平臺,導致缺少專門針對聚合層攻擊的檢測和防御方法。本文在其他架構層的檢測防御方法基礎上,提出以下新的方案:①加強兼容性協議審計,聚合器平臺應對需要交互的DeFi協議和相關接口進行嚴格審計。審計內容主要是函數或交互接口,以及不同協議的價格或收益計算方法等。②使用延時的價格預測機制,防止聚合器在不同協議間交互時,平臺的價格機制被惡意用戶操控。使用延遲調整的機制來減少大額交易對后續交易價格的影響,可以有效防止搶先交易攻擊。比如當發生兌換交易時,交易池價格不會立刻調整成真實價格,而是在若干分鐘內,緩慢的趨向真實價格。③在涉及到使用其他DeFi合約進行價格計算時,可以使用多個DeFi合約價格進行綜合驗算,減小因為一個DeFi協議價格被操控造成的風險。
隨著去中心化金融市場的發展,DeFi風險成為焦點,從之前的重入攻擊泛濫,到現在的閃電貸攻擊,都是因為加密資產可以以重復抵押的方式在DeFi中進行交換,這樣項目方會面臨著組合性攻擊。研究者未來可以針對現有的攻擊而形成新的檢測攻擊的策略。
如今看到的大多數礦工可提取價值(MEV: Miner Extractable Value) 形式都不是來自礦工本身,而是來自第三方機器人。這些機器人通過改變他們支付給礦工的交易費用來操縱他們在一個區塊內的交易順序。這意味著即使礦工根據最高 gas 價格訂購交易,也可以提取 MEV。然而,MEV 可以被視為礦工可以提取多少價值的上限,因為礦工可以利用他們的特權地位進行搶先交易中從而獲利。 因此,如何解決公平的排序服務是未來的挑戰之一。
目前大量的工作都用來分析智能合約的現有漏洞,當前的檢測分為動態和靜態檢測2種,這2種并沒有關注智能合約的可組合性,使得這些工具無法推斷因智能合約外部變化而出現問題的場景,比如預言機返回的價格突然改變以及對于復雜場景交互下的路徑爆炸問題。此外,大多數工具很少對智能合約的語義屬性進行推理,例如特定執行路徑如何影響 ERC-20 代幣余額未來這些領域的改進將使審計人員和開發人員能夠更有信心地分析和部署他們的合同,從而減少技術安全漏洞的數量。
DeFi的攻擊方式多種多樣,攻擊與攻擊之間是有耦合性的,單獨的給每種攻擊方式進行分類只會體現每個攻擊之間的差異性。本文以DeFi的分層架構將DeFi的攻擊進行分類,分成了5大類:聚合層的攻擊、應用層的攻擊、協議層的攻擊、資產層的攻擊與結算層的攻擊.其中聚合攻擊屬于聚合層;應用層攻擊分為權限攻擊和前端攻擊;協議層分為重入攻擊和參數校驗攻擊;不一致攻擊屬于資產層;結算層分為三明治攻擊和預言機攻擊。 本文在對攻擊進行分類的同時,還介紹了對各類型攻擊的檢測與防御方法。通過對DeFi攻擊進行層次分類有助于各項目方在實現底層算法時進行審核,從而促進DeFi平臺的穩定發展。