注:本文出自《How to DeFi:Advanced》第Ⅳ部分第15章。作者包括Lucius Fang, Benjamin Hor, Erina Azmi以及Khor Win Win。

《How to DeFi:Advanced》是CoinGecko出版的DeFi經典讀物《How to DeFi》的進階版。此書可通過官網或亞馬遜購買,也可通過累積CoinGecko 積分換購,要求積分為800個。

為了能更好的傳播DeFi相關知識,巴比特將持續對全書進行翻譯。以下是《第15章:DeFi的漏洞利用》的全部編譯內容。

探索DeFi是有風險的;智能合約黑客攻擊也一直在發生。僅2020年,就有至少12次高調的DeFi黑客攻擊,從DeFi協議中抽走了不少於1.21億美元的資金。

來源:CoinGecko 2020年度報告

沒有人可以完全預測已部署的智能合約會發生什麼,即使是最好的智能合約審計師。由於智能合約上有數十億美元的資金,所以可以肯定的是,最聰明的黑客正在不斷尋找利用安全弱點並從中獲利。

DeFi的巨大風險在於,隨著項目利用DeFi的可組合性並在其基礎上進行構建,DeFi應用的複雜性成倍增加,使智能合約審計人員更難發現弱點。 DeFi應用程序開發人員必須確保網絡安全審計人員不斷檢查他們的代碼,以減少任何利用的可能性,因為錯誤的後果將是巨大的經濟損失。

在本章中,我們將探討黑客攻擊的原因、閃電貸款、減少黑客攻擊損失的潛在解決方案,以及個人避免在DeFi漏洞中損失資金的一些提示。

漏洞的原因

下面我們將闡述一些常見的漏洞原因,但該清單並不詳盡,不代表所有原因。

1. 經濟剝削/閃電貸

閃電貸允許用戶利用幾乎無限的資本來進行金融交易,只要藉款人在同一交易中償還貸款即可。這是一個強大的工具,使人能夠操縱過去受資本要求限制的經濟攻擊。有了閃電貸,擁有正確的策略就是利用機會的唯一要求。

幾乎所有的DeFi黑客都利用了閃電貸。我們將在下一節對其進行更詳細的研究。

2. 生產文化中的代碼

由Yearn Finance的創始人Andre Cronje帶頭,許多DeFi項目都遵循生產中測試的精神以加快產品開發的步伐,而不是最大限度地提高安全性和測試。因為對每個版本進行審計將大大延長將任何產品更新推向市場所需的時間。

DeFi的主要競爭優勢之一是,開發人員可以更快地進行迭代,突破金融創新的界限。然而,並不是每個項目都有能力進行審計,尤其是在項目尚未取得任何進展的時候。儘管有多次審計,黑客仍然可以設法利用一些項目,也就是說,即使有審計也可能不足以防止所有黑客。

3. 草率的編碼和不充分的審計

在牛市中,許多項目團隊感到有壓力,需要快速行動,走捷徑以更快地發布他們的產品。有些人甚至可能決定完全跳過審計,以獲得先發優勢,並在產品上線幾個月後才進行審計。

此外,還有大量的"分叉"--使用與其他成熟項目相同代碼的新項目。在沒有完全了解代碼如何工作的情況下啟動,它們被當作是快速搶錢的工具,導致了許多漏洞。

4. 卷錢跑路Rug Pull(內部工作)

在DeFi領域,以匿名團隊啟動項目的情況並不少見。由於監管環境不確定,一些人這樣做是為了避免監管機構的審查。然而,其他人選擇匿名,是因為他們心懷惡意。許多例子表明,匿名團隊進行了內部工作,並故意留下一個漏洞,然後利用這個漏洞竊取毫無戒心的用戶。

在看到第一個加密貨幣比特幣也是由一個不知名的人創立後,加密貨幣社區並不疏遠由匿名創始人發起的項目。用戶根據產生的代碼來評估項目,而不是開發人員是誰或來自哪裡。這與開放軟件的去中心化精神是一致的。

