加密貨幣交易所 加密貨幣交易所
Ctrl+D 加密貨幣交易所
ads

慢霧:詳解Uniswap的ERC777重入風險_SWAP:imToken官網正版下載

Author:

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

編者按:本文來自慢霧科技,Odaily星球日報授權轉載。

前言

據鏈聞消息,4月18日,Tokenlon宣布暫停imBTC轉賬,因其發現有攻擊者通過ERC777在Uniswap流動性合約中的重入漏洞,對ETH-imBTC池循環套利。此次的攻擊手法是一個存在于Uniswapv1上的已知漏洞,該漏洞最早由Consensys于2019年4月發現,當時Consensys只是發現了該風險,還沒有發現可以利用這種手法進行攻擊的token。隨后,在imBTC上線Uniswap后,由于imBTC是基于ERC777實現的,通過組合ERC777的特性及Uniswap代碼上的問題,使攻擊者可以通過重入漏洞實現套利。下面,我們將來分析此次套利中的攻擊手法和具體的細節。知識準備

ERC777協議是以太坊上的代幣標準協議,該協議是以太坊上ERC20協議的改進版,主要的改進點如下:1、使用和發送以太相同的理念發送token,方法為:send(dest,value,data)2、合約和普通地址都可以通過注冊tokensToSendhook函數來控制和拒絕發送哪些token3、合約和普通地址都可以通過注冊tokensReceivedhook函數來控制和拒絕接受哪些token4、tokensReceived可以通過hook函數可以做到在一個交易里完成發送代幣和通知合約接受代幣,而不像ERC20必須通過兩次調用來完成5、持有者可以"授權"和"撤銷"操作員這些操作員通常是交易所、支票處理機或自動支付系統6、每個代幣交易都包含data和operatorData字段,可以分別傳遞來自持有者和操作員的數據7、可以通過部署實現tokensReceived的代理合約來兼容沒有實現tokensReceived函數的地址在這里,我們需要特別關注的點是第二點,即ERC777標準中的tokenToSend函數,根據ERC777協議的定義,遵循該標準的token代幣在每一次發生代幣轉賬的時候都會去嘗試調用代幣發送者tokensToSend函數,而代幣持有者可以通過在ERC1820注冊合約注冊自己的合約并通過在這個hook函數中定義一些操作來處理代幣轉賬的過程中的某些流程,如拒絕代幣發送或其他操作。了解這些關鍵點,有助于我們理解這次攻擊的具體攻擊手法。現在開始,我們可以稍微加速,看看對于Uniswap而言,這次到底發生了什么?細節分析

慢霧:過去一周Web3生態系統因安全事件損失近160萬美元:6月26日消息,慢霧發推稱,過去一周Web3生態系統因安全事件損失近160萬美元,包括MidasCapital、Ara、VPANDADAO、Shido、Slingshot、IPO、Astaria。[2023/6/26 22:00:21]

通過Etherscan查詢攻擊者的其中一筆交易0x32c83905db61047834f29385ff8ce8cb6f3d24f97e24e6101d8301619efee96e

可以發現,攻擊者兩度向Uniswap合約轉帳imBTC,金額同樣是0.00823084,然后從Uniswap收取了兩筆ETH,看上去似乎是十分正常的兩筆交易,實際上卻是暗流涌動,另有玄機。為了更好的了解整一筆交易的細節,我們需要通過bloxy.info來查看交易的具體細節。

慢霧:BSC項目Value DeFi vSwap 模塊被黑簡析:據慢霧區情報,幣安智能鏈項目 Value DeFi 的 vSwap 模塊被黑,慢霧安全團隊第一時間介入分析,并將結果以簡訊的形式分享,供大家參考:

1. 攻擊者首先使用 0.05 枚 WBNB 通過 vSwap 合約兌換出 vBSWAP 代幣;

2. 攻擊者在兌換的同時也進行閃電貸操作,因此 vSwap 合約會將兌換的 vBSWAP 代幣與閃電貸借出的 WBNB 轉給攻擊者;

3. 而在完成整個兌換流程并更新池子中代幣數量前,會根據池子的 tokenWeight0 參數是否為 50 來選擇不同的算法來檢查池子中的代幣數量是否符合預期;

4. 由于 vSwap 合約的 tokenWeight0 參數設置為 70,因此將會采用第二種算法對池子中的代幣數量進行檢查;

5. 而漏洞的關鍵點就在于采用第二種算法進行檢查時,可以通過特殊構造的數據來使檢查通過;

