By:yudan@慢霧安全團隊
據慢霧區消息,2021年06月16日,以太坊DeFi項目Alchemix的alETH合約疑似出現安全問題。17日,Alchemix發布了事故分析報告,慢霧安全團隊迅速介入分析,并在官方分析報告的基礎上梳理了本次事件的整個脈絡和核心關鍵點,供大家參考。
太長不看系列
本次分析文章很長。這里先說結論,方便大家有個大概的理解。本次事故的主要原因在于Alchemix通過transmuter添加了3次vault,導致收益信息記錄在了一個錯誤的元素上,而在調用transmuter的harvest函數時也沒有傳入正確的index值,導致通過錯誤的元素獲取了錯誤的收益,將錯誤的4300ETH的收益發送到adapter合約,幫助用戶償還了alETH的貸款,造成收益增多的問題,導致了悲劇。
核心分析——Round1
根據官方發布的事故分析報告,本次事故的原因是官方的alETH的部署腳本意外地創建了額外的vaults,導致Alchemix使用了vaults數組中錯誤的索引并計算出了錯誤的獎勵,導致transmuter把所有的獎勵用于償還了用戶的所有負債。我知道單單是這句簡短的分析讓人有點云里霧里,摸不著頭腦,所以我們只能把目標放在官方給出的交易中,看看能不能找到真相。
Arkham Intel Exchange首次批準追蹤Do Kwon錢包信息的賞金:金色財經報道,兩位匿名區塊鏈偵探因發現Do Kwon加密錢包的證據而在Arkham Intel Exchange上獲得了有史以來第一個賞金獵人獎勵,批準的賞金提交金額為 9,519.26 ARKHM,價值約4,950美元。
金色財經曾報道,Arkham Intel Exchange于7月10日推出,通過獎勵系統激勵用戶尋找鏈上數據,任何人都可以通過發布賞金來尋求信息,但提交的信息必須得到平臺的批準。如果成功,賞金獵人將獲得獎勵,而發布賞金的人會將信息保留90天,然后再傳播到Arkham社區。[2023/7/25 15:56:34]
根據官方給出的交易,通過ethtx.info分析工具進行分析,我們不難發現,這筆交易調用了AlchemistEth合約的harvest函數,并且傳入了_vaultId=0這個參數,最后返回了
"4308144937764982868765"和"4308144937764982866415"這兩個值。
為了更加了解harvest函數的作用,我們需要對整個函數進行分析:
韓國數家銀行加入致力于STO的銀行聯盟:6月15日消息,韓國幾家主要銀行加入了一個致力于證券型代幣發行(STO)的銀行財團。今年4月,總部位于首爾的NongHyup成立了該聯盟,旨在創建一個以證券型代幣為中心的生態系統。在韓國,這些是由區塊鏈驅動的傳統投資(如股票或債券)版本,但也可以授予房地產、投資基金甚至藝術品的股權或其他權利。韓亞銀行、新韓銀行、友利銀行也加入了NongHyup的財團。該組織還包括Funble、Trackchain(金融科技Aton的子公司)和Artipio等其他金融科技公司,使成員總數達到18家。
今年早些時候,韓國將證券型代幣產品合法化,以應對國內外數字資產日益增長的需求和普及。(Blockworks)[2023/6/16 21:40:47]
不難發現,harvest函數其實包含兩個重要的操作,分別是收獲獎勵和將獎勵分發給transmuter合約。其中vault是一個library庫合約,其中的harvest邏輯實現如下:
通過代碼分析不難發現,vault庫合約的harvest函數其實是檢查了外部的adapter的總的資金量,然后根據adapter中的資金量減去用戶的充值數量計算出收益的部分。
這里我們可以將這個adapter理解為一個策略池,用于管理用戶的資金和收益。然后我們回到用戶一開始的AlchemistEth合約中的harvest函數,發現返回的"4308144937764982868765"?和?
安全公司BlockSec幫助Platypus追回240萬美元被盜資金:金色財經報道,穩定幣交易項目Platypus遭黑客攻擊后,在區塊鏈安全公司BlockSec的幫助下,至少已有240萬美元資金被追回。Blocksec的可視化工具MetalSleuth表示,在Platypus被盜的近910萬美元資金中,攻擊者只能兌現27萬美元。BlockSec利用攻擊合約中的漏洞,使用回調函數,將資金從攻擊合約轉移至Platypus的賬戶上,目前已追回240萬美元。據此前消息,Platypus遭遇閃電貸攻擊,損失約900萬美元,大部分被盜資金仍留在攻擊者的合約地址中,部分資金被發送到EOA和AAVE池中。在對攻擊合約進行反編譯后發現,攻擊者并沒有在合約中實現提現功能,導致攻擊收益無法提取,850萬美元被凍結在攻擊合約內。[2023/2/18 12:14:27]
"4308144937764982866415"這兩個值其實對應的就是vault庫合約的harvest函數計算出的需要提現的代幣數量和從adapter(策略池)中取回的代幣的數量。由于這個adapter對應的收益代幣是WETH,精度為18位,那么?"4308144937764982866415"?這個數值換算過來就是"4308.144937764982866415"?個WETH。
也就是說,本次harvest操作,收益了超過4300個ETH的收益,然后這個收益在下一步中通過_distributeToTransmuter函數給到了transmuter合約進行分發,我們看下分發過程中的邏輯是怎樣的:
BUSD市值被OKB超越:金色財經報道,據coingecko最新數據顯示,當前BUSD市值已降至13,379,456,826美元,已被OKB(13,588,061,705美元)超越跌至加密貨幣市值排名第九位。[2023/2/18 12:14:11]
_distributeToTransmuter函數的邏輯只有簡單的3行,我們主要關注的是最后的外部調用——lowerHashMinted函數。該函數所對應的xtoken在這里指的是alETH本身。因為alETH本身是用戶通過借貸借出來的,所以lowerHashMinted這里的操作其實是使用harvest的收益將alETH總的貸出數量減少了,從而減少了每個用戶的貸款。總結來說就是用harvest4300ETH的收益償還用戶的alETH貸款。
打個小總結
這里先總結下這個流程,就是AlchemistEth合約通過harvest函數,得到了4300ETH的收益,并將這個收益分發出去了,用于償還用戶的alETH貸款,導致了我們看到的情況——已經貸出alETH的用戶在不需要還款的情況下就可以拿回他們質押的ETH。那究竟是為什么,會有這4300ETH的收益呢?這多出來的4300ETH的收益是怎么來的?針對這個問題,我們開始下一輪的分析。
薩爾瓦多比特幣城由墨西哥建筑師Fernando Romero設計:金色財經報道,薩爾瓦多近日發布比特幣城的發展計劃細節。其中火山比特幣城由FR-EE建筑工作室創始人、墨西哥建筑師Fernando Romero設計。建筑師根據比特幣的符號形狀,將這座城市設計成了圓形。比特幣城的規劃結構為單中心同心圓狀,圓心是一座帶有比特幣標志的中心廣場,上面印有一個巨大的“B”代表比特幣。圍繞圓心是一系列采用最新技術的智能建筑,并有展示人類貨幣史的博物館、多功能大型體育場、NFT 畫廊等。
孔查瓜火山的地熱能為整個比特幣城市電網供電,包括加密貨幣的開采,這將為處理加密貨幣的科技公司提供空間。比特幣城將以綠色(樹木)和藍色(海洋)為主,火山上還會建一座凌空圓形觀景臺。城內交通以輕軌為主,一條特快列車連接起擬建的機場、海港和其他鄰近城市。[2022/6/27 1:32:54]
核心分析——Round2
要了解為什么會多出來4300ETH,就必須了解AlchemistEth的資金存儲過程。在AlchemistEth合約中,合約總的充值情況是使用Vaultlibrary庫的Data結構體進行記錄的,然后通過flushActiveVault函數更新對應的充值數量(totalDeposit)。
然后depositAll函數會將充值的代幣金額打到對應的adapter(策略池)中,那么在下一次harvest的時候,通過adapter(策略池)獲取的totalValue,就會是用戶的本金加上策略池的收益。為了計算收益過程中的本金部分,我們對官方給出的交易進行debug,發現本金僅為9000ETH,從adapter獲取的收益加上本金共有13000ETH,也就是說9000ETH的本金產生了4300ETH的收益。
但是,按照上面分析的邏輯,用戶的本金是不會產生那么大的收益的,問題肯定是出在了adapter獲取的totalValue。也就是說adapter不止只有AlchemistEth充值代幣,還存在其他的收益渠道。為了驗證我們的想法,慢霧安全團隊分析了adapter的所有代幣收入,果然發現了一筆異常的轉入行為,并且金額也能剛好對上多出的4300ETH的收益。也就是說,問題就在這里了。
通過查看交易數據,發現這是一筆調用harvest操作的交易,調用的合約是transmuter合約:
也就是說,是這個harvest函數出問題了,harvest函數的邏輯如下:
同樣是調用了vault的harvest函數,熟悉的配方,熟悉的味道。我們再次進行debug,發現一個驚人的事實——在進行收益的時候,vault的totalDeposit竟然為0,導致4300ETH的收益直接分發給了adapter,導致了adapter獲取的totalValue錯誤了,多了4300個ETH,原因就是在這里。
到了這里,我們已經很接近真相了,剩下要解決的就是為什么totalDeposit會為0?我們查詢了transmuter合約中能改變totalDeposit的地方,發現只有_plantOrRecallExcessFunds函數可以改變這個值,而這個函數上層調用的又是distribute函數。而transmuter合約的distribute函數是AlchemistEth合約在收益的時候進行調用的。也就是說本身的流程應該是:
1.AlchemistEth合約調用harvest進行收益
2.AlchemistEth合約調用transmuter合約的distribute函數記錄收益情況,并把收益部分給adapter
3.adapter收到了transmuter的收益,根據收益償還用戶的alETH的貸款
但是問題就出在了_plantOrRecallExcessFunds函數中。由于在記錄充值信息的時候,用的是_vaults.last()來獲取最新的vault,所以其實充值信息疊加在了最后一個元素上。但是項目方調用了三次setActiveVault函數,所以其實充值信息是疊加到了_vaults數組的3號元素,也就是index為2的vault元素上。但是在transmuter合約在harvest的時候傳入的_vaultId卻是0,0號元素是沒有任何充值記錄的,所以transmuter合約就誤將所有的收益都給了adapter了。導致了悲劇的發生。
總結
到這里,整個事情已經變得很清晰了,Alchemix項目方由于某種原因,通過transmuter添加了3次vault,導致收益信息記錄在了一個錯誤的元素上,而在調用transmuter的harvest函數時也沒有傳入正確的index值,導致通過錯誤的元素獲取了錯誤的收益,錯誤收益被發送到adapter合約,造成收益增多,導致了悲劇。
慢霧安全團隊在此提醒,DeFi是一個復雜的系統,在進行DeFi操作的時候,要記得檢查好業務邏輯中的每一個流程,防止意外的發生,在必要的時候可以聯系專業的安全團隊進行專業的安全審計,防止事故的發生。
數據顯示,價值超過65億美元的BTC——或接近比特幣全部資本的1%——現在由19家上市公司持有。而交易所交易產品和封閉式信托持有另外5.75%的比特幣市值.
1900/1/1 0:00:00作者?|RyanSeanAdams摘要:Vitalik建議創建一個Oracle,使用UNIToken來保護它。乍一看,這個想法似乎有點奇怪,并帶來了一些問題.
1900/1/1 0:00:00昨天和大家介紹了關于元宇宙中提供活動空間的項目。實際上除了我介紹的那幾個項目之外,還有其它一些知名項目比如thesandbox等.
1900/1/1 0:00:00幣圈,早已風聲鶴唳。 隨著國內監管逐步收緊,當下在百度、微博等平臺搜索火幣、幣安等關鍵詞,均提示沒有找到相關內容或搜索結果未予顯示,這意味著炒幣越來越不受待見.
1900/1/1 0:00:00現如今,DeFi代幣在很大程度上可以分為兩類:「生產性代幣」和「非生產性代幣」。非生產性DeFi代幣是指那些典型的、“無價值的治理代幣”,諸如UNI和COMP都是典型的例子.
1900/1/1 0:00:00OscarCivit在成為NFT藝術家之前是一名西班牙的插畫師。他的作品在幾個同類型的NFT平臺上都有很好的銷售記錄.
1900/1/1 0:00:00