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

慢霧:詳解 Uniswap 的 ERC777 重入風險_ETH:C Universal token

Author:

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

前言

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

知識準備

ERC777 協議是以太坊上的代幣標準協議,該協議是以太坊上 ERC20 協議的改進版,主要的改進點如下:

1. 使用和發送以太相同的理念發送 token,方法為:send(dest, value, data)

2. 合約和普通地址都可以通過注冊 tokensToSend hook 函數來控制和拒絕發送哪些token(拒絕發送通過在hook函數tokensToSend 里 revert 來實現)

慢霧:從Multichain流出的資金總額高達2.65億美元,分布在9條鏈:金色財經報道,自7月7日以來,從 Multichain 流出的資金總額高達 2.65 億美元,分布在 Ethereum、BNB Chain、Polygon、Avalanche、Arbitrum、Optimism、Fantom、Cronos、Moonbeam 鏈。其中 6582 萬美元已經被 Circle 和 Tether 凍結,1,296,990.99 ICE(約 162 萬美元) 被 Token 發行方 Burn。流出的資金中,包括:

1)從 Multichain: Old BSC Bridge 轉出的 USDT;

2)從 Multichain: Fantom Bridge 轉出的 USDC、DAI、LINK、UNIDX、USDT、WOO、ICE、CRV、YFI、TUSD、WETH、WBTC;

3)從 Anyswap: Bridge Fantom 轉出的 BIFI;

4)從 Multichain: Moonriver Bridge 轉出的 USDC、USDT、DAI、WBTC;

5)從 MultiChain: Doge Bridge 轉出的 USDC;

6)從 Multichain: Executor 轉出的 DAI、USDC、BTCB、WBTC、WETH、Dai.e、WBTC.e、Bridged USDC、BTC、fUSDT、ETH 等;

7)從被 Etherscan 標記為 Fake_Phishing183873 的 0xe1910...49c53 轉出的 WBTC、USDT、ETH,同時我們認為該標記(Fake Phishing183873)或許是 Etherscan 上的虛假標記,地址可能以前屬于 Multichain 官方賬戶。[2023/7/11 10:48:30]

3. 合約和普通地址都可以通過注冊 tokensReceived hook 函數來控制和拒絕接受哪些token(拒絕接受通過在hook函數tokensReceived 里 revert 來實現)

慢霧:過去一周Web3生態因安全事件損失約2400萬美元:6月19日消息,據慢霧發推稱,過去一周Web3生態系統因安全事件損失約2400萬美元,包括Atlantis Loans、Ben Armstrong、TrustTheTrident、FPG、Sturdy、Pawnfi、Move VM、Hashflow、DEP/USDT與LEV/USDC、Midas Capital,總計23,795,800美元。[2023/6/19 21:46:18]

4. tokensReceived 可以通過 hook 函數可以做到在一個交易里完成發送代幣和通知合約接受代幣,而不像 ERC20 必須通過兩次調用(approve/transferFrom)來完成

5. 持有者可以"授權"和"撤銷"操作員(operators: 可以代表持有者發送代幣) 這些操作員通常是(去中心化)交易所、支票處理機或自動支付系統

6. 每個代幣交易都包含 data 和 operatorData 字段, 可以分別傳遞來自持有者和操作員的數據

7. 可以通過部署實現 tokensReceived 的代理合約來兼容沒有實現tokensReceived 函數的地址

慢霧:V神相關地址近日于Uniswap賣出3000枚以太坊:11月14日消息,據慢霧監測顯示,以太坊創始人Vitalik Buterin地址(0xe692開頭)近日在Uniswap V3上分三筆將3000枚以太坊(約400萬美元)兌換成了USDC。[2022/11/14 13:03:22]

在這里,我們需要特別關注的點是第二點,即 ERC777 標準中的 tokenToSend 函數,根據 ERC777 協議的定義,遵循該標準的 token 代幣在每一次發生代幣轉賬的時候都會去嘗試調用代幣發送者 tokensToSend 函數,而代幣持有者可以通過在 ERC1820 注冊合約注冊自己的合約并通過在這個 hook 函數中定義一些操作來處理代幣轉賬的過程中的某些流程,如拒絕代幣發送或其他操作。

了解這些關鍵點,有助于我們理解這次攻擊的具體攻擊手法。現在開始,我們可以稍微加速,看看對于 Uniswap 而言,這次到底發生了什么?

細節分析

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