撇開理想不談,如果在一個匿名團隊發起的協議發生漏洞,那麼由於很難找到開發者的真實身份,沒有追索權的可能性就會很大。

5. 預言機攻擊

DeFi協議需要知道資產價格才能正確運作。例如,一個借貸協議需要知道資產價格,以決定是否清算借款人的頭寸。

因此,作為DeFi基礎設施不可缺少的一部分,預言機可能會受到嚴重的操縱。例如,我們在第12章中提到,MakerDao的金庫被利用後,造成了不必要的金庫清算,造成了總價值超過800萬美元的ETH損失。

6. Metamask(狐狸錢包)攻擊

作為每個以太坊應用程序的主要界面,Metamask成為主要攻擊目標並不奇怪。但Consensys團隊在安全方面做得很徹底,到目前為止,還沒有出現大範圍的漏洞。

然而,有幾起引人注目的襲擊事件:

通過EasyFi項目的管理員MetaMask賬戶損失5900萬美元通過Nexus Mutual創始人的個人錢包損失800萬美元

閃電貸

什麼是閃電貸?

閃電貸是指用戶可以在沒有任何抵押物的情況下借入資金,只要用戶在同一交易中償還貸款即可。如果用戶沒有在同一筆交易中償還閃電貸款,那麼交易將自動失敗,並產生交易費用的損失,以確保閃電貸不會發生。閃電貸款是由各種DeFi協議提供的,如Aave和dYdX。

與普通貸款相比,閃電貸有三個主要特點:

沒有違約風險:閃電款在同一筆交易中償還。因此,沒有違約風險。無抵押品:借款人只要能在一次交易中償還貸款,就可以在不提供任何抵押品或信用檢查的情況下獲得貸款。無限的貸款規模:用戶可以從DeFi協議中藉到任何數額的資金,但不超過可用的總流動資金。

截至2021年4月,閃電貸的執行並不友好,因為你必須通過編寫智能合約代碼來執行它。因此,它更適合於軟件程序員,而不是一般的門外漢。

事實上,一些程序員經常利用這一因素,發起我們所說的"閃電貸攻擊",特別是在不需要抵押物的情況下。最著名的閃電貸款攻擊之一發生在Harvest Finance,造成了2400萬美元的損失。

下表顯示了提供閃電貸的主要協議所產生的費用。

閃電貸的使用

下圖顯示了Aave的所有閃電貸的使用構成。

我們可以看到,閃電貸主要用於套利目的。套利是指利用市場之間的價格差異來賺取利潤的行為。例如,假設我們發現WBTC在兩個不同的去中心化交易所有相當大的價格差異。我們可以使用閃電貸款,在沒有任何抵押的情況下借入大量的WBTC,從價格差異中獲利。

閃電貸的第二個用途是用於貸款清算。如果借款人讓協議清算他們的頭寸,通常會有罰款。當市場有實質性的價格行動時,借款人可以選擇獲得閃電貸並自行清算他們的頭寸,從而避免懲罰性費用。

讓我們看一個例子,我們用ETH作為抵押品向Maker借DAI。當ETH的價格大幅下跌時,它可能會接近我們DAI貸款的清償水平。我們可能沒有ETH來增加我們的抵押品,也沒有DAI來償還貸款。我們可以做的是採取DAI閃電貸來償還Maker貸款。然後我們可以將提取的部分ETH抵押品換成DAI來即時償還閃電貸。使用這種方法,我們將保留剩餘的ETH,而無需支付清算罰款。

最後,閃電貸也可以用來執行抵押品互換。例如,如果我們在Compound上有一筆DAI貸款,以ETH作為抵押品,我們可以使用閃電貸將ETH抵押品換成WBTC抵押品。這使我們能夠輕鬆地改變我們的風險狀況,而不需要通過多次交易。

執行閃電貸仍然需要相當多的技術知識,對那些不知道如何編碼的人來說有很高的進入門檻。然而,有一個第三方應用程序可以使普通用戶也能執行閃電貸--這個平台被稱為Furucombo。

