以太幣交易所 以太幣交易所
Ctrl+D 以太幣交易所
ads
首頁 > SHIB > Info

BlockSec DeFi攻擊分析系列之四表里不一:Sanshu Inu的Memestake合約遭襲事件分析_MEM

Author:

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

去中心化金融(DeFi)作為區塊鏈生態當紅項目形態,其安全尤為重要。從去年至今,發生了幾十起安全事件。BlockSec作為長期關注DeFi安全的研究團隊(https://blocksecteam.com),獨立發現了多起DeFi安全事件,研究成果發布在頂級安全會議中我為自己代言:ChainSwap攻擊事件分析傾囊相送:Sushiswap手續費被盜偷天換日:深度剖析Akropolis攻擊事件0xffffffff.前言

北京時間2021年07月21日03:40,我們的攻擊檢測系統檢測到某個交易異常。通過對該交易進行擴展分析,我們發現這是一起利用通縮代幣KEANU的機制對SanshuInu部署的Memestake合約的獎勵計算機制的漏洞進行攻擊的事件,攻擊者最后獲利ETH約56個。下面詳細分析如下:閱讀建議:如果您剛剛接觸DeFi(Ethereum),可以從頭看器,但是文章比較長,看不下去記得點個關注再走。如果您對Akropolis等DeFi聚合器項目比較了解,可以直接從「0x2攻擊分析」開始。0x0.背景介紹

今年以來爆火的狗狗幣、柴犬幣引發了廣泛的關注,同時帶火了其他相關的meme幣,更引發了大量的項目方開發自己的meme幣及圍繞meme幣提供服務,其中SanshuInu就是其中一員。SanshuInu不僅發行meme幣SANSHU,還創建了合約Memestake作為meme幣的耕種池。用戶只要往Memestake中質押meme幣,就可以獲得代幣Mfund作為獎勵。另一方面,大量的meme幣都是通縮代幣,即該種代幣的發行量會逐漸減少。其中部分meme幣的通縮實現形式是在用戶每次進行交易轉賬的時候扣取一定比例的幣用于銷毀和再分配,這將導致接收方實際收到的token數量小于支出方實際支付的數量。本次涉及的通縮代幣KEANU就是采用這種實現。該攻擊的大致原理就是通過控制Memestake進行KEANU的多次轉入轉出減少其持有的KEANU數量,從而利用其獎勵計算函數的漏洞致使Memestake給攻擊者發送大量Mfund。0x1.代碼分析

波卡生態衍生品平臺Satori完成1000萬美元融資,Polychain、Blockchange領投:5月13日消息,波卡生態衍生品平臺 Satori 完成 1000 萬美元融資,Polychain、Blockchange 領投,參投方包括 Jump Crypto、Coinbase Ventures、Portal、Acala、Astar、Parallel、Clover,個人投資者包括波卡創始人 Gavin Wood 等。Satori 是一個結合了 AMM 與訂單簿模型的衍生品市場,將于未來幾周上線。[2022/5/13 3:13:30]

為了便于理解,我們首先簡要地介紹一下和此次攻擊相關的兩個實體合約:KEANU代幣的KeanuInu合約和Memestake合約。KeanuInu合約

正如前面所說,KeanuInu在實現代幣KEANU的轉賬時,會扣取一定比例的幣用于銷毀和再分配,其中用于銷毀的比例設置為定值——2%。如圖,在調用KeanuInu的transfer()及transferFrom()函數的時候,函數調用中顯示的轉賬數量跟emit的事件log中記錄的數量并不一致。

其由于其實際代碼實現調用較為復雜,此處不再展示,感興趣的朋友可以根據后面附錄給出的合約地址在etherscan.io自行查看合約實現。另外,上面兩張截圖來源于我們自行開發的交易解析工具,目前開放公測中。歡迎各位點擊http://tx.blocksecteam.com:8080/試用。我們的工具將函數調用與過程中產生事件log結合展示的方式,對于分析通縮代幣等問題更有幫助。Memestake合約

P2E鏈游Block Brawlers將于5月18日在以太坊側鏈SKALE上線:5月6日消息,P2E鏈游Block Brawlers將于5月18日在以太坊側鏈SKALE上線,玩家可以參與6種不同游戲包的社區銷售,其中包括 Brawler NFT 和 Brawler 代幣。

據悉,Block Brawlers 是一款P2E鏈游,由 GAME Credits 提供支持,玩家可以獲取、訓練和交易 Brawlers,還組成 3 Brawlers 團隊在競技場中與其他團隊對抗,以贏得 XP、金幣和 BRAWL 代幣。[2022/5/6 2:54:16]

下圖是MemeStake的deposit函數。函數首先調用updatePool更新資金池狀態,然后將用戶的token轉賬給自己。當傳入的_amount大于0時會在代碼的1295行進行轉賬。然而,由于KEANUtoken的通縮特性,雖然調用safeTransferFrom函數時傳入的金額是_amount,但是實際上轉入資金池的金額小于_amount。并且在代碼分析中我們注意到,transfer的目的地是自己,也就是說對于MemeStake來說,所有用戶的某個幣種的存款都屬于MemeStake。在轉賬后的1296行,MemeStake會對用戶的存款進行登記,但這里登記采用的仍然是_amount,因此用戶真正的存款量比登記的user.amount更小。最后在1299行,可以看出user.rewardDebt參數也是根據user.amount來計算的。

下圖是MemeStake的withdraw函數。該函數首先會檢查user.amount是否還有足夠的余額,但由于user.amount本身比真實值大,因此這里的檢查是不準確的。接下來,同樣會調用updatePool函數更新資金池狀態。在1321行,withdraw函數會先扣除在user.amount中登記的余額,然后調用transfer函數把token轉回用戶。和deposit函數一樣,這里的邏輯同樣存在問題,由于每次轉賬都會造成通縮,因此轉給用戶的數量會小于實際的轉賬量。

EOS網絡基金會采取法律手段:要求Block.one歸還41億美元賦能EOS生態:2月10日消息,EOS網絡基金會領導人Yves La Rose更新推文表示,EOS網絡基金會正在采取所有可能的法律手段,要求Block.one歸還其在EOS眾籌階段所募得的41億美元。目前EOS網絡基金會已聘請加拿大頂級律師事務所,調查Block.one過去對EOS社區和EOS投資者的不正當行為和未履行承諾,并確定包括提起正式訴訟的法律維權途徑。隨著調查的深入,EOS網絡基金會將向社會公布最新進展。

在此之前,EOS網絡基金會曾多次嘗試與Block.one進行談判和解,但Block.one單方面決定退出談判,本次宣布采取法律手段維權,不僅代表EOS社區心聲并符合生態最佳利益,更是EOS與Block.one徹底分裂、獨立發展的重要標志。[2022/2/10 9:43:34]

最后來看MemeStake的updatePool函數。首先從1255行可以看出,每次調用會記錄上一次更新的blockNumber,如果此次調用的區塊和上次更新時相同,則會直接返回,也就是說updatePool對每個區塊只會更新一次資金池狀態。接下來在1259行,會獲取MemeStake自身在token合約中的余額。最后在1275行,會利用這個余額作為分母,計算該資金池每一次deposit和withdraw的獎勵。計算方式如下:pool.accMfundPerShare+=mFundReward/token.balanceOf(MemeStake)

聲音 | Blockstream首席戰略官:必須確保進入區塊鏈賬本的任何數據都有用 而非垃圾:近期,Blockstream的首席戰略官Samson Mow表示,盡管區塊鏈投票比傳統投票有多個優勢,但區塊鏈只是記錄數據的分布式賬本。Samson Mow稱:”區塊鏈只是記錄數據,如果放垃圾進去,我們需把垃圾弄出去。“他認為區塊鏈可以帶來透明度,但如果選民和候選人都不好,簡單地把事情放在區塊鏈上是解決不了問題的。因此,必須首先集中精力確保進入賬本的任何數據都是有用的。(AMBCrypto)[2019/10/6]

回到withdraw,我們來看存取款獎勵代幣Mfund是怎樣轉賬的。首先在上圖withdraw函數的第1325行,計算用戶是否有pending的Mfundtoken沒有發放,計算公式為:rewardMfund=user.amont*pool.accMfundPerShare/1e18-user.rewardDebt。而rewardDebt是這樣計算的:user.rewardDebt=user.amount*pool.accMfundPerShare/1e18因此,從代碼中我們不難構造出一種可能的攻擊:首先,在一個交易內,通過反復調用deposit和withdraw函數,榨干MemeStake的資金池。這個操作利用了三個代碼問題:首先,user.amount的記賬比真實值多,因此每次withdraw都可以成功。第二,MemeStake中所有用戶的資金都在一個池子中,因此每一筆轉賬實際上Burn掉的是池子中其他用戶存入的KEANUtoken。第三,由于updatePool在同一個塊中不會進行狀態更新,因此不會影響pool.accMfundPerShare參數,也不會產生Mfundtoken的reward。接下來,在下一個區塊時,直接調用withdraw函數。通過對updatePool函數的分析可知,此時會產生池子狀態的更新,且由于前一步操作榨干了MemeStake的資金池,token.balanceOf(MemeStake)極低,產生了巨大的pool.accMfundPerShare。隨后在withdraw函數的第1315行,計算出的Mfundreward量非常大,導致巨額的Mfund回報。0x2.攻擊分析

Blockchain專門為印度用戶加入了比特幣現金服務 用戶可以在錢包里看到等值比特幣現金數額:Blockchain宣布比特幣現金服務已經在其數字錢包內,專門為印度用戶加入了比特幣現金服務,現在,擁有比特幣的Blockchain用戶可以在自己的錢包里看到等值的比特幣現金數額。[2017/12/18]

前面介紹了漏洞成因及漏洞的利用方式,我們接下來介紹攻擊者實際是如何進行攻擊的。如圖所示,攻擊可以分為4步,其中關鍵攻擊步驟為第2步,利用通縮代幣的特性操縱Memestake的獎勵計算。

第1步,首先攻擊者創建了兩個合約并進行初始化,其中合約一為表現正常的投資合約,攻擊者通過合約一往Memestake存入約2,049BKEANU,為步驟3獲利大量MFUND獎勵做好鋪墊。合約二為操縱Memestake的獎勵計算的合約,先進行了相關token的approve操作。第2步,攻擊者先從uniswapV2中flashloan大量的KEANU代幣,然后通過合約二往Memestake中多次deposit和withdraw大量KEANU,導致Memestake被迫大量交易KEANU。由于KEANU是一種通縮代幣,每次交易會燒掉2%的交易額,導致用戶真正存入Memestake的量比登記的user.amount更小,取出時又是按照user.amount轉給用戶,導致Memestake池子中KEANU的代幣持有量不斷減少,最終為1e-07。如下圖所示,涉及交易為0x00ed,交易截圖未完全,請自行點擊鏈接查看。

第3步,攻擊者首先通過合約二調用了Memestake.updatePool()函數,修改了KEANU所在池子的accMfundPerShare,由于該值依賴于池子所持有的KEANU的代幣量,而這在第二步中被操縱了。這使得合約二在接下來withdraw的時候可以獲得遠超正常值的Mfund這種token作為獎勵。第3步發生于交易0xa945中,同時攻擊者開始將部分獲得的MFund換成WETH等代幣。

第4步,攻擊者將獲得的MFund、KEANU等代幣換成ETH,并通過Tornado.Cash轉移走,至此攻擊結束,攻擊者從中獲利ETH55.9484578158357個,約10萬美元。下圖為攻擊地址0x0333的交易截圖,交易截圖未完全,請點擊地址鏈接查看詳情。

攻擊相關

有趣的是,攻擊的第2、3步都與flashbots交易有關。其中第2步涉及的交易0x00ed由于采用了UniswapV2flashloan,且交易前后相當于用約38ETH去購買了KEANU,由此產生了很大的套利空間。因此該筆交易受到另一名攻擊者的三明治攻擊,即本事件的攻擊者也是另一個三明治事件的受害者。該三明治攻擊者獲利3.2769697165652474ETH,但是給了礦工2.405295771958891249ETH,凈獲利0.8716739446063562ETH。而第3步攻擊涉及的交易0xa945則由于在uniswap池子中大量售出MFund,創造了套利空間,所以被back-running而成為flashbots交易。該searcher獲利0.13858054192600666ETH,其中交給礦工0.099085087477094764ETH,凈獲利0.03949545444891189ETH。有關flashbots和三明治攻擊的詳細介紹可參閱我們的另一篇攻擊介紹由xSNXa被攻擊事件引發的對FlashBot的思考。由于UniswapV2中將flashloan的實現與普通的Swap結合在一起,具體的實現原理及為什么由此導致第2步存在套利空間可以參閱我們的paperTowardsAFirstSteptoUnderstandFlashLoanandItsApplicationsinDeFiEcosystem(SBC2021).0x3.總結及安全建議

攻擊者利用通縮代幣的特性控制了平臺持有代幣的數量,影響了獎勵代幣的計算發放,由此獲利ETH55.9484578158357個。而這原因在于,SanshuInu平臺在引入通縮代幣時缺乏一定的安全考量,導致攻擊者有空可趁。由此,我們給有關項目方的安全建議有:對項目引入的代幣應當有足夠的認識,或者通過建立白名單的機制對交互的token進行限制。近兩年來,已經有多起安全事件與未加限制的token或者交互的token有問題有關,如最近的BSC鏈上的ImpossibleFinance事件,我們這個系列上一篇Akropolis攻擊事件,2020-11-17的OriginDollar事件及2020-06-28的Balancer事件等。特別是與通縮代幣的交互,如在該事件發生不久后,PeckShield也報告了一起發生在polygon鏈上同樣利用通縮代幣及獎勵計算漏洞的安全事件——PolyYeld事件。項目上線前,需要找有資質的安全公司進行安全審計。我們可以看到,由于defi的moneylego屬性,很多defi項目之間可以隨意組合,從而產生了互相影響,而這正是defi領域安全事件頻發的原因。因此,項目方所需關注的安全問題不僅僅局限于自己項目,也同樣需要考慮在與其他項目交互過程中存在的安全漏洞。BlockSec團隊以核心安全技術驅動,長期關注DeFi安全、數字貨幣反洗錢和基于隱私計算的數字資產存管,為DApp項目方提供合約安全和數字資產安全服務。團隊發表20多篇頂級安全學術論文(CCS,USENIXSecurity,S&P),合伙人獲得AMiner全球最具影響力的安全和隱私學者稱號(2011-2020排名全球第六).研究成果獲得中央電視臺、新華社和海外媒體的報道。獨立發現數十個DeFi安全漏洞和威脅,獲得2019年美國美國國立衛生研究院隱私計算比賽(SGX賽道)全球第一名。團隊以技術驅動,秉持開放共贏理念,與社區伙伴攜手共建安全DeFi生態。https://www.blocksecteam.com/contact@blocksecteam.com

Tags:MEMMEMESTASTAKMEMEDOGE幣Meme Gamesstart幣多少錢stake幣官網

SHIB
?ETH周報 | 9月3日為ETH首個通縮日;MetaMask今年7月活躍用戶量突破1000萬(8.30~9.5)_以太坊

作者|秦曉峰編輯|郝方舟出品|Odaily星球日報 一、整體概述 據ETHBurnBot統計,9月3日以太坊網絡共銷毀13,838枚ETH,而產出的區塊獎勵為13,485枚.

1900/1/1 0:00:00
全方位回顧Chainlink & SmartCon#1智能合約峰會,七大重點值得期待_CHA

日前,由Chainlink主辦的第二屆智能合約峰會SmartCon#1圓滿落下帷幕。此次峰會有來自全球140多個國家的15000多名與會者參與,共同收看了200多名行業頂尖創始人、研究者和開發者.

1900/1/1 0:00:00
新公鏈之爭:雪崩協議AVAX的成功奧秘是什么?TVL與價格又能否持續_AVA

吳說作者|吳卓鋮本期編輯|ColinWu最近一個多月,Avalanche(AVAX)漲幅高達514%,最高漲至59.4美元.

1900/1/1 0:00:00
【Deribit期權市場播報】0816——比例價差_以太坊

收錄于話題 #每日期權播報 播報數據由Greeks.live格致數據實驗室DataLab和Deribit官網提供.

1900/1/1 0:00:00
區塊鏈:平等與不平等的橋梁?_區塊鏈

平等和不平等是一個亙古常談的話題,平等需求是下層對上層的吶喊,就像錢鐘書《圍城》一書中的墻外人和墻內人一樣,城內的人覺得不公,想去城外,城外的人認為不等,想進城內.

1900/1/1 0:00:00
從美元地位到加密監管,SBF在推特都談了什么_加密貨幣

8月16日,FTX交易所創始人SBF發推文討論了美元在加密貨幣中的影響力及加密貨幣監管等問題。以下是推文內容:FTX交易所24小時交易量是多少呢?據CoinGecko數據的API接口顯示是205.

1900/1/1 0:00:00
ads