以太坊價格 以太坊價格
Ctrl+D 以太坊價格
ads

EFI:DeFi浪潮下的“狠角色”DEX夠安全嗎?

Author:

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

如今,隨著人們對 DeFi 的興趣日益濃厚,DEX(即去中心化交易所)風靡一時。它們解決了常見的 CEX (即中心化交易所)問題,那我們也會問,DEX夠安全嗎?

在上一篇說明了代幣本身的安全問題后(純干貨分享(一) | DEFI安全問題之基礎篇),現在來聊聊DEX在兌換代幣時可能產生的安全問題。目前DEX主要面臨的安全問題大致可分成兩類:

(1)DEX項目本身存在的安全問題。

(2)作為第三方協議,與其他DEFI項目交互時產生的安全問題。

本文將對第一類安全問題進行介紹。

重入漏洞

重入漏洞在上一篇我們也提到過,它屬于需要防范的經典漏洞。與普通代幣的重入相比,Uniswap的重入漏洞的主要表現形式為:攻擊者在一筆兌換交易中利用Uniswap未及時更新價格前發起二次兌換,由于此時Uniswap未更新價格,使得二次兌換可兌出的代幣數量比正常兌換的多。此外,在Uniswap的重入攻擊中,攻擊者利用單筆交易可能只能獲得微小的收益,因此攻擊者往往傾向于使用閃電貸或者循環套利擴大戰果。

以imBTC攻擊事件為例,該事件是由于Uniswap V1在調用ERC777系列代幣時,未充分考慮合約回調的情況。

具體表現為:攻擊者使用imBTC代幣兌換ETH時(如圖1),合約先通過self.getInputPrice函數計算正確的ETH數額并將ETH發送到目標地址,然后調用self.token.transferFrom函數時,會調用imBTC合約的_callTokensToSend函數(如圖2),而_callTokensToSend函數會調用用戶指定存儲imBTC代幣的合約。因此,如果攻擊者部署存儲合約,并改寫其中TokensToSend函數,那么當兌換代幣時,pair(兩種代幣組成的交易對)合約調用攻擊者部署的存儲合約,就可以回調pair進行二次兌換,而二次兌換時pair合約賬本還未更新,使得計算的ETH數額比正常兌換要多,以此來獲利。

Visor Finance遭DeFi黑客攻擊 損失超820萬美元:金色財經報道,Uniswap V3流動性管理協議Visor Finance再次遭受黑客攻擊,黑客利用可重入漏洞耗盡了880萬枚VISR代幣,總損失約為820萬美元。盡管完整的報告尚未公布,但人們認為黑客利用該漏洞更改了獎勵合約的所有者,以便他們可以鑄造額外的vVISR獎勵代幣。Visor團隊分享了這次黑客攻擊的詳細信息,并指出他們發現了一個影響其vVISR質押合約的漏洞。該團隊補充說,沒有頭寸或管理程序面臨風險。該事件主要影響VISR質押者和代幣持有者,因為自攻擊以來VISR已下跌超過95%。為了補償用戶,Visor團隊宣布將根據黑客攻擊前拍攝的快照安排遷移日期。[2021/12/22 7:54:56]

圖1?Uniswap的tokenToEthInput函數

圖2 imBTC的transferFrom函數

圖3 imBTC的__callTokensToSend函數

詳細攻擊流程如下:

Flashbots核心貢獻者等人發表新論文,研究DeFi智能合約經濟安全的形式化驗證框架CFF:9月18日消息,Flashbots核心貢獻者PhilipDaian、康奈爾大學計算機安全博士生KushalBabel和MahimnaKelkar以及康奈爾理工學院教授AriJuels共同發布關于ClockworkFinanceFramework(CFF)的新論文,這是一種DeFi智能合約經濟安全的形式化驗證框架。論文中表示,CFF具有三個關鍵特性,合約完備、以漸近最優的模型大小實現、在構造上窮舉攻擊。CFF可以支持多個目標,開發者對合約的經濟安全性分析、用戶對DeFi交易風險的分析、機器人或礦工對套利機會的優化。此外,CFF框架引入了一個新的DeFi合約經濟安全概念,可提取價值(EV)。[2021/9/18 23:35:18]

圖4 ETH-imBTC事件流程圖

那么,為什么在第二次調用tokenToEthSwapInput函數兌換代幣時,發送的ETH會比正常兌換要多呢?我們可以用公式來還原可兌換代幣數量的代碼邏輯:

首先,正常兌換下,getInputPrice函數計算可兌換的ETH數量為:

且正常第二次可兌換的ETH數量為:

波場TRON DeFi總鎖倉值(TVL)已達到90億美金:據3月30日18:00(HKT)最新數據顯示,波場TRON DeFi總鎖倉值(TVL)已達到90億美金,創下歷史新高。3月8日開啟的波場TRON五幣齊挖世紀挖礦熱度升高,波場TRON DeFi總鎖倉值持續攀升,表現出波場DeFi生態的強大勢能。據悉,波場TRON官方升級了總鎖倉值(TVL)的算法:TRX的總凍結量等于能量和帶寬之和,其中包括給超級代表投票凍結TRX獲得的能量和帶寬。

