比特幣交易所 比特幣交易所
Ctrl+D 比特幣交易所
ads

[BlockSec DeFi 攻擊分析系列之三] 偷天換日:深度剖析 Akropolis 攻擊事件_POLIS

Author:

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

去中心化金融(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:02PMUTC#11242695

閱讀建議:

如果您剛剛接觸DeFi(Ethereum),可以從頭看器,但是文章比較長,看不下去記得點個關注再走。

如果您對Akropolis等DeFi聚合器項目比較了解,可以直接從「0x2攻擊分析」開始。

數據:Aptos將于2月12日解鎖約454萬枚APT,約占總供應量的0.45%:金色財經報道,Token Unlocks數據顯示,公鏈項目Aptos將于北京時間2月12日8:00解鎖4,543,478.03枚APT,占總供應量(10億枚)的0.454%。其中,社區解鎖3,210,145枚,基金會解鎖1,333,333枚。[2023/2/6 11:49:50]

0x0.背景介紹

2020年可謂是去中心化金融的元年。隨著DeFi生態的不斷發展,越來越多的DeFi項目上線以太坊。普通用戶可以選擇自己喜歡的DeFi項目進行投資以獲得收益。但是隨著DeFi市場的急劇擴張,普通用戶面臨的一個問題就是在眾多DeFi項目中如何選擇投資的目標,他們需要有人來幫助他們來進行投資。在這種情況下,一系列資產托管平臺、投資組合平臺應需而生。Akropolis就是眾多資產托管平臺中的一個:

普通用戶將個人的數字資產投入到Akropolis中,由Akropolis確定投資方向,優化投資策略。Akropolis獲得投資收益之后,將收益按比例分配給投資Akropolis的普通用戶。以現實中的金融活動舉例子,Akropolis就像是基金,其所投資的DeFi項目就是股票,基民購買基金,基金持有股票,獲得收益后將收益分配給基民。

0x1.Akropolis機制

金色財經挖礦數據播報:ETH今日全網算力上漲1.29%:金色財經報道,據蜘蛛礦池數據顯示:

BTC全網算力164.516EH/s,挖礦難度21.87T,目前區塊高度677374,理論收益0.00000632/T/天。

ETH全網算力489.745TH/s,挖礦難度6378.20T,目前區塊高度12157107,理論收益0.00583766/100MH/天。

BSV全網算力0.538EH/s,挖礦難度0.08T,目前區塊高度681050,理論收益0.00167328/T/天。

BCH全網算力1.281EH/s,挖礦難度0.19,目前區塊高度681356,理論收益0.00070241/T/天。[2021/4/2 19:39:11]

為了便于理解,我們首先簡要地介紹一下和此次攻擊相關的兩個實體合約:Protocolcontract?和?Akropoliscontract

Protocol:Protocol?可以簡單地理解為:用戶將手中的token投資到?Protocol?中,獲得?Protocol?的份額,等到將來?Protocol?中的資產升值了,那么用戶便可以從?Protocol?獲取到一定的收益

Akropolis:之前我們講過,由于ETH上的DeFi項目太多了,如果用戶要投資多個項目,要么不知如何抉擇,要么操作難度比較大,所以Akropolis扮演了一個投資聚合器的角色:Akropolis綁定了多個DeFi投資項目,用戶可以很方便地通過Akropolis使用手里的token進行投資:用戶只需要簡單的調用Akropolis的函數,指定想要投資的protocol,那么Akropolis就會去幫你在不同的protocol中完成投資。

以太坊Gas價格為近3個月最低值,距最高點下降93%:Blockchair數據顯示,昨日以太坊網絡Gas價格中位數達到近3個月以來的最低值約36 Gwei,相比歷史最高值已下降93%。歷史上以太坊網絡Gas價格單日中位數最高為今年9月17日,約545 Gwei,當天Uniswap公開了治理代幣UNI。[2020/10/12]

總體的交互邏輯如圖所示:

Akropolis提供了兩個外部接口:functiondeposit(address_protocol,addressmemory_tokens,uint256memory_dnAmounts)?和?functionwithdraw(address_protocol,addresstoken,uint256dnAmount,uint256maxNAmount)

Akropolis.deposit?fucntion:deposit?函數的功能是:

用戶調用?deposit。

Akropolis先計算?Protocol?中有多少的token:nBalanceBefore。

Akropolis將用戶的token轉入到?Protocol?中。

Akropolis再計算protocol中token的數量:nBalanceAfter。

LBank ETF上線OMG等交易對 截止目前OMG3L最高漲幅達1357.9%:據官方消息,LBank于8月19日16:00(UTC+8) ETF杠桿專區上線OMG3L(3倍做多)、OMG3S(3倍做空)、ATOM3L(3倍做多)、ATOM3S(3倍做空)、COMP3L(3倍做多)、COMP3S(3倍做空) 、WAVES3L(3倍做多)、WAVES3S(3倍做空)交易對, 其中OMG3L自上線以來最高漲幅1357.9%。同時,LBank啟動了等值5千USDT獎勵的ETF交易活動,用戶可通過交易ETF參與活動瓜分獎勵。

杠桿ETF是LBank推出的永續杠桿產品,目前已上線幣種有BTC、ETH、EOS、BCH、LTC、VET、LINK、DOGE、BNB、OKB、HT、LEND、ZEC,后續將陸續上線更多幣種的3倍多空交易。更多詳情請關注LBank官網公告。[2020/8/21]

得到用戶投資的數量:nDeposit=nBalanceAfter-nBalanceBefore。

通過用戶投資的數量計算得到用戶投資份額。

Akropolis.depositToProtocol?函數:

Akropolis.distributeYieldInternal?函數和?Akropolis.updateProtocolBalance?函數:

NEBL暴漲,漲幅達到83.16%:根據幣安交易平臺數據顯示,NEBL最新成交價格為人民幣116.76元,24小時最高價達人民幣214.51元,最低價格為人民幣5549元,漲幅83.16%。[2018/1/7]

Protocol.normalizedBalance?函數:

注意,Protocol.normalizedBalance?中的?_registeredTokens=。deposit函數中使用到的?distributeYieldInternal?函數和?updateprotocolBalance?函數的功能都是查詢當前?Protocol?函數中所有代幣的余額,注意這里面?normalizedBalance?的意思是對余額歸一化處理。

用戶可以調用?deposit?函數,通過指定?Protocol?和token以及token的amount,將一定數量的代幣存入到和Akropolis中,Akropolis根據用戶存入的代幣數量給用戶返還Akropolis的LPToken。隨后使用用戶投資的token投入到?Protocol?中。

withdraw?fucntion:

用戶通過調用?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/

Tags:POLISPOLIPOLLISAkropolis DelphiPolySwarmAIENGLISH

歐易交易所app官網下載
中創|關于NFT這些知識,你知道嗎?_區塊鏈

前言: 區塊鏈技術逐漸成熟的今天,人們日常生活的方方面面都可以接觸到。此前聽起來或許很高大上的區塊鏈,文化、娛樂、游戲、影視、媒體、內容、知識產權等方面的應用也逐漸興起,區塊鏈不再曲高和寡,從云.

1900/1/1 0:00:00
門羅幣開發者、Yat 聯合創始人 Riccardo Spagni 因與加密無關的欺詐指控被捕,并將被引渡南非_PAG

鏈聞消息,隱私代幣門羅幣Monero首席開發者、表情符號用戶名項目Yat聯合創始人RiccardoSpagni于7月20日在田納西州納什維爾被捕并將被引渡到南非,面臨與加密貨幣無關的欺詐指控.

1900/1/1 0:00:00
Bibox將于2021年8月2日上線 CherrySwap(CHE)_BOX

尊敬的Bibox用戶: Bibox創新區將于2021年8月2日(UTC8)上線CherrySwap(CHE).

1900/1/1 0:00:00
幣圈全盤上漲就代表牛市要來了嗎?FIL幣即將暴漲?_ITG

昨天冷面佛在家刷視頻的看見一位幣圈網友發的一條動態,說的是:“幣圈全盤上漲,牛市即將來臨。”然后配的也是昨天行情上漲的幾張圖.

1900/1/1 0:00:00
歐易OKEx上線EFINITY (EFI)?的公告_okex

尊敬的歐易OKEx用戶:歐易OKEx上線EFINITY(EFI),具體時間如下:1.EFI充值:8月4日17:00(HKT)2.EFI/USDT的市場交易:8月4日18:00(HKT)3.EFI.

1900/1/1 0:00:00
關于WBF支持ETH(Ethereum)硬分叉升級的公告_HYD

尊敬的用戶: 根據以太坊官方計劃,ETH(Ethereum)?將于區塊高度達到12,965,000時)進行倫敦硬分叉升級。WBF將支持本次硬分叉.

1900/1/1 0:00:00
ads