加密貨幣交易所 加密貨幣交易所
Ctrl+D 加密貨幣交易所
ads
首頁 > 火星幣 > Info

BlockSec DeFi 攻擊系列之五以假亂真:DODO V2 眾籌池造襲事件分析_USD:USDT

Author:

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

去中心化金融(DeFi)作為區塊鏈生態當紅項目形態,其安全尤為重要。從去年至今,發生了幾十起安全事件。BlockSec作為長期關注DeFi安全的研究團隊(https://blocksecteam.com),獨立發現了多起DeFi安全事件,研究成果發布在頂級安全會議中(包括USENIXSecurity,CCS和Blackhat)。在接下來的一段時間里,我們將系統性分析DeFi安全事件,剖析安全事件背后的根本原因往期回顧:(1)我為自己代言:ChainSwap攻擊事件分析(2)傾囊相送:Sushiswap手續費被盜(3)偷天換日:深度剖析Akropolis攻擊事件(4)表里不一:Sanshulnu的Memestake合約遭襲事件分析0x0.前言

北京時間2021年3月9日凌晨,以太坊(Ethereum)去中心化交易平臺DODO的多個V2眾籌池遭到攻擊,攻擊者利用眾籌池的合約漏洞,用自己創建的token套出了池內的token,上演了一出貍貓換太子的把戲。只不過,從之后的分析來看,事情的發展顯然偏離了攻擊者的預期軌道……如果您是個以太坊小白又恰巧喜歡看故事的話,可以從下面的0x1開始閱讀。如果您喜歡簡單直接的攻擊分析的話,那可以下拉到0x2開始閱讀。接下來,就讓大家跟我一起來看看攻擊者到底做了什么,而當時又到底發生了什么。為了便于后文的講述,就管這次的攻擊者(Attacker)叫做小A吧。0x1.事件回顧

“攻擊成功了嗎?成功了,但沒完全成功。”這可能就是小A當時的心理寫照Nocode,nobug有代碼的地方,就可能有漏洞。智能合約雖然被人們冠以“智能”二字,但歸根到底也是一段段的代碼,因而也總被別有用心的人揪住它的漏洞搞一波錢實現財富自由。我們這次故事中的智能合約,就是DODO的V2眾籌池合約。而我們的主角小A,就是那個發現了該合約漏洞并試圖趁機搞錢的人。0x1.1概念簡析

提了這么多次DODOV2眾籌池,那它到底是個啥玩意兒?簡單來說呢,它就是個資金池,只不過本文中的資金所指代的并非我們日常接觸到的法幣,而是以太坊上的代幣(ERC20token)。這種資金池在初始化的時候會設定兩種鏈上有價值的ERC20token作為這個池子的tokenpair,然后用戶可以正常使用這些池子提供的服務。在這次小A針對DODOV2眾籌池的攻擊中,就是利用了該池子提供的閃電貸(flashloan)服務。閃電貸(flashloan)相比于普通借貸,具有無需抵押即可借貸大量資金,加之還不上錢就狀態回滾的特點。簡單來說就是可以空手套白狼,要是最后借出的錢自己一通操作之后虧了還不上也不打緊,所有相關狀態會回滾到借貸之前,而對于借貸者來說唯一的損失除了手續費之外,可能就只有時間了。使用閃電貸的邏輯也很簡單,就是用戶從資金池借錢-->對借來的錢進行操作-->還錢,而這些需要在一筆交易中完成。Ok,簡單了解完相關的概念之后,咱接著看小A的操作。0x1.2小A的騷操作

礦企Argo Blockchain在9月挖出215枚BTC:10月11日消息,比特幣礦企Argo Blockchain在9月份挖出215枚比特幣或比特幣等價物,8月份挖出235枚BTC。Argo Blockchain表示,比特幣產出量減少主要是由于9月份平均網絡難度增加12%。截至2022年9月30日,Argo Blockchain持有512枚比特幣,其中167枚為BTC等價物。

此外,10月15日起,Perry Hothi將辭去Argo Blockchain首席技術官的職務,并將擔任公司的過渡顧問。技術職能部門將由目前擔任技術和開發副總裁的Jean Esquier領導。Jason Zaluski將加入團隊擔任挖礦副總裁。[2022/10/11 10:31:21]

小A接下來做了兩件事兒。第一件事兒就是創建了兩個ERC20token的合約,說白了就是造了倆假幣(因為沒價值),分別叫做FDO和FUSDT.創建完這倆假幣之后呢小A就把它們存入到之后將被攻擊的DODO池子里了。小A做的第二件事兒就是使用了DODOV2眾籌池的閃電貸(flashloan)服務。上文提到閃電貸使用邏輯中的一環就是對借來的錢進行操作,而本文的主角小A就是在這一環節上玩兒出了花樣。小A發現這個DODOV2眾籌池是可以被重新人為初始化的,而且沒什么限制。接著小A就在借出錢之后把這個池子重新初始化了,并且初始化時設定的tokenpair變成了小A自己造的倆假幣FDO/FUSDT(這就是之前提到的考點,現在考到了吧)。并且小A在借錢之前已經通過上文他做的第一件事兒把足量的兩種假幣都預先存入到了這個池子里,這就導致池子在檢查小A欠錢情況的時候,所檢查的token不再是之前的真幣,而是小A存入其中的假幣,加之數額也足夠。這樣一來小A就用假幣套出了真幣。咱們可以對上述過程打個簡單的比方,細節按下不表。就是有一家銀行,這個銀行就可以類比上文提到的資金池。同時該銀行也有一個小本本拿來記賬,只不過在小本本的首頁有一條記錄。至于其他的幣種,美元也好,越南盾也好。用戶也可以往里面存,但銀行不管你,它的小本本上雖然也會記賬,但核對時它只看涉及到人民幣的記錄。為了類比眾籌池可以被重新初始化的問題,可以這么理解。就是這個小本本有個問題,問題出在首頁的這句的規定是用鉛筆寫的,并且這個小本本就放在窗口,外人拿個橡皮擦+鉛筆就能改。然后這個問題被小A發現了,他先往這個銀行存了100越南盾,銀行會記賬。然后小A又去銀行借出100人民幣,銀行又記賬。注意銀行會檢查所有用戶對人民幣的借存情況并和儲備量比對,從而確認是否有用戶借了人民幣但沒還。剛借完錢,小A就雞賊地掏出準備好的鉛筆+橡皮將小本本首頁的規定改為了。然后銀行核對金額的時候,因為規定改為了只處理越南盾,而查驗的時候發現越南盾的儲備量和小A存入的越南盾數額是一樣的,說明沒人欠銀行錢。然后小A拿著借出來的人民幣瀟灑離去,不再回頭。小A針對DODOV2眾籌池的攻擊思路就如上文所述,小A接下來要做的就是把想法付諸實際行動。本文從合約代碼層面要分析的攻擊也就是上述提到的攻擊,然而咱的故事還沒完。不想接著看故事的看官可以直接下滑到0x2的攻擊分析部分,剩下的看官,就請容我接著給您講故事。0x1.3攻擊過程:山路十八彎

STAT和Bloomingbit合作推出“頂級交易者 NFT”:金色財經報道,基于Kakao的NFT平臺Klaytn宣布與Bloomingbit合作推出“Top Trader NFT Drops”。Top Trader NFT Drops 是一項服務,允許其用戶訂閱頂級交易者的實時投資組合和交易歷史。該服務支持為Bloomingbit和STAT選擇的表現優異的交易者發行和拍賣訂閱Top Trader Cards(NFT)。如果您從 Top Trader Drops 中獲得 NFT,您可以訂閱發布相應 NFT 的交易者的實時投資組合、交易歷史以及各種信息內容。[2022/7/30 2:47:12]

第一回.螳螂捕蟬黃雀在后咱書接上文。項目方也就是DODO采用相同的邏輯創建了多個池子,而這些池子都有同樣的漏洞。小A第一次瞄準的池子是(WSZO/USDT)池,WSZO和USDT就是兩種有價值的代幣(ERC20token)。他美滋滋的把自己的攻擊邏輯寫入一筆交易之后,就準備躺著收錢,可就在這時,出岔子了。咱知道,以太坊上的交易存在交易費,這筆費用是用戶支付給礦工的。所以礦工為了自身利益最大化,當他們從pengding池打包交易準備上鏈時會查看各條交易的交易費并排個序,交易費高的優先上鏈。而由于以太坊的去中心化機制,黑暗森林法則在這也同樣適用。DeFi(去中心化金融)項目的攻擊者、套利者抑或搶跑者潛伏在世界各地,一旦發現目標,就會一擁而上,至于最后誰能成功,除了技術等因素,就得看誰出的交易費高了。回到主角小A,他發現了漏洞準備趁機搞一波錢,可小A的舉動被另一個角色--搶跑機器人--發現了,咱稱這個搶跑機器人為小B吧。小B就在交易費上做了文章,他把交易的油費(gasprice)提高了,從而增加了這筆交易的交易費。這就使得礦工在打包交易的時候優先打包了小B的交易。一般把小B的這種操作叫做搶跑交易(frontrunning)。等輪到打包小A交易的時候,WSZO/USDT池子里的WSZO和USDT已經空空如也,只剩下一堆沒啥價值的(FDO/FUSDT)。小A可能以為這一次的失敗只是一次普通的搶跑交易,于是他又故技重施。只不過這次的目標換成了(ETHA/USDT)池,而且為了防止被搶跑,在這一次的交易中小A提高了交易的油費(gasprice)。可小A不知道的是,他已經被小B盯上了。同樣的套路,同樣的手法,小A又一次被小B搶跑了交易。第二回.半路殺出個程咬金到目前為止,小A兩次攻擊都是給小B做了嫁衣,甚至自己還虧了交易費!小A那個氣啊,于是痛定思痛,把目標瞄向了下一個池子(wCRES/USDT)。并且這一次小A成功的繞過了小B的監控。事情發展到現在似乎小A就要成功了,可現實就是喜歡和小A開玩笑。第三次攻擊雖然繞過了小B,但小A把錢成功取出來之后并沒有直接轉移到自己的地址,而是創建了一個新合約來接收這筆錢。小A的想法是先把錢暫存在這個新合約內,之后再轉移到自己的賬戶中。然而,小A的這個用來暫存贓款的合約又有個漏洞,就是任何人都能從這個合約中取出(withdraw)合約內的資金。However,thiscontracthadaloopholethatallowedanyonetowithdrawassetsfromit.而恰巧這個漏洞,被另一個角色(小C)發現了。于是,在小A發出一筆交易準備從這個合約中取回贓款的時候,又雙叒被搶跑了,這不過這一次搶跑者變成了小C。看到這,小A既是攻擊者,又是搶跑交易的受害者。這波啊,小A算是偷雞不成蝕把米。第三回.倔強的小A前文提到,具有同樣邏輯漏洞的池子有多個。小A又雙叒叕準備發起他的第四次攻擊了,這一次,目標換成了(DODO/USDT)池。這一次小A學聰明了,一方面他將暫存贓款的合約替換為了新合約,另一方面小A也將代幣(token)轉移的過程合并在了一筆交易中,以免出現像第三次攻擊中被小C搶跑的情況。而這一次,不撞南墻不回頭的小A終于成功用假幣(FDO/FUSDT)搞到了真錢(DODO/USDT)。第四回.瘋起來連自己都咬四次攻擊終獲成功之后小A滿足了嗎?事實告訴我們答案是否定的。不知道小A是怎么想的,可能是歷經曲折終于成功導致興奮過頭。這第五次攻擊,他的目標瞄向了(wCRES/USDT)池。是不是有點眼熟?沒錯!這個池子正是小A在第三次攻擊中的目標池子。而經過第三次攻擊的洗劫之后,這個池子已經從(wCRES/USDT)池變為了(FDO/FUSDT)池,即真幣池成了假幣池。因而在這一輪攻擊中,小A用同樣的攻擊套路得到的結果無非就是拿著新假幣去換舊假幣……而這倆假幣還都是小A自己造的。可能,小A還是個懷舊的人吧……咱們關于小A的故事,也走向了尾聲。或許以太坊(Ethereum)對于攻擊者而言就是一片黑暗森林,獵手與獵物的身份在這個特殊的競技場也并非一成不變。終要記得,當你在凝視深淵的時候,深淵也在凝視著你。ok,接下來就是正兒八經的攻擊分析環節了。準備好了嗎?坐穩扶好,發車了。0x2.攻擊分析

特斯拉、MicroStrategy和Block在本輪熊市中合計損失近25億美元:金色財經報道,根據特斯拉、MicroStrategy和Block的 BTC 持倉數據顯示,這三家公司在本輪熊市中已損失近 25 億美元,其中:

1、特斯拉持有 43,200 枚 BTC(相當于流通中的 2100 萬個比特幣總供應量的 0.206%)價值已下跌超 7 億美元;

2、Microstrategy 持有 129,218 枚 BTC(約占流通中比特幣總量的 0.615%)價值已損失接近 16 億美元;

3、Jack Dorsey 旗下支付公司 Block 持有 8,027 枚 BTC(約占流通中比特幣總量的 0.038%)價值已損失近 1.5 億美元。

MicroStrategy 首席執行官 Michael Saylor 此前在社交媒體上透露,該公司有 2.05 億美元的定期貸款,需要維持價值 4.1 億美元的抵押品,但 MicroStrategy 已經預測到波動性并構建了資產負債表以便在熊市中繼續 HODL。[2022/6/19 4:38:37]

為便于理解,下文將以第三次攻擊為例子來進行分析,涉及到的池子為(wCRES/USDT)池0x2.1代碼分析

以下提到的函數都來源于資金池(wCRES/USDT)的合約代碼,并且在本次攻擊事件中被涉及。0x2.1.1getVaultReserve函數

首先來看getVaultReserve函數,這個函數的功能很簡單,就是當用戶調用它的時候會返回當前池子里tokenpair的儲量。0x2.1.2flashloan函數

美股部分區塊鏈概念股盤前走弱,Riot Blockchain跌近5%:行情顯示,美股部分區塊鏈概念股盤前走弱,Riot Blockchain跌近5%,Marathon Patent跌近4%,迅雷跌1.5%,Bit Digital跌1.2%[2021/5/25 22:43:27]

上圖就是本次攻擊中資金池合約的flashloan函數。可以看到當用戶調用這個函數時,會先根據用戶傳入的baseAmount和quoteAmount這兩個參數將相應數量的token轉入參數assetTo所代表的地址。到此,就算是完成了閃電貸(flashloan)的借錢環節。順著代碼往下看,只要data不為空,就會觸發外部邏輯。而這個外部邏輯,就是調用者自己實現的,本次攻擊的實現,也正是在這個外部邏輯執行時做了手腳。0x2.1.3init函數

上圖就是本次攻擊中最為關鍵的初始化函數init.可以注意到該函數是外部調用的,而且最關鍵的是,這個函數有以下兩個特點:這就意味著任何人都可以從外部調用這個函數。則意味著這個init函數除了在該池子建池時被必要的調用一次后,仍然可以在任何時候被調用來重新初始化這個池子。調用者調用這個函數時,所傳入的兩個參數baseTokenAddress和quoteTokenAddress會被用來給變量_BASE_TOKEN_和_QUOTE_TOKEN_分別的重新賦值。而這兩個變量的改變就意味著這個池子的tokenpair也會發生改變。而這,便是wCRES/USDT池變FDO/FUSDT的原因。0x2.2攻擊過程

攻擊交易的流程如下圖所示

動態 | BlockFi將調整比特幣和以太坊利息賬戶中的存款利率:據cryptoglobe報道,5月21日,金融科技創業公司BlockFi宣布已決定調整其比特幣和以太坊利息賬戶中的存款利率,將于6月1日生效。BlockFi表示,BlockFi利息賬戶現在擁有“超過1億美元的管理資產”。對于,BTC利息賬戶,余額為25 BTC以上的賬戶利率從2%增加到2.15%,而余額為0.5 BTC和25 BTC之間的賬號將繼續獲得6.2%的利息。余額為25 ETH和100 ETH之間的賬號利率從6.2%降至3.25%,100 ETH 以上的余額將繼續獲得0.2%的利息。[2019/5/22]

Step2攻擊者根據Step1得到的儲量,分別調用兩個假幣合約的transferFrom函數給資金池合約(DLP)轉入略多于該儲量的假幣(FDO和FUSDT),從而保證能通過flashloan函數的余額檢查。

Step3攻擊者接著調用資金池合約(DLP)的flashloan函數,借出了略少于資金池儲量的真幣(wCRES和USDT)。

Step4flashloan函數在將wCRES和USDT轉入到攻擊者預先設置好的合約地址之后,會自動調用攻擊者的外部邏輯。而攻擊者就是在外部邏輯的實現中調用了wCRES/USDT這個池子的初始化函數init,將該池子的tokenpair替換為了FDO/FUSDT。

0x3.總結及安全建議

本次攻擊之所以發生,最主要的問題出在DODOV2眾籌池的init函數上。查看該函數的調用情況可以發現,正常的邏輯應該是該函數只能在剛建池的時候被調用一次,之后就應該設置訪問權限,同時也不能被重復調用。攻擊者就是利用了init函數可以被重復調用來重新初始化池子的這一漏洞,結合閃電貸(flashloan)將池子中的真幣用假幣套取了出來,從而完成了攻擊。因此,我們給相關項目方的建議有:對項目合約的關鍵功能做好權限審核工作,以免核心函數由于權限要求過低被濫用引發不可預料的后果從而造成損失。提高項目代碼審計意識,項目上線前需咨詢相關的區塊鏈安全公司進行充分的安全審計,最大程度的保證項目安全。0x4.參考

慢霧:貍貓換太子——DODO被黑分析DODOPoolIncidentPostmortem:WithaLittleHelpfromOurFriendsImportantupdateregardingrecenteventsonDODODODO-REKT0x5.附錄

文中涉及的外部地址和合約地址

攻擊者A搶跑者B搶跑者C資金池DLP(WSZO/USDT)資金池DLP(ETHA/USDT)資金池DLP(wCRES/USDT)資金池DLP(DODO/USDT)文中涉及的交易

第一次攻擊A的攻擊交易(fail)B對A的搶跑交易第二次攻擊A的攻擊交易(fail)B對A的搶跑交易第三次攻擊A的攻擊交易C的搶跑交易(搶跑了A對代幣USDT的轉移)A被C搶跑的代幣(USDT)轉移交易C的搶跑交易(搶跑了A對代幣wCRES的轉移)A被C搶跑的代幣(wCRES)轉移交易第四次攻擊A的攻擊交易第五次攻擊A的攻擊交易

Tags:USDSDTUSDTBLOusdt幣圈子usdt幣交易違法嗎usdt幣怎么挖礦blok幣發行總量

火星幣
Serum路線圖2.0版發布:向大容量、多應用及高速度的持續延伸_SER:sero幣挖礦

向大容量、多應用及高速度之路——持續延伸.........自2020年9月上線至今,Serum項目已經吸引了大量關注,并建立了一個熱情洋溢、振奮人心的生態系統.

1900/1/1 0:00:00
美國SEC開出首例DeFi罰單,「狂野西部」閃紅燈_DEF:DeFi Firefly

在美國證券交易委員會主席GaryGensler發表了題為《加密貨幣與國家安全》演講的3天后,SEC在官網發布了首例針對DeFi平臺監管的案例.

1900/1/1 0:00:00
解析加密貨幣定量分析「四大金剛」:價格、交易量、供應量以及市值_區塊鏈:Demy Games

對于加密貨幣這樣一個新興行業,行業的蓬勃發展離不開一套科學的研究分析方法。本文將簡單介紹目前行業中應用比較廣泛的幾個指標,即定量分析四大金剛,包括價格、交易量、供應量以及市值.

1900/1/1 0:00:00
“NFT老炮”CryptoPunks,怎么就在這會爆火了?_PUN:The Grand Banks

最近加密圈的熱點話題,多來自NFT領域。AxieInfinity之外,本周最受關注的項目當屬CryptoPunks.

1900/1/1 0:00:00
Coingecko:NFT和去中心化域名間的聯動可能很快出現_COI:Bitcoin Dex on Heco

NFT是很大的范疇,任何具有獨一無二特性的內容都可以成為NFT,除了人們看到的藝術品、收藏品、游戲中的物品等,甚至連域名、提供流動性的LP代幣、球賽門票等等都可以成為NFT.

1900/1/1 0:00:00
深度分析 | ETH 2.0 去中心化的守護者 Lido Finance_ETH:Ethereum Message Search

研究員:李雨軒第一節 研報要點 ——●Lido是以太坊社區選出來對抗CEX的質押池,肩負著ETH2.0去中心化的使命,如果Lido成為最大的質押池.

1900/1/1 0:00:00
ads