波場TRON以推動互聯網去中心化為己任,致力于為去中心化互聯網搭建基礎設施。旗下的TRON協議是全球最大的基于區塊鏈的去中心化應用操作系統協議之一,為協議上的去中心化應用運行提供高吞吐,高擴展,高可靠性的底層公鏈支持。波場TRON還通過創新的可插拔智能合約平臺為以太坊智能合約提供更好的兼容性。[2021/3/30 19:30:28]

但重入后第二次可兌換的ETH數量為:

由此可知,在重入后第二次兌換中只有ETH的儲備量減少,而imBTC儲備量未增加。這樣在分母不增加的情況下,導致了等量的imBTC可以兌換更多的ETH。

針對此類安全問題,成都鏈安建議:

當合約涉及到資產轉移時,使用“檢查-生效-交互”模式來處理邏輯,對關鍵的業務操作可以使用OpenZeppelin官方的ReentrancyGuard進行修飾。

當前DeFi中鎖定資產總價值達26.49億美元:金色財經報道,據DeBank數據顯示,DeFi中鎖定資產總價值達26.49億美元,Compound以7.04億美元排在首位、Maker鎖定資產總價值6.34億美元、Synthetix鎖定資產總價值為4.72億美元。

注:總鎖倉量(TVL)是衡量一個DeFi項目使用規模時最重要的指標,通過計算所有鎖定在該項目智能合約中的ETH及各類ERC-20代幣的總價值(美元)之和而得到。[2020/7/16]

swap函數未對K值進行校驗

Uniswap的核心是常量乘積模型K=x*y,其中的K值是該pair合約持有代幣數量的乘積,且要求之后的每一筆交易完成后K值必須增加(考慮手續費)。因此如果不進行K值校驗,將很容易成為攻擊點。

圖5 Uniswap的價格波動

以Impossible Finance事件為例,該項目是Uniswap的仿盤,實現了兩種兌換代幣的函數:cheapSwap和swap。其中cheapSwap函數少了k值校驗(如圖6),但是項目方知道缺少K值校驗的后果,專門為cheapSwap函數增加了onlyIFRouter做修飾,來限制cheapSwap函數只能被指定的Router合約調用。

動態 | ConsenSys發布DeFi開源風險評估方案DeFi Score:ConsenSys在本周六推出一種評估DeFi借貸代碼和財務風險開源解決方案DeFi Score。在該公司對外發布公告中,ConsenSys表示,希望利用該解決方案提高透明度,并提升外界對DeFi貸款市場相關技術和財務風險理解。該模型按照智能合約風險和金融風險兩大類來捕獲加密市場風險屬性,包括技術、流動性和監管風險等,并使用10分制計算分數。此外,ConsenSys的DeFi評分也會在較小范圍內考慮到監管問題,但他們表示,未來會提升監管評分占比。不過,ConsenSys表示DeFi Score不是一個經過驗證的統計模型。(Ambcrypto)[2019/9/22]

圖6?合約未檢查k值的cheapSwap函數

正常情況下,當用戶使用Router合約兌換代幣時,首先會使用getAmountsOut函數來計算正確的代幣數量amounts;然后調用safeTransferFrom將用戶的兌換消耗代幣轉入目標pair合約;最后,通過內部調用_swap函數來執行cheapSwap函數將兌換代幣轉至目標地址。

圖7?Router01合約的swapExactTokensForTokens函數

但是,由于cheapSwap函數缺少了K值檢驗,如果攻擊者部署惡意代幣合約,在Router合約調用safeTransferFrom函數時,回調正常的pair合約進行同種兌換,由于,回調后的兌換使用的amounts仍是未更新之前的數據,已不符合改變賬本狀態之后的校驗,那么攻擊會導致以錯誤的價格兌換出目標代幣,以此獲利。

圖8?合約進行k值校驗的Swap函數

該事件的具體攻擊步驟如下:

1. 在準備階段攻擊者部署了AAA代幣合約,并使用閃電貸借來1000WBNB,兌換65140個項目方的IF代幣。

2. 使用其中一半的IF代幣(32570個)與攻擊者自己部署的AAA代幣構建IF-AAA交易池。

3. 執行AAA-IF-BUSD路徑的代幣兌換,且當Router合約調用AAA代幣合約的transferFrom函數時會執行攻擊者的惡意代碼,重入至IF-BUSD的pair合約,并將另一半IF代幣正常兌換出221897個BUSD。

4. 回歸到AAA-IF-BUSD路徑的兌換,將之前計算的amounts值傳入_Swap函數中執行這筆兌換,用一半的IF又兌換了2521897個BUSBD。

5. 歸還閃電貸,完成攻擊。

圖9?事件流程圖

在關鍵的兌換函數中必須做k值校驗,不要為了節省gas和代碼量就將K值校驗和安全驗證依賴外部驗證,做到自身功能完善。