6. 第二種算法是通過調用 formula 合約的 ensureConstantValue 函數并傳入池子中緩存的代幣數量與實時的代幣數量進行檢查的;

7. 在通過對此算法進行具體分析調試后我們可以發現,在使用 WBNB 兌換最小單位(即 0.000000000000000001) vBSWAP 時,池子中緩存的 WBNB 值與實時的值之間允許有一個巨大的波動范圍,在此范圍內此算法檢查都將通過;

8. 因此攻擊者可以轉入 WBNB 進行最小單位的 vBSWAP 代幣兌換的同時,將池子中的大量 WBNB 代幣通過閃電貸的方式借出,由于算法問題,在不歸還閃電貸的情況下仍可以通過 vSwap 的檢查;

9. 攻擊者只需要在所有的 vSwap 池子中,不斷的重復此過程,即可將池子中的流動性盜走完成獲利。詳情見原文鏈接。[2021/5/8 21:37:37]

通過查詢交易的細節,我們發現,攻擊者首先是通過ethToTokenSwapInput函數向Uniswap兌換了一些imBTC,然后再通過tokenToEthSwapInput函數開始第一次用imBTC換取ETH,然后Uniswap先將ETH轉給了攻擊者,再調用imBTC的transferFrom函數,由于imBTC實現了ERC777標準,所以在調用imBTC的trasferFrom函數的時候,imBTC會對攻擊者的tokensToSend函數進行調用。隨后,在攻擊者的tokensToSend函數中,攻擊者會進行第二次用imBTC換取ETH,然后流程結束。從交易細節上看,這里似乎還是沒有什么問題,我們繼續跟蹤UniSwap的代碼。

慢霧: 警惕比特幣RBF風險:據BitMEX消息,比特幣于區塊高度666833出現陳腐區塊,并產生了一筆 0.00062063 BTC 的雙花交易。根據 BitMEX提供的交易內容來看,雙花的兩筆交易的nSequence字段的值都小于0xffffffff -1。慢霧安全團隊初步認為此次雙花交易有可能是比特幣中的RBF交易。[2021/1/20 16:38:01]

上面是代碼是Uniswap的ethToTokenSwapInput函數的代碼,根據代碼分析,Uniswap的ethToTokenSwapInput函數會調用ethToTokenInput函數,然后會先通過getInputPrice獲取代幣能換取的eth數量,之后通過send函數將eth發給用戶,最后再通過transferFrom把代幣轉進合約。我們繼續跟進getInputPrice函數。

分析 | 慢霧:攻擊者拿下了DragonEx盡可能多的權限 攻擊持續至少1天:據慢霧安全團隊的鏈上情報分析,從DragonEx公布的“攻擊者地址”的分析來看,20 個幣種都被盜取(但還有一些DragonEx可交易的知名幣種并沒被公布),從鏈上行為來看攻擊這些幣種的攻擊手法并不完全相同,攻擊持續的時間至少有1天,但能造成這種大面積盜取結果的,至少可以推論出:攻擊者拿下了DragonEx盡可能多的權限,更多細節請留意后續披露。[2019/3/26]

通過分析getInputPrice函數,我們能知道,ETH獲取量計算的公式為

把該公式放到ethToTokenInput函數的上下文中,該公式就變成了

在該公式下,一次正常的imBTC兌換ETH的過程中,作為分母的imBTC儲備量在兌換過后應該要上升,對應的ETH儲備量會變小。

聲音 | 慢霧:Dapp、交易所等攻擊事件造成損失已近41億美金:慢霧數據顯示Dapp、交易所等攻擊事件造成的損失已達4098587697.68美金,半月增加近3億美金。據2月28日報道,慢霧區上線“被黑檔案庫(SlowMist Hacked)”,目前各類攻擊事件共造成約 3824082630.12 美金的損失。[2019/3/13]

但是回顧攻擊者的操作方式,在攻擊者第一次發送imBTC兌換ETH的過程中,Uniswap會先發送ETH給攻擊者,這時候Uniswap中ETH儲備量減少,然后Uniswap調用transferFrom函數,(注意此時還未將攻擊者的imBTC扣除),緊接著在transferFrom函數中攻擊者調用的第二次的ethToTokenSwapInput時,通過getInputPrice獲取兌換的ETH數量的公式會變成這樣:

注意看,在第二次的兌換計算中,只有ETH的儲備量變少了,而imBTC的儲備量并未增加,這導致相比與單獨的調用ethToTokenSwapInput函數,攻擊者可以通過重入的方式,在第二次使用imBTC兌換ETH的過程中,使計算公式的分子發生了變化,而公式的分母不會發生變化。相比正常的兌換,攻擊者通過重入方式進行的第二次兌換會獲取微小的利潤,導致有利可圖。重復這樣的過程,就能通過等量的imBTC獲取更多的ETH,導致Uniswap做事商的損失。防御方法

在Uniswap的tokenToEthSwapInput函數中加入OpenZeppelin的ReentrancyGuard函數,防止重入問題。在進行代幣交換的時候,先扣除用戶的代幣,再將ETH發送給用戶。同時,針對本次攻擊事件慢霧安全團隊建議:在關鍵的業務操作方法中加入鎖機制,如:OpenZeppelin的ReentrancyGuard開發合約的時候采用先更改本合約的變量,再進行外部調用的編寫風格項目上線前請優秀的第三方安全團隊進行全面的安全審計,盡可能的發現潛在的安全問題多個合約進行對接的時候也需要對多方合約進行代碼安全和業務安全的把關,全面考慮各種業務場景相結合下的安全問題合約盡可能的設置暫停開關,在出現“黑天鵝”事件的時候能夠及時發現并止損安全是動態的,各個項目方也需要及時捕獲可能與自身項目相關的威脅情報,及時排查潛在的安全風險最后的思考

這兩天的DeFi世界被鬧得沸沸揚揚,imBTC作為ERC777代幣首當其沖,ERC777協議也飽受詬病,但是看完分析,造成此次的攻擊事件原因,真的是imBTC或者是ERC777協議的問題嗎?如果Uniswap做好了ERC777的兼容,使用ReentrancyGuard,并在代幣交換的時候先扣除用戶的代幣,再將ETH發送給用戶,這樣的問題是不是就不會發生?imBTC作為以太坊上token化的比特幣代幣協議,其安全性在自身單獨運行的時候并不存在問題,第三方DeFi平臺在接入的時候,應需要充分考慮平臺本身的業務邏輯與接入代幣之間的兼容性,才能避免因兼容性發生不必要的安全問題。而不是簡單的將問題歸咎于協議和代幣提供方。

Tags:SWAPETHTOKEKENGSWAPBETH價格imToken官網正版下載Herbalist Token

歐易交易所
星球日報 | BTC昨日短時突破7700 USDT;央行數字貨幣雄安試點邀請名單出爐,星巴克等19家單位在列_區塊鏈:區塊鏈技術通俗講解舉例

頭條 媒體:央行數字貨幣雄安試點邀請名單出爐,星巴克等19家單位在列4月22日下午,雄安新區召開了法定數字人民幣試點推介會。推介會由雄安新區管理委員會改革發展局組織.

1900/1/1 0:00:00
五月的比特幣獎勵減半將迫使弱小礦商退出網絡_比特幣:我有20個比特幣能套現嗎

編者按:本文來自Cointelegraph中文,作者:ANTóNIOMADEIRA,Odaily星球日報經授權轉載.

1900/1/1 0:00:00
ETH周報 | 資金凈流入再創年內新高;以太坊2.0驗證者數量增加(4.20-4.26)_ETH:Zapp Coin

作者|秦曉峰編輯|郝方舟出品|Odaily星球日報 一、整體概述 兩名消息人士透露,以太坊開發商ConsenSys將再次裁員.

1900/1/1 0:00:00
OKEX投研:“負油價”背景下,比特幣會受何等影響?_比特幣:okex幣幣交易

美油5月期貨史上首現“負油價”比特幣價格持續走弱,短線尋求支撐長期來看,比特幣與原油不存在相關性進入2020年,世界始終不太平,新冠疫情肆虐全球,導致經濟停擺,美國股市結束十年牛市轉而快速暴跌.

1900/1/1 0:00:00
BSV減產,算力之爭生變_BSV:bbk幣銷毀2021

編者按:本文來自蜂巢財經News,作者:凱爾,Odaily星球日報經授權轉載。4月10上午8點48分,BSV網絡迎來首次區塊獎勵減半,礦工爆塊獎勵由12.5BSV調整至6.25BSV.

1900/1/1 0:00:00
從各類數據看Q1數字貨幣市場表現_以太坊:穩定幣

編者按:本文來自加密谷Live,作者:Messari,翻譯:子銘,Odaily星球日報經授權轉載。2020年第一季度是數字貨幣市場歷史上最活躍的一個季度.

1900/1/1 0:00:00
ads