閃電貸協議:Furucombo

Furucombo是一個允許任何人使用閃電貸創建套利策略的平台。由於它的拖放工具使終端用戶能夠建立和定制不同的DeFi組合,組裝資金槓桿的門檻也就降低了。請注意,Furucombo不會為你尋找套利機會。

要使用Furucombo,用戶需要設置輸入/輸出和交易的順序,它將把所有的Cube捆綁成一個交易來執行。下面是一個如何進行套利交易的例子:

從Aave獲得15,000DAI的閃電貸。使用1nch將DAI換成yCRV。用Curve將yCRV換回DAI。由於價格差異,你最終得到了15,431個DAI,比以前多了1個DAI。包括Aave的閃電貸費用在內的15,013DAI的貸款金額被償還給Aave。用戶剩下的利潤為418DAI。所有這些步驟都在一次交易中執行。

Furucombo不需要任何預付資金,也不收取費用,用戶可以在平台上使用閃電貸建立"組合"並進行套利交易。你所需要的是錢包裡的ETH,用來支付gas費。

建議用戶自行承擔交易風險,因為Furucombo上並不總是有套利機會,如果價格差異不再存在,組合可能會失敗。無論結果如何,用戶都將面臨支付交易費用的風險。

案例研究:bZx閃電貸攻擊

2020年2月15日,以太坊區塊鏈上發生了一筆在當時被認為是獨一無二的交易。在一個區塊內,在不到一分鐘的時間裡,一筆交易實現了約36萬美元的利潤。

這項交易引起了加密貨幣社區的注意,並被廣泛分析。 88該收益是通過最初的幾乎無風險的閃電貸形式實現的,隨後在不同的去中心化交易所之間進行了一系列套利。

來源:Peckshield

閃電貸借貸:首先,從dYdX那裡獲得了10,000ETH的閃電貸款。囤積:這些ETH的一半(5,500ETH)被質押在Compound上作為抵押品,以藉入112個WBTC。拉高保證金:1,300個ETH存入bZx,使用5倍槓桿做空ETH,以支持WBTC。從bZx借出的5,637個ETH被用來用KyberSwap換取51個BTC。根據KyberSwap算法,最好的價格是由Uniswap提供。然而,由於流動性低,交易推動了1 WBTC的匯率上升到109.8 WETH左右,大約是該期間正常轉換率的三倍。拋售:攻擊者在價格上漲後在Uniswap賣出了借來的112個WBTC,獲得了6,871個ETH,轉換率為1WBTC=61.2WETH。閃電貸利潤:用未使用的3,200ETH和出售的6,871ETH,攻擊者償還了10,000ETH的閃電貸款,利潤為71ETH。利潤總額:Compound頭寸仍然處於盈利狀態。由於1個WBTC的平均市場價格為38.5WETH,攻擊者可以用大約4,300ETH獲得112個WBTC。總的來說,攻擊者獲得了71 WETH + 5,500 WETH - 4,300 ETH = 1,271 ETH,大概是355,880美元。 (假設ETH價格為280美元)

上述事件不僅證明了通過操縱其他資產的價格獲得極端資本收益的可能性,而且除了相對較低的協議費,借款人也沒有其他費用。借款人面臨的唯一條件是,貸款要在同一筆交易中償還。因此,無抵押貸款的概念本身就為該領域帶來了廣泛的機會。

閃電貸總結

閃電貸可能是一把雙刃劍。一方面,它對智能合約的新穎使用給DeFi生態系統帶來了便利和進步--沒有多少資本的交易者可以利用閃電貸款啟動套利和清算策略,而不需要大量的資本基礎。

另一方面,黑客可以利用閃電貸款發起閃電貸款攻擊,由於不需要抵押品,所以大大增加了他們的利潤。就像任何工具一樣,閃電貸可以用於好的和壞的目的。

