前言
據慢霧區情報,以太坊 DeFi 平臺 Lendf.Me 遭受重入漏洞攻擊。慢霧安全團隊在收到情報后隨即對此次攻擊事件展開分析,并快速定位了問題所在。
據慢霧科技反洗錢(AML)系統初步統計分析,Lendf.Me 被攻擊累計的損失約 24,696,616 美元,具體盜取的幣種及數額為:
之后攻擊者不斷通過 1inch.exchange、ParaSwap、Tokenlon 等 DEX 平臺將盜取的幣兌換成 ETH 及其他代幣。
以下是詳細分析過程。
攻擊細節
本次對 Lendf.Me 實施攻擊的攻擊者地址為 0xa9bf70a420d364e923c74448d9d817d3f2a77822,攻擊者通過部署合約 0x538359785a8d5ab1a741a0ba94f26a800759d91d 對 Lendf.Me 進行攻擊。
Terra鏈上DeFi鎖倉量為181.4億美元:金色財經報道,據DefiLlama數據顯示,當前Terra鏈上DeFi鎖倉量為181.4億美元,在公鏈中仍排名第2位。目前,鎖倉量排名前5的公鏈分別為以太坊(1324.1億美元)、Terra(181.4億美元)、BSC(139.8億美元)、Avalanche(97.8億美元)、Solana(94.1億美元)。[2022/1/21 9:04:16]
通過在 Etherscan 上查看攻擊者的其中一筆交易:https://etherscan.io/tx/0xae7d664bdfcc54220df4f18d339005c6faf6e62c9ca79c56387bc0389274363b
我們發現,攻擊者首先是存入了 0.00021593 枚 imBTC,但是卻從 Lendf.Me 中成功提現了 0.00043188 枚 imBTC,提現的數量幾乎是存入數量的翻倍。那么攻擊者是如何從短短的一筆交易中拿到翻倍的余額的呢?這需要我們深入分析交易中的每一個動作,看看究竟發生了什么。
多鏈DeFi平臺Rubic集成Raydium,允許用戶在Solana網絡完成鏈上交換:官方消息,多鏈DeFi平臺Rubic集成Raydium,允許用戶在Solana網絡完成鏈上交換。此外,Rubic還完成了Phantom和Solflare錢包與Rubic生態系統的集成。[2021/12/18 7:47:02]
通過把該筆交易放到 bloxy.info 上查看,我們能知道完整的交易流程
通過分析交易流程,我們不難發現攻擊者對 Lendf.Me 進行了兩次 supply() 函數的調用,但是這兩次調用都是獨立的,并不是在前一筆 supply() 函數中再次調用 supply() 函數。
緊接著,在第二次 supply() 函數的調用過程中,攻擊者在他自己的合約中對 Lendf.Me 的 withdraw() 函數發起調用,最終提現
歐易OKEx已開放ICP充值 并與Definity Foundation聯合發起千萬美元專項生態基金:據官方公告消息,歐易OKEx已于香港時間5月10日10:00開放Internet Computer (ICP)充值,等流動性條件滿足后會第一時間開通交易。此外,歐易OKEx新成立的OKEx Blockdream Ventures將提供1000萬美元的專項資金和資源與Internet Computer Ecosystem(Dfinity Foundation)展開合作。以支持計劃中的高質量生態系統項目。
據悉,DFINITY 經過幾年的迭代,目前的正式愿景定位為互聯網計算機。互聯網計算機可以擴展智能合約計算和數據,以Web速度運行它們,有效地處理和存儲數據并為開發人員提供強大的軟件框架。[2021/5/10 21:42:53]
在這里,我們不難分析出,攻擊者的 withdraw() 調用是發生在 transferFrom 函數中,也就是在 Lendf.Me 通過 transferFrom 調用用戶的 tokensToSend() 鉤子函數的時候調用的。很明顯,攻擊者通過 supply() 函數重入了 Lendf.Me 合約,造成了重入攻擊,那么具體的攻擊細節是怎樣的呢?我們接下來跟進 Lendf.Me 的合約代碼。
評論:DeFi也許會像ICO、IEO等不會長久:據cointelegraph評論文章,這幾年ICO、IEO、STO、去中心化組織等不斷出現,但都沒有成為主流,或許可以說DeFi也不會長久。DeFi的機會窗口期正在縮減,與以下原因有關。第一是詐騙頻發;第二,監管者可以通過新舊監管方式混合起來“拯救”市場;第三,在傳統監管體制下對新興的加密公司缺乏了解并不重要,因為金融科技本身就是對監管無效的回應。對加密服務進行全新監管尚須成為共識。[2020/9/12]
代碼分析
Lendf.Me 的 supply() 函數在進行了一系列的處理后,會調用一個 doTransferIn 函數,用于把用戶提供的幣存進合約,然后接下來會對 market 變量的一些信息進行賦值。回顧剛才說的攻擊流程,攻擊者是在第二次 supply() 函數中通過重入的方式調用了 withdraw() 函數提現,也就是說在第二次的 supply() 函數中,1590 行后的操作在 withdraw() 之前并不會執行,在 withdraw() 執行完之后,1590 行后的代碼才會繼續執行。這里的操作導致了攻擊者可提現余額變多。
聲音 | Mythos創始人:如果你沒用過以太坊上的DeFi 產品 請不要對以太坊指指點點:Mythos創始人Ryan Sean Adams昨日在推特上表示:在你告訴我你對以太坊的看法之前,請你: - 啟動一個加密錢包; - 使用InstaPay發送DAI; - 使用Compound借出ETH; - 取得一個Maker CDP; - 在Uniswap上進行交易。 大多數對以太坊感興趣的人甚至都沒有做過以上這些事情。[2019/9/7]
我們深入分析下 supply() 函數
根據上圖,可以看到,在 supply() 函數的末尾,會對 market 和用戶的余額進行更新,在這之前,用戶的余額會在函數的開頭預先獲取好并保存在 localResults.userSupplyCurrent,如下:
通過賦值給 localResults 變量的方式,用戶的轉入信息會先暫時保存在這個變量內,然后此時攻擊者執行 withdraw() 函數,我們看下 withdraw() 函數的代碼:
這里有兩個關鍵的地方:
1、在函數的開頭,合約首先獲取了 storage 的 market 及 supplyBalance 變量。
2、在 withdraw() 函數的末尾,存在同樣的邏輯對 market 用戶的余額信息 (supplyBalance) 進行了更新,更新值為扣除用戶的提現金額后的余額。
按正常的提現邏輯而言,在 withdraw() 單獨執行的時候,用戶的余額會被扣除并正常更新,但是由于攻擊者將 withdraw() 嵌入在 supply() 中,在 withdraw() 函數更新了用戶余額 (supplyBalance) 后,接下來在 supply() 函數要執行的代碼,也就是 1590 行之后,用戶的余額會再被更新一次,而用于更新的值會是先前 supply() 函數開頭的保存在localResults 中的用戶原先的存款加上攻擊者第一次調用 supply() 函數存款的值。
在這樣的操作下,用戶的余額雖然在提現后雖然已經扣除了,但是接下來的 supply() 函數的邏輯會再次將用戶未扣除提現金額時的值覆蓋回去,導致攻擊者雖然執行了提現操作,但是余額不但沒有扣除,反而導致余額增加了。通過這樣的方式,攻擊者能以指數級別的數量提現,直至把 Lendf.Me 提空。
防御建議
針對本次攻擊事件慢霧安全團隊建議:
1、在關鍵的業務操作方法中加入鎖機制,如:OpenZeppelin 的 ReentrancyGuard
2、開發合約的時候采用先更改本合約的變量,再進行外部調用的編寫風格
3、項目上線前請優秀的第三方安全團隊進行全面的安全審計,盡可能的發現潛在的安全問題
4、多個合約進行對接的時候也需要對多方合約進行代碼安全和業務安全的把關,全面考慮各種業務場景相結合下的安全問題
5、合約盡可能的設置暫停開關,在出現“黑天鵝”事件的時候能夠及時發現并止損
6、安全是動態的,各個項目方也需要及時捕獲可能與自身項目相關的威脅情報,及時排查潛在的安全風險
附OpenZeppelin ReentrancyGuard:
https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/ReentrancyGuard.sol
今日solana代幣流通量事件引發“做市商的代幣要不要進入流通盤?”的討論。自SOL代幣在幣安上市以來,一直存在著流通供應中有多少代幣的問題.
1900/1/1 0:00:002019年2月15日《區塊鏈信息服務管理規定》(以下簡稱《管理規定》)正式實施以來,國家互聯網信息辦公室依法依規組織開展備案審核工作,已發布2批次共506個境內區塊鏈信息服務名稱及備案編號.
1900/1/1 0:00:00本文來自波卡百科(Polkadot Wiki),更新于 2020 年 3 月 5 日。本文是這篇文章的最新版本:為 Polkadot 做好準備你所需要的一切.
1900/1/1 0:00:00比特幣衍生品市場目前正處于碩果累累的時期。 在4月6日比特幣價格突破7000美元大關之后,其影響直接涌入了期貨和期權市場.
1900/1/1 0:00:00隨著經濟全球化進程的加速,貨幣資金的跨境流動無時無刻不在發生著。由于貨幣種類以及監管政策等方面的差異,基于現有的跨境支付結算交易流程和系統,資金跨境支付結算可能需要多個中間機構合作才能最終構建匯.
1900/1/1 0:00:00回顧3月區塊鏈與數字貨幣行業,看到全球范圍內央行數字貨幣的發展有加速趨勢。繼2月瑞典央行在全球率先開始其央行數字貨幣電子克朗測試之后,法國、韓國等更多國家開始公布其央行數字貨幣測試計劃或方案.
1900/1/1 0:00:00