去中心化金融(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.背景介紹
工程公司FTC與ReserveBlock RBX網絡集成:4月3日消息,根據檢查、研究和工程公司FTC發布的官方公告,它已開始與ReserveBlock RBX網絡合作。ReserveBlock RBX網絡是一種基于proof-of-assurance(PoA)共識的去中心化協議。FTC將利用該區塊鏈存儲和驗證技術數據。
FTC將采用該區塊鏈協議作為技術基礎,以透明和防篡改的方式對公司的文件、實驗室測試結果和文件進行代幣化。此外,FTC已加入ReserveBlock RBX作為驗證器。(U.Today)[2023/4/4 13:42:48]
2020年可謂是去中心化金融的元年。隨著DeFi生態的不斷發展,越來越多的DeFi項目上線以太坊。普通用戶可以選擇自己喜歡的DeFi項目進行投資以獲得收益。但是隨著DeFi市場的急劇擴張,普通用戶面臨的一個問題就是在眾多DeFi項目中如何選擇投資的目標,他們需要有人來幫助他們來進行投資。在這種情況下,一系列資產托管平臺、投資組合平臺應需而生。Akropolis就是眾多資產托管平臺中的一個:
普通用戶將個人的數字資產投入到Akropolis中,由Akropolis確定投資方向,優化投資策略。Akropolis獲得投資收益之后,將收益按比例分配給投資Akropolis的普通用戶。以現實中的金融活動舉例子,Akropolis就像是基金,其所投資的DeFi項目就是股票,基民購買基金,基金持有股票,獲得收益后將收益分配給基民。
SSV開發公司Blox向幣安轉入近3萬枚SSV:金色財經報道,據推特用戶余燼監測,SSV開發公司Blox Holdings地址向幣安轉入29,990枚SSV(價值約114萬美元)。這個地址中的SSV源于2021年10月18日將5000萬枚CDT(ssv.network舊代幣)兌換為50萬SSV,目前地址內還持有470,010SSV(價值約1790萬美元)。[2023/3/13 13:00:31]
0x1.Akropolis機制
為了便于理解,我們首先簡要地介紹一下和此次攻擊相關的兩個實體合約:Protocolcontract和Akropoliscontract
Protocol:Protocol可以簡單地理解為:用戶將手中的token投資到Protocol中,獲得Protocol的份額,等到將來Protocol中的資產升值了,那么用戶便可以從Protocol獲取到一定的收益
Akropolis:之前我們講過,由于ETH上的DeFi項目太多了,如果用戶要投資多個項目,要么不知如何抉擇,要么操作難度比較大,所以Akropolis扮演了一個投資聚合器的角色:Akropolis綁定了多個DeFi投資項目,用戶可以很方便地通過Akropolis使用手里的token進行投資:用戶只需要簡單的調用Akropolis的函數,指定想要投資的protocol,那么Akropolis就會去幫你在不同的protocol中完成投資。
總體的交互邏輯如圖所示:
Blockchains 收購身份管理平臺Cambridge Blockchain:總部位于美國內華達州的Blockchains LLC.收購了由PayPal、富士康等公司支持的身份管理平臺Cambridge Blockchain。Cambridge Blockchain成員Matthew Commons、Alex Oberhauser、Muthu Arumugam和該公司的軟件開發人員將加入Blockchains的數字身份團隊,并期望在2021年初進行完全整合。
Blockchains執行副總裁Lee Weiss表示,此次收購旨在于明年4月左右發布無托管錢包。(Coindesk)[2020/12/1 22:44:50]
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中。
Akropolis再計算protocol中token的數量:nBalanceAfter。
Riot Blockchain股價本周上漲50%:金色財經報道,公開交易的比特幣礦業公司Riot Blockchain的股價本周上漲了50%,交易價格略低于6.00美元。同期,比特幣上漲了近17%。周五早盤,該公司的股票價格甚至上漲到了6.60美元,是自2018年9月初以來的最高水平。[2020/11/21 21:33:16]
得到用戶投資的數量:nDeposit=nBalanceAfter-nBalanceBefore。
通過用戶投資的數量計算得到用戶投資份額。
Akropolis.depositToProtocol函數:
Akropolis.distributeYieldInternal函數和Akropolis.updateProtocolBalance函數:
Protocol.normalizedBalance函數:
聲音 | BlockVC創始人徐英凱:資金涌現比特幣形成虹吸效應,給了其他主流幣洗盤吸籌的機會:BlockVC創始人徐英凱昨日在微博表示,縱觀整個加密數字貨幣發展史,在2017年1月ICO興起之前比特幣的平均市值占有率在80-85%,而在2018年1月ICO帶來的牛市頂點比特幣的市場占有率降低到了33%,目前比特幣的市場占有率接近70%,距離歷史早期水平還有10-15%的空間。不過,任何事情物極必反,當大家覺得比特幣將成為加密市場里面唯一投資工具的時候,所有資金將快速涌入比特幣形成虹吸效應,反而會給其他主流幣主力提供洗盤吸籌的機會,其他競爭資產的超跌反彈也會成為后續資金輪動中的確定性機會。[2019/8/8]
注意,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
加入PolkaWorld社區,共建Web3.0!Kusama的第一輪插槽拍賣結束已經有3周的時間.
1900/1/1 0:00:00作為一個旨在存儲人類社會最重要信息的分布式網絡,為抵達這一最終目標,Filecoin的前方依然還有很長的一段路要走,在實現這一愿景的過程中,對于Filecoin而言最重要的事項之一.
1900/1/1 0:00:00在數字貨幣市場不景氣的狀態下,AxieInfinity以一枝獨秀的姿態讓“PlaytoEarn”開始風靡。不僅幣價的反應遠超大盤,在國內外社群媒體中的聲量也引發了極大的關注度.
1900/1/1 0:00:00區塊鏈基礎設施RangersProtocol測試網已在7月19日完成最后部署并上線,并公布了其第一個從以太坊移植的dApp——去中心化借貸協議BlueStone.
1900/1/1 0:00:007月1日,國際清算銀行發表一篇名為《不信任還是猜測?美國加密貨幣投資的社會經濟驅動因素》的研究性文章,作者從調查報告、數據報告等對目前美國加密貨幣投資者進行了研究.
1900/1/1 0:00:00互聯網技術推動了社交平臺的發展,孕育了Facebook、Wechat、weibo等巨頭,讓人類社會習慣建立的虛擬社交關系.
1900/1/1 0:00:00