慢霧:Nomad事件中仍有超過9500萬美元被盜資金留在3個地址中:8月2日消息,慢霧監測顯示,Nomad攻擊事件中仍有超過9500萬美元的被盜資金留在3個地址中。其中0xB5C55f76f90Cc528B2609109Ca14d8d84593590E中仍有1084枚ETH、120萬枚DAI、103枚WBTC等約800萬美元的加密資產,該地址也負責將1萬枚WETH轉移到另一地址以及將其他USDC轉移;第二個地址0x56D8B635A7C88Fd1104D23d632AF40c1C3Aac4e3目前仍有1.28萬枚ETH、1.02萬枚WETH、80萬DAI等約4700萬美元的加密資產;第三個地址0xBF293D5138a2a1BA407B43672643434C43827179在收到3866.6萬USDC后兌換為了DAI,目前有約3970萬美元的加密資產。

目前慢霧經過梳理后,無法將地址3與其他兩個地址連接起來,但這些攻擊具有相同的模式。[2022/8/2 2:53:04]

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

慢霧:Avalanche鏈上Zabu Finance被黑簡析:據慢霧區情報,9月12日,Avalanche上Zabu Finance項目遭受閃電貸攻擊,慢霧安全團隊進行分析后以簡訊的形式分享給大家參考:

1.攻擊者首先創建兩個攻擊合約,隨后通過攻擊合約1在Pangolin將WAVAX兌換成SPORE代幣,并將獲得的SPORE代幣抵押至ZABUFarm合約中,為后續獲取ZABU代幣獎勵做準備。

2.攻擊者通過攻擊合約2從Pangolin閃電貸借出SPORE代幣,隨后開始不斷的使用SPORE代幣在ZABUFarm合約中進行`抵押/提現`操作。由于SPORE代幣在轉賬過程中需要收取一定的手續費(SPORE合約收取),而ZABUFarm合約實際接收到的SPORE代幣數量是小于攻擊者傳入的抵押數量的。分析中我們注意到ZABUFarm合約在用戶抵押時會直接記錄用戶傳入的抵押數量,而不是記錄合約實際收到的代幣數量,但ZABUFarm合約在用戶提現時允許用戶全部提取用戶抵押時合約記錄的抵押數量。這就導致了攻擊者在抵押時ZABUFarm合約實際接收到的SPORE代幣數量小于攻擊者在提現時ZABUFarm合約轉出給攻擊者的代幣數量。

3.攻擊者正是利用了ZABUFarm合約與SPORE代幣兼容性問題導致的記賬缺陷,從而不斷通過`抵押/提現`操作將ZABUFarm合約中的SPORE資金消耗至一個極低的數值。而ZABUFarm合約的抵押獎勵正是通過累積的區塊獎勵除合約中抵押的SPORE代幣總量參與計算的,因此當ZABUFarm合約中的SPORE代幣總量降低到一個極低的數值時無疑會計算出一個極大的獎勵數值。

4.攻擊者通過先前已在ZABUFarm中有進行抵押的攻擊合約1獲取了大量的ZABU代幣獎勵,隨后便對ZABU代幣進行了拋售。

此次攻擊是由于ZabuFinance的抵押模型與SPORE代幣不兼容導致的,此類問題導致的攻擊已經發生的多起,慢霧安全團隊建議:項目抵押模型在對接通縮型代幣時應記錄用戶在轉賬前后合約實際的代幣變化,而不是依賴于用戶傳入的抵押代幣數量。[2021/9/12 23:19:21]

通過查詢交易的細節,我們發現,攻擊者首先是通過 ethToTokenSwapInput 函數向 Uniswap 兌換了一些 imBTC,然后再通過 tokenToEthSwapInput 函數開始第一次用 imBTC 換取 ETH,然后 Uniswap 先將 ETH 轉給了攻擊者,再調用 imBTC 的 transferFrom 函數,由于 imBTC 實現了 ERC777 標準,所以在調用 imBTC 的 trasferFrom 函數的時候, imBTC 會對攻擊者的 tokensToSend 函數進行調用。隨后,在攻擊者的 tokensToSend 函數中,攻擊者會進行第二次用 imBTC 換取 ETH,然后流程結束。

從交易細節上看,這里似乎還是沒有什么問題,我們繼續跟蹤 UniSwap 的代碼。

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

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

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

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

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

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

防御方法

1. 在 Uniswap 的 tokenToEthSwapInput 函數中加入 OpenZeppelin 的 ReentrancyGuard 函數,防止重入問題。