在我們看來,被惡意利用的閃電貸攻擊加強了整個DeFi生態系統,因為項目改善了他們的基礎設施,以防止未來攻擊的發生。由於閃存貸仍處於新生階段,這些攻擊可以被視為一線生機,緩解了DeFi生態系統種使其更加脆弱的漏洞。

解決方案

僅有智能合約的審計並不足以防止漏洞。項目需要做得更多,他們現在正在尋找替代方案,以確保存放在其協議中的資金安全。以下是一些可能的解決方案:

內部保險基金

有幾個項目已經決定使用他們的本地代幣作為風險支撐。這方面的例子包括:

Maker在黑色星期四鑄造了MKR,以彌補DAI的清算缺口。 Aave推出了stAAVE,以彌補儲戶的任何潛在虧空。 YFI抵押了他們的代幣,並藉入DAI來償還黑客的資金。

保險

作為該領域的新生力量之一,Unslashed Finance向LIDO和Paraswap的用戶提供了協議級別的保險,從而為協議為其用戶購買保險提供了可能性。

漏洞賞金

越來越多的項目利用Immunefi來列出漏洞賞金,91鼓勵黑客通過發現漏洞而不是利用漏洞來獲得獎勵。最高的賞金可以達到150萬美元。然而,由於黑客的潛在回報較高,這是否能阻止黑客的發展還有待觀察。

其他可能的解決方案

全行業的保險庫

可以有一個全行業的保險池,每個DeFi協議都從他們的收入中拿出一部分或支付固定費用。當其中一個成員遭遇黑客攻擊時,該保險池預計將支付索賠。這類似於聯邦存款保險公司(FDIC)的想法。

審計員要參與遊戲

這個想法建議審計師在DeFi保險平台上質押,如Nexus Mutual。作為質押者,如果協議被黑,那麼審計師將遭受損失。這種實施方式有望使審計師和項目的利益一致。

給個人的提示

除了智能合約黑客,你也可能會受到各種黑客的攻擊。以下是你可以採取的一些步驟,以盡量減少風險,降低被黑客攻擊的機率。

不要給智能合約以無限的批准

與DeFi協議互動,通常需要你給智能合約訪問權,並同意花費你錢包裡的資金。通常,為了方便起見,DeFi協議要求將默認的批准設置為無窮大,這意味著該協議可以無限制地訪問你錢包中的批准資產。

給予你的錢包無限制的批准來花費批准的資產通常是一個壞主意,因為一個惡性的智能合約可能會利用這一點從你的錢包中抽走資金。

2021年2月27日,一名黑客使用了一個假的智能合約,並欺騙Furuсombo,使其認為Aave v2有一個新的實現。這次攻擊利用了具有無限代幣批准權的大型錢包,並通過將資金轉移到黑客控制的地址來耗盡這些錢包。

在這次攻擊中,Furucombo的用戶遭遇了總額高達1500萬美元的損失。 92 即使是貸款協議,Cream Finance,也犯了無限制審批的錯誤,在這次攻擊中,金庫損失了110萬美元。

因此,手動更改每筆交易的批准金額是一個好主意,以防止在代幣批准期間給予DeFi協議無限的支出權限。即使這將導致後續每次DeFi交互的額外交易,並產生更高的交易費用,但可以減少錢包在智能合約利用攻擊中被耗盡的風險。

要手動改變批准的金額,請按照下面的步驟進行操作:

步驟1

需要批准的最常見的情況之一是兌換。在這個例子中,我們計劃在Uniswap上將15.932 SNX換成0.0834 ETH。點擊"批准SNX"

步驟2

左邊的圖片是我們將看到的默認窗口。點擊"查看完整的交易細節".然後我們就會看到右圖。點擊"編輯"。

步驟3

選擇"自定義支出限額"。很多應用程序在默認情況下選擇"無限"選項。鍵入我們想要花費的金額,在這個例子中,即15.932 SNX。

步驟4

在"許可"部分,我們可以看到,數字是更新的。點擊"確認"並支付交易費。

