去中心化金融(DeFi)作為區塊鏈生態當紅項目形態,其安全尤為重要。從去年至今,發生了幾十起安全事件。
BlockSec作為長期關注DeFi安全的研究團隊(https://blocksecteam.com),獨立發現了多起DeFi安全事件,研究成果發布在頂級安全會議中(包括USENIXSecurity,CCS和Blackhat)。在接下來的一段時間里,我們將系統性分析DeFi安全事件,剖析安全事件背后的根本原因
往期回顧:(1)我為自己代言:ChainSwap攻擊事件分析(2)傾囊相送:Sushiswap手續費被盜
0xffffffff.前言
北京時間2020年11月12日夜晚。DeFi聚合器Akropolis遭受攻擊,黑客通過Flashloan+重入的攻擊方式,盜取了存儲在Akropolis中價格超過2,000,000美元的數字資產。本文將以一筆攻擊交易為例,深度解讀此次攻擊的原理。
時間:Nov-12-202012:04:02PM+UTC#11242695
閱讀建議:
如果您剛剛接觸DeFi(Ethereum),可以從頭看器,但是文章比較長,看不下去記得點個關注再走。
如果您對Akropolis等DeFi聚合器項目比較了解,可以直接從「0x2攻擊分析」開始。
0x0.背景介紹
德意志銀行與Memento Blockchain完成概念驗證Project DAMA:金色財經報道,德意志銀行與Memento Blockchain已成功完成概念驗證,稱為 Project DAMA(數字資產管理訪問),可為數字基金管理和投資服務提供更高效、安全和靈活的解決方案。
DAMA 項目是德意志銀行和 Memento Blockchain 的合作項目,于 2022 年 8 月 5 日獲得新加坡金融管理局 (MAS) 金融部門技術創新 (FSTI) 概念驗證 (POC) 資助,旨在應對與區塊鏈相關的無數挑戰啟動或訪問數字資金包括高成本和耗時的過程。[2023/2/21 12:19:43]
2020年可謂是去中心化金融的元年。隨著DeFi生態的不斷發展,越來越多的DeFi項目上線以太坊。普通用戶可以選擇自己喜歡的DeFi項目進行投資以獲得收益。但是隨著DeFi市場的急劇擴張,普通用戶面臨的一個問題就是在眾多DeFi項目中如何選擇投資的目標,他們需要有人來幫助他們來進行投資。在這種情況下,一系列資產托管平臺、投資組合平臺應需而生。Akropolis就是眾多資產托管平臺中的一個:
普通用戶將個人的數字資產投入到Akropolis中,由Akropolis確定投資方向,優化投資策略。Akropolis獲得投資收益之后,將收益按比例分配給投資Akropolis的普通用戶。以現實中的金融活動舉例子,Akropolis就像是基金,其所投資的DeFi項目就是股票,基民購買基金,基金持有股票,獲得收益后將收益分配給基民。
BlockFi最大債權人為Ankura Trust,其次為FTX US和美國證券交易委員會:11月28日消息,據BlockFi破產申請表顯示,Ankura Trust Company, LLC是其最大債權人,擁有價值約7.29億美元的無擔保債權,其次是FTX US和美國證券交易委員會,無擔保債權分別為2.75億美元和3000萬美元。FTX US似乎源于今年早些時候向BlockFi提供的信貸額度,而美國證券交易委員會則是與BlockFi與其達成的多方調查和解金額有關。(The Block)[2022/11/28 21:07:48]
0x1.Akropolis機制
為了便于理解,我們首先簡要地介紹一下和此次攻擊相關的兩個實體合約:Protocolcontract和Akropoliscontract
Protocol:Protocol可以簡單地理解為:用戶將手中的token投資到Protocol中,獲得Protocol的份額,等到將來Protocol中的資產升值了,那么用戶便可以從Protocol獲取到一定的收益
Akropolis:之前我們講過,由于ETH上的DeFi項目太多了,如果用戶要投資多個項目,要么不知如何抉擇,要么操作難度比較大,所以Akropolis扮演了一個投資聚合器的角色:Akropolis綁定了多個DeFi投資項目,用戶可以很方便地通過Akropolis使用手里的token進行投資:用戶只需要簡單的調用Akropolis的函數,指定想要投資的protocol,那么Akropolis就會去幫你在不同的protocol中完成投資。
Huobi Global推出區塊鏈生態系統投資部門Ivy Blocks:金色財經報道,加密貨幣交易所Huobi Global今天推出了Ivy Blocks,這是一個DeFi和web3區塊鏈生態系統投資部門。火幣網在一份新聞稿中表示,Ivy Blocks將投資于有前景的區塊鏈項目,以幫助釋放其增長潛力。Huboi表示,Ivy Blocks將利用全球市場的加密機會,擁有“數十億美元的資金”。Ivy Blocks支持的首批項目之一是Capricorn Finance,這是一個基于Cube的去中心化交易所。(theblockcrypto)[2022/6/12 4:19:22]
總體的交互邏輯如圖所示:
Akropolis提供了兩個外部接口:functiondeposit(address_protocol,addressmemory_tokens,uint256memory_dnAmounts)和functionwithdraw(address_protocol,addresstoken,uint256dnAmount,uint256maxNAmount)
Akropolis.depositfucntion:deposit函數的功能是:
用戶調用deposit。
Akropolis先計算Protocol中有多少的token:nBalanceBefore。
Akropolis將用戶的token轉入到Protocol中。
Coinbase高級工程師Luke Youngblood加入BENQI Protocol擔任戰略顧問:9月20日消息,Coinbase高級工程師Luke Youngblood加入算法流動性市場協議BENQI Protocol擔任戰略顧問,據悉,Youngblood曾是Coinbase高級工程師,領導Coinbase Cloud內新的質押和治理產品的開發。在2019年加入Coinbase之前,他是Amazon Web Services的首席解決方案架構師。Youngblood還曾為Tezos網絡建立質押基礎設施,還構建了預言機Harbinger和一個名為Kolibri的算法穩定幣。(Dailyhodl)[2021/9/20 23:37:43]
Akropolis再計算protocol中token的數量:nBalanceAfter。
得到用戶投資的數量:nDeposit=nBalanceAfter-nBalanceBefore。
通過用戶投資的數量計算得到用戶投資份額。
Akropolis.depositToProtocol函數:
Akropolis.distributeYieldInternal函數和Akropolis.updateProtocolBalance函數:
動態 | SEC撤銷Blockchain Solutions的證券注冊:在美國證券交易委員會(SEC)暫時中止Blockchain Solutions證券交易后不久,SEC已發布針對該公司的行政訴訟結果。SEC在文件中表示,Blockchain Solutions同意根據1934年《證券交易法》第12(j)條的規定進行證券定單調查和撤銷注冊。自2018年6月30日以來,該公司尚未向SEC提交任何定期報告。撤銷證券注冊自2019年10月8日起生效。(financefeeds)[2019/10/9]
Protocol.normalizedBalance函數:
注意,Protocol.normalizedBalance中的_registeredTokens=。deposit函數中使用到的distributeYieldInternal函數和updateprotocolBalance函數的功能都是查詢當前Protocol函數中所有代幣的余額,注意這里面normalizedBalance的意思是對余額歸一化處理。
用戶可以調用deposit函數,通過指定Protocol和token以及token的amount,將一定數量的代幣存入到和Akropolis中,Akropolis根據用戶存入的代幣數量給用戶返還Akropolis的LPToken。隨后使用用戶投資的token投入到Protocol中。
withdrawfucntion:
用戶通過調用withdraw函數,取出之前通過deposit函數存入的token,獲取利息。
0x2.攻擊原理
我們注意到,在Akropolis.deposit函數中,要先計算beforeBalance,然后調用token的transferFrom函數,將token轉到Protocol中,最后計算afterbalance,正常邏輯下這種計算方式是正確的,但是如果攻擊者提供的token地址是一個惡意地址,那么在這種情況下,實際有效的token并沒有轉到Protocol賬戶中,并且Akropolis.deposit沒有防止重入的機制。這樣就使得攻擊者可以利用1.token地址未經校驗,2.deposit函數沒有放重入機制來對Akropolis進行攻擊。攻擊流程圖如下:
STEP1:
攻擊者首先調用Akropolis.deposit函數,傳遞的token地址參數是一個惡意合約地址。函數內部首先計算balanceBefore1,然后由于攻擊者傳遞進來的token合約地址是攻擊者偽造的faketoken,所以Akropolis緊接著調用了fakeToken.transferFrom函數。
STEP2:
在fakeToken.transferFrom函數中,該合約再次調用Akropolis.deposit,傳遞的token地址就是真實的DAI的地址,所以在第二次調用deposit的邏輯是一個正常邏輯:攻擊者存入一筆DAI,然后Akropolis根據balanceAfter2-balanceBefore2為攻擊者mint出對應的LPtoken。注意:這里面balanceBefore2=balanceBefore1。
STEP3:
在step2結束后,交易控制流返回到第一次的deposit之中,注意:這時候Akropolis計算了balanceAfter1并且balanceAfter1=balanceAfter2,然后根據step1中的balanceBefore1計算出balance之差,再一次給攻擊者mint出LPtokens。
雖然在整個交易中攻擊者只給Protocol傳進去一筆約$25k的DAI,但是由于重入的機制,導致的第二次deposit之后balanceBefore1沒有及時更新,使得Akropolis在函數控制流返回到第一次deposit函數中的時候以為攻擊者又給Protocol轉移了$25k的DAI。從而給用戶再一次mint出對應的LPtokens。
Others
總體而言,攻擊者通過重入+構造惡意token合約的方式,在僅僅花費$25kDAI的情況下使得Akropolis以為攻擊者存入了$50kDAI,最后取出這50kDAI,完成攻擊,獲利25kDAI。
Step3中我們提到了其實balanceAfter2比balanceAfter1小1,這個原因是在deposit的后續操作中會將用戶傳遞進來的token注入到Curve的池子之中,而Curve的合約中會檢查Curve之中Token的余額變化,如果說池子的余額沒有變化,那么Curve就會執行revert。所在faketoken的transferFrom函數中一定要往protocol之中轉一筆錢,不過數量不限。
可以看出在faketoken的transferFrom函數中攻擊者向Protocol轉了1個DAI。
0x3.總結
由于Akropolis并沒有對用戶傳遞進來的token參數進行校驗,加上deposit函數沒有防重入,導致攻擊者利用偽造的tokencontract重入deposit函數,從而達到偷天換日,魚目混珠,使用少量的DAI換出大量的DAI的效果。
BlockSec團隊以核心安全技術驅動,長期關注DeFi安全、數字貨幣反洗錢和基于隱私計算的數字資產存管,為DApp項目方提供合約安全和數字資產安全服務。團隊發表20多篇頂級安全學術論文(CCS,USENIXSecurity,S&P),合伙人獲得AMiner全球最具影響力的安全和隱私學者稱號(2011-2020排名全球第六).研究成果獲得中央電視臺、新華社和海外媒體的報道。獨立發現數十個DeFi安全漏洞和威脅,獲得2019年美國美國國立衛生研究院隱私計算比賽(SGX賽道)全球第一名。團隊以技術驅動,秉持開放共贏理念,與社區伙伴攜手共建安全DeFi生態。
https://www.blocksecteam.com/
contact@blocksecteam.com
在昨晚的眾議院金融服務委員會中,美聯儲主席鮑威爾發表了相關講話,這個講話被市場解讀為利好,但整個過程中也不是單向的利好,還是有模棱兩可的地方.
1900/1/1 0:00:00介紹:Raydius迎來了第二次社區更新。在此行業的全球嚴厲管制手段下,我們不但不會停止前進的腳步,并且還會一如既往的深入研究,盡最大的努力將Raydius建設成最好的項目之一.
1900/1/1 0:00:00編譯|白澤研究院 這篇由3部分組成的文章重點介紹互聯網歷史上的最新章程—Web3的原因、內容和方式.
1900/1/1 0:00:00“波卡知識圖譜”是我們針對波卡從零到一的入門級文章,我們嘗試從波卡最基礎的部分講起,為大家提供全方位了解波卡的內容,當然這是一項巨大的工程,也充滿了挑戰.
1900/1/1 0:00:00隨著數字經濟的發展,區塊鏈作為新型分布式數據庫,在推動相關行業的數字化轉型進程、促使經濟社會發生深刻變革中發揮著至關重要的作用.
1900/1/1 0:00:00前天在文章中我寫到了股市,引起了一些讀者的爭議,不少讀者對此發表了不同的看法。我寫股市的初衷除了看到近期各種監管措施的綜合出臺讓我覺得國家明顯希望將社會資金引入股市之外,還有近期發生在身邊的兩個.
1900/1/1 0:00:00