Decentralized Exchange

通縮代幣未設置pair為分紅例外

通縮代幣在交易時會產生額外的分紅與手續費。如果交易合約中包含了此類代幣,且沒有進行特殊處理,那么,就可能導致交易對合約記錄的代幣儲量與實際的代幣可用余額不一致。

以XSquid事件為例,XSquid是一種通縮代幣,未將其與WHT代幣組成的pair合約地址添加獎勵例外列表,造成了pair合約除了正常代幣兌換和流動性存儲外,還存有多余的XSquid分紅獎勵代幣。因此,攻擊者就可以調用Swap函數將pair合約多余的XSquid代幣轉換為WHT提取(如圖11),或者通過skim函數將多余的XSquid代幣直接提取(如圖12)。

圖10?XSquid交易對合約未添加獎勵例外

圖11?Swap函數可以兌換多余的WHT代幣

圖12?skim函數可以提取大于reserve的部分

DEX在添加通縮分紅型代幣時多注意手續費以及分紅的處理情況。在創建通縮分紅型代幣交易對時,可以添加獎勵例外來避免此類代幣的分紅問題。

此外,以下兩類不屬于DEX本身的安全問題,但是被項目方借助了DEX的特性實施詐騙,所以將其寫在文章末尾。

詐騙交易池?

這類問題主要是指項目方在自己發行的代幣里留有后門,創建與主流代幣的交易池,誘使投資者使用手里存在價值的代幣買入項目方代幣,并且不斷拉盤對投資者進行投資欺騙。

以下面的TRTC項目方為例,項目方創建了ETH-TRTC的交易池。但是在TRTC的代幣合約對transferFrom函數做了相關限制,要求代幣的轉出方為owner(管理員)或者為Uniswap。因此對于投資者,僅可以通過Uniswap買入TRTC代幣,而不能賣出TRTC代幣。最后由項目方把投資者投入的ETH提走跑路,給投資者帶來了巨大的損失。

圖13?TRTC合約的transfer函數

圖14?TRTC合約的ensure修飾

圖15?TRTC合約的transferFrom函數

項目方Rug Pull?

Rug Pull是指項目方卷走投資者資金跑路的行為,目前已成為DeFi生態系統的最大騙局類型,項目方刻意制造代幣價格暴漲的假象、許諾為提供流動性的投資者提供高回報等方式來大量聚集資金,一旦時機成熟就移除池子里的流動性或將代幣卷走。這樣的例子在DeFi屢見不鮮,AnubisDAO、Meerkat Finance、TurtleDEX、Squid token魷魚幣等都是在卷款跑路之后,注銷網站和社交媒體銷聲匿跡,導致投資者承擔了巨大的損失。

?寫在最后?

成都鏈安建議項目方使用鎖倉和多重簽名來控制代幣流動性,避免出現砸盤跑路的情況。投資者不要被天上掉餡餅的事情沖昏頭腦,防范虛假宣傳。

Tags:SWAPDEFIDEFEFISWAPTCdefibox幣價格XDEFI Governance TokenAlchemist DeFi Aurum

Gate交易所
NFT:拆穿元宇宙:NFT被玩壞的至少三種可能

太陽底下沒有新鮮事兒。 NFT在國內至少火了一年了,基礎概念相信大家不會陌生。簡而言之,NFT用區塊鏈技術記載的數字化內容(比如圖片、視頻、虛擬手辦).

1900/1/1 0:00:00
CRYP:WEB3.0:屠龍少年的寓言 新的資本主義操作系統

注:僅為個人隔離期間吃飽后沒事干的無聊雜談最近,無聊猿( Bored Ape Yacht Club )的百萬人民幣空投讓所有人大吃一驚,我只能撿起檸檬和葡萄,感嘆,好酸.

1900/1/1 0:00:00
以太坊:高速生長的L2 如何助推以太坊全球普及?

Layer 2的高速增長將為ETH帶來可靠的現金流。昨晚,ApeCoin的空投領取活動使得以太坊Gas費用一度漲至297gwei,不少人感慨有了重回牛市的氛圍,但在其活動結束后,以太坊網絡Gas.

1900/1/1 0:00:00
ZKS:使用zkSync參與Gitcoin捐贈:低Gas、二層交互記錄

Gitcoin 第 13 輪捐贈開始了。捐贈 Gitcoin 不光是為了回饋和支持 Web3.0,也有機會獲得項目方的空投,參與一下,也許就有福報.

1900/1/1 0:00:00
ANC:金色Web3.0日報 | 百度超級鏈推出阿貍生日限定紀念數字藏品“百貍挑一”

1.DeFi代幣總市值:1140.9億美元 DeFi總市值 數據來源:coingecko2.過去24小時去中心化交易所的交易量:37.

1900/1/1 0:00:00
WEB:關于目前Web3安全的思考和方向

Unusual Capital參投了Ebay、Instagram、Dropbox等項目;Wei Lien Dang是Unusual Capital的合伙人.

1900/1/1 0:00:00
ads