撤銷智能合約的無限批准

如果你之前給了DeFi協議無限的支出批准,那麼你有兩個選擇。更簡單的選擇是將你的所有資金轉移到一個新的以太坊地址,你將獲得一個新的重新開始,而不承擔任何與你以前的以太坊地址相關的風險。

然而,如果不可能將資金從現有的以太坊地址中轉移出來,你可以使用Etherscan提供的代幣審批工具檢查所有以前的審批清單。

在這個頁面,你可以看到你以前授予智能合約的所有批准。你應該撤銷所有批准金額無限的批准,特別是你不再交互的協議。請注意,撤銷每個批准需要智能合約本身的交互,並將產生交易費用。

使用硬件錢包

硬件錢包是一個專門用於存儲加密貨幣的物理設備。硬件錢包將私鑰與互聯網連接的設備分開,以減少錢包被破壞的機會。

在硬件錢包中,私鑰被保存在一個安全的離線環境中,即使硬件錢包被插入感染了惡意軟件的電腦中。雖然硬件錢包可以被物理盜竊,但如果小偷不知道你的密碼,它就無法進入。如果你的硬件錢包不幸損壞或被盜,如果你在丟失之前創建了一個秘密的備份代碼,你仍然能夠恢復你的資金。

儘管有更多的人已經開始進入硬件錢包製造商行業,但目前頂級的硬件錢包製造商還是Ledger和Trezor。

使用獨立的瀏覽器配置文件

雖然瀏覽器擴展是有幫助的,使你在工作中更有效率和生產力,但你應該始終擔心惡意的瀏覽器擴展會給你的加密貨幣體驗帶來麻煩。

如果你不小心安裝了一個惡意的瀏覽器擴展,它可能會窺探你的Metamask密鑰,並成為你資金的攻擊媒介。提高安全性的一個方法是在谷歌瀏覽器或Brave瀏覽器上創建一個單獨的瀏覽器配置文件。在這個新的瀏覽器配置文件中,只安裝Metamask擴展。通過這樣做,你可以減少惡意瀏覽器擴展從你的錢包抽走資金的風險。

以下是在谷歌瀏覽器上創建新的瀏覽器配置文件的分步指南。

步驟1

打開Chrome瀏覽器進入上述頁面。點擊"添加"。或者你可以到右上角,點擊配置文件圖標。點擊最底部的“+添加”。

步驟2

選擇名稱和顏色。然後點擊"完成"。

步驟3

如果你有一個不同的Chrome賬戶,請登錄。如果沒有,只需點擊"開始"。

步驟4

下載Metamask擴展,並使其成為此配置文件中的唯一擴展。

5

總結

DeFi領域在很大程度上仍然是各種金融創新的試驗場。因此,事情可能也會出錯。請注意使用新的DeFi應用程序的風險,特別是那些沒有經過實戰考驗的應用程序。

在使用任何DeFi協議之前一定要做研究。在大多數情況下,一旦發生錯誤,對所造成的損失是無法追索的。即使在協議賠償的情況下,損失通常也會超過收到的賠償金額。

也就是說,由於涉及的風險,參與DeFi活動的收益很高。為了不錯過DeFi提供的高收益,你可以選擇通過購買保險或看跌期權來對沖一些風險。

DeFi領域仍在不斷成熟。隨著我們的發展,我們預計會有更多的DeFi協議推出,並將更好的保障措施和保險基金納入其運營模式中。

推薦閱讀

讓Metamask成為你自己的銀行https://consensys.net/blog/metamask/metamask-secret-seed- phrase-and-password-management/‌如何(不)Rekt - DeFi黑客解釋https://finematics.com /defi-hacks-explained/‌DeFi安全:這麼多的黑客,它能安全嗎? https://unchainedpodcast.com/defi-security-with-so-many-hacks- will-it-ever-be-safe/ ‌關於黑客和漏洞的新聞 https://www.rekt.news/ ‌