注:5月,DeFi安全事故頻發,據統計,約有15個項目遭到黑客攻擊,包括Belt Finance、BurgerSwap、Julswap、Merlin、AutoShark Finance、Bogged Finance、Pancake Bunnny、Venus、FinNexus、bEarn Fi 、 EOS Nation、xToken、Rari Capital、Value DeFi、Spartan,涉及資金損失近3億美元。值得注意的是,在如此多的攻擊中,BSC上的DeFi項目貌似成了黑客的集中攻擊點,而閃電貸則是黑客主要的攻擊手段。 5月30日,幣安智能鏈(BSC)官方還針對頻發的安全事件發布推特稱:最近已經接連發生超過8起針對BSC鏈上項目的閃電貸攻擊,我們認為現在有一個有組織的黑客團隊盯上了BSC。我們呼籲所有DApp注意防範並採取防治措施。

此前,BSC還與區塊鏈安全公司CertiK舉辦了有關DeFi風險的直播活動,本文將對其進行回顧以幫助了解DeFi中的4大安全風險。

自9個月前推出以來,幣安智能鏈(BSC)已成為全球領先的DeFi平台之一。如今,有超過600個項目在BSC上每天產生數千萬的交易。

然而,巨大的成功也伴隨著巨大的風險。黑客利用在不同層面暴露出來的漏洞,越發頻繁地進行了漏洞攻擊。這些漏洞可以分為4個大類,我們將對這些漏洞進行介紹,以使讀者更好地了解與DeFi有關的安全風險。

1

管理密鑰的洩露

在智能合約中,修改器限制了允許調用某些功能的人選。這些功能通常是用於修改合約配置或管理智能合約中持有的資金的特權功能。如果攻擊者獲取了管理密鑰,他們就可以完全控制智能合約,並竊取用戶資金。

密鑰如何被洩露?

第一種可能性是通過計算機木馬。攻擊者可以使用木馬程序來竊取存儲在計算機上的私鑰。此外,攻擊者也可以進行網絡釣魚攻擊,欺騙用戶將私鑰發送給攻擊者。對於DeFi項目而言,有時幾個項目利益相關者將共享一個私鑰。這就使得惡意的內部人員可以使用該密鑰調用管理功能,並將項目的代幣轉移到他們自己的錢包地址。

例如,2021年3月5日,PAID網絡就遭受了因私鑰管理不善而引發的"鑄幣"攻擊。 PAID代幣合約是置於一個可升級的代理之後的,也就是說,合約可以被修改和替換。代理人的私鑰被用來交換部署在代理背後的代碼,其中包含攻擊過程中使用的銷毀和鑄造功能的惡意代碼。攻擊者銷毀了6000萬現有的PAID代幣,然後為自己鑄造了5900萬代幣。瞬時,PAID代幣價格從2.8美元跌至0.3美元,因為2,501,203個PAID代幣在Uniswap上遭到拋售,總價約為2,040ETH。攻擊者很可能是通過網絡釣魚攻擊入侵了管理員的機器。

2021年4月19日,298萬個EASY代幣從EasyFi官方錢包轉移到幾個未知的錢包,這些代幣的當時價值為7500萬美元。

EasyFi創始人聲稱,黑客攻擊的原因是"對創始人的機器/Metamask進行有針對性的攻擊,以獲取管理密鑰"。

項目應該安全地存儲私鑰,而不應該在PC設備上以純文本形式存儲管理密鑰,或依賴MetaMask熱錢包。我們建議使用硬件錢包創建一個多簽(Multisig)賬戶。例如,對於一個五人團隊,每個團隊成員都應該有自己的硬件錢包。當他們試圖發送特權交易時,應該要求五個團隊成員中至少有三個人簽署該交易,從而防止攻擊者在獲得其中一個密鑰時就能夠調用任何特權功能。

對於代幣合約來說,如果可能的話,應避免允許鑄造新的代幣。但如果沒有這個可能,也要盡量使用DAO合約或時間鎖合約作為所有者,而不是EOA賬戶(外部自有賬戶)。

2

編碼錯誤

DeFi中,一些漏洞的複雜程度很高,但情況並不總是如此。

有時,智能合約中的一個小編碼錯誤就會變成一場大災難,導致價值數百萬的資產受到損害。

一些常見的編碼錯誤包括:

函數允許(修改)拼寫錯誤數字錯誤缺少/不正確的變量值賦值

一個值得注意的例子是Uranium Finance的黑客事件,該事件發生在一個未經審計的合約上,最終導致了5700萬美元的損失。這是由於在比較交換前後池中兩個代幣餘額的乘積時,使用了不一致的乘數,使得攻擊者可以從資金池中換出大部分代幣,而成本只有1 Wei。

Uranium Finance代碼:

正確代碼:

另一個例子是來自於Value DeFi的黑客事件,該事件導致了1000萬美元的損失。據悉,合約中的初始化函數漏掉了"initialized = true",也就是說,任何人都可以重新初始化資金池並將自己設置為操作員。 2021年5月5日,攻擊者重新初始化了資金池,並將操作員的角色設置為了自己,然後使用"governanceRecoverUnsupported() "函數耗盡了池中的質押代幣。