2. 在進行代幣交換的時候,先扣除用戶的代幣,再將 ETH 發送給用戶。

同時,針對本次攻擊事件慢霧安全團隊建議:

1. 在關鍵的業務操作方法中加入鎖機制,如:OpenZeppelin 的 ReentrancyGuard

2. 開發合約的時候采用先更改本合約的變量,再進行外部調用的編寫風格

3. 項目上線前請優秀的第三方安全團隊進行全面的安全審計,盡可能的發現潛在的安全問題

4. 多個合約進行對接的時候也需要對多方合約進行代碼安全和業務安全的把關,全面考慮各種業務場景相結合下的安全問題

5. 合約盡可能的設置暫停開關,在出現“黑天鵝”事件的時候能夠及時發現并止損

6. 安全是動態的,各個項目方也需要及時捕獲可能與自身項目相關的威脅情報,及時排查潛在的安全風險

最后的思考

這兩天的 DeFi 世界被鬧得沸沸揚揚,imBTC 作為 ERC777 代幣首當其沖,ERC777 協議也飽受詬病,但是看完分析,造成此次的攻擊事件原因,真的是 imBTC 或者是 ERC777 協議的問題嗎?

如果 Uniswap 做好了 ERC777 的兼容,使用 ReentrancyGuard,并在代幣交換的時候先扣除用戶的代幣,再將 ETH 發送給用戶,這樣的問題是不是就不會發生?

imBTC 作為 以太坊上 token 化的比特幣代幣協議,其安全性在自身單獨運行的時候并不存在問題,第三方 DeFi 平臺在接入的時候,應需要充分考慮平臺本身的業務邏輯與接入代幣之間的兼容性,才能避免因兼容性發生不必要的安全問題。而不是簡單的將問題歸咎于協議和代幣提供方。

Tags:ETHBTCKENTOKreth幣有投資價值嗎超級比特幣SBTC解散imtoken鏈接地址C Universal token

AAVE
證監會科技監管局局長姚前:數字貨幣與銀行賬戶_數字貨幣:BSP

本文探討了數字貨幣與銀行賬戶的關系,提出了基于銀行賬戶與數字貨幣錢包分層并用的設計思路,并借助專項補貼款發放的案例展示了應用場景,同時還提出了進一步研究可聚焦的領域.

1900/1/1 0:00:00
油價“驚魂”一周 但最危險的時刻在一個月后_KAS:300

原油需求量大減,美國加州海域停泊數十艘油輪。近日,美國海岸警衛隊在社交媒體上發布的視頻顯示,在美國加州附近海域約30艘油輪已經下錨,滿載超過2000萬桶原油的油輪無處可去,只能停泊在長灘到舊金山.

1900/1/1 0:00:00
金色薦讀 | 閃電網絡的快與慢_比特幣:BTC

Overview 概述 閃電網絡作為比特幣的擴容解決方案之一,保持了比特幣原鏈的核心特征。區別于 BCH、BSV 兩個比特幣分叉項目,閃電網絡技術路徑并沒有選擇通過增加比特幣區塊容量大小來擴容,

1900/1/1 0:00:00
為奪回比特大陸法人 詹克團不服起訴北京海淀市場監督管理局_VUSD:VUSD價格

吳說區塊鏈最新獲悉,詹克團曾通過起訴北京市海淀區市場監督管理局,試圖改變比特大陸將法人變更為吳忌寒的決定。但詹克團在提出沒多久后就自行撤訴。撤訴后,目前詹克團正在申請行政復議中.

1900/1/1 0:00:00
“幣圈第一反指”挑戰火幣最強預言帝 七爺回應:若全中再送100個BTC_區塊鏈:BTC

薛定諤的貓,只有打開盒子的一瞬間,才知道答案是什么。然而,對于幣圈網紅、知名“95后”區塊鏈創業者蔡曙來說,答案是迷?不存在的!他每次開的方向都與行情走勢相反,數次爆倉,屢敗屢戰,因而得名“幣圈.

1900/1/1 0:00:00
一文讀懂首個交易所型礦池火幣礦池的成長史_HPT:Dingo Token

今年5月,BTC將迎來歷史上第三次減半,減半期的到來也讓礦圈回到聚光燈下,作為行業內最資深的比特幣信仰者,他們對市場的理解更敏銳、更深刻,有人曾評論,礦工是行業人“最聰明的勞動者”.

1900/1/1 0:00:00
ads