Value DeFi中的漏洞代碼:

修復代碼:

上述兩個例子都是由簡單的編碼錯誤引起的,而且都造成了重大損失。但是,這些類型的錯誤完全可以通過適當的同行評審、單元測試和安全審計來輕鬆消除。

3

閃電貸和價格操縱

閃電貸是一種從Aave或DyDx等協議中藉入大量資金以獲得一定費用的方式。其要求是,貸款需要在同一交易中歸還。如果沒有,貸款就會被退回。這些貸款的一般利用流程如下:

使用閃電貸借入大量的代幣A在DEX上將代幣A換成代幣B(降低代幣A的價格,大幅提高代幣B的價格)利用一個依賴A/B交易對價格的DeFi項目償還閃電貸

近日,PancakeBunny就遭遇閃電貸攻擊,攻擊者共獲得了114K BNB和697K Bunny(當時約為4000萬美金)。攻擊者利用閃電貸操縱了PancakeSwap USDT-BNB V1池的價格,導致大量的BNB流入BNB-Bunny池,從而使得該合約能夠以虛高的BNB對Bunny的價格鑄造Bunny。 PancakeBunny則使用以下函數來計算Bunny價格:

隨著大量的BNB流入BNB-Bunny池,變量"reserve0 "變得很大。最終,由於價格計算存在缺陷,攻擊者共獲得了697K Bunny。

此外,遭受過閃電貸攻擊的受害者還有很多,其中也不乏DeFi領域的一些知名項目,包括PancakeBunny($4000萬資金損失),Harvest Finance($2500萬資金損失),Yearn($1100萬資金損失), Value DeFi($700萬資金損失),AKROPOLIS($200萬資金損失),Cheese Bank,XToken,bZx等等。

如果一個項目需要價格參考,它也需要小心,因為閃電貸可能會操縱價格。為了防止這種情況發生,我們建議使用時間加權平均價格(TWAP)。 TWAP代表了一個代幣在特定時間範圍內的平均價格。如果攻擊者在一個區塊中操縱價格,它是不會影響平均價格的。另一個建議是,使用一個可靠的鏈上價格預言機,如Chainlink。

4

濫用第三方協議和商業邏輯錯誤

許多項目,如PancakeSwap和UniSwap,是獨立運行的。在PancakeSwap中,用戶可以為收益耕種代幣提供流動性,或者用一種代幣交換另一種代幣。用戶不與其他第三方協議互動。

其他項目,如Yearn Finance,運作方式則不同。 Yearn Finance收集用戶資金並將其投入第三方合約。它通過投資用戶的代幣獲得收益。另一種情況是,一些項目從其他項目"借用"代碼。例如,PancakeSwap就引用了UniSwap的代碼。在這兩種情況下,如果第三方代碼的源頭有漏洞,那麼使用該代碼的項目也會出現漏洞。如果一個項目的開發者不熟悉他們所使用的第三方代碼,那麼一旦漏洞被利用,就可能釀成大問題。

2021年5月8日,Value DeFi vSwap AMM的非50/50資金池被人利用,總共損失了約1100萬美元。為了實現非50/50資金池,Value DeFi從屬於Bancor協議的"BancorFormula.sol "複製了"power() "函數。在power()函數的描述中,寫到這個函數不支持"_baseN <_baseD "的情況。然而,不幸的是,Value DeFi就是這樣使用這個函數的。攻擊者通過向該函數發送了一個精心製作的有效載荷,將少量的代幣A交換成了代幣B。

Value DeFi 代碼:

在DeFi領域中還有許多其他類似的案例。 2021年5月8日,一名攻擊者通過利用集成在Rari Capital V2中的Alpha Homora V1的ibETH池(銀行合約)的功能,從Rari Capital Ethereum池中抽走了大約2600個ETH。 Bearn Finance則在其"BvaultsStrategy "合約中允許使用BUSD的提款金額來提取ibBUSD,使得攻擊者從池中移除了10,859,319 BUSD。

相較於前幾種問題,此類漏洞更難發現,在使用與任何第三方協議通信的項目時,都應該謹慎行事。我們不建議盲目地複制和部署開發人員不了解的代碼。開發者應該在整合第三方協議並將其部署到生產中之前,充分了解第三方協議以及分叉項目的工作方式。此外,我們還建議開發者先在測試網上部署他們的項目,並進行測試運行,以檢查交易記錄的異常情況。

作為終端用戶,在使用個人資產與項目進行互動之前,有時很難找出項目的詳細信息。這時,便可以藉助區塊鏈安全公司的審計報告,來瀏覽項目的安全性。

總之,創建DeFi項目可以很有趣,但被黑客攻擊就不好了。

要使一個項目100%安全是困難的,但我們可以盡可能地進行保護:

保持管理密鑰的安全避免簡單的編碼錯誤使用可靠的鏈上價格饋送接受安全審計並做好審計準備