以太幣交易所 以太幣交易所
Ctrl+D 以太幣交易所
ads

慢霧:詳解 Uniswap 的 ERC777 重入風險_TOKE

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 來實現)

慢霧:pGALA合約黑客已獲利430萬美元:11月4日消息,安全團隊慢霧在推特上表示,pGALA合約黑客已將大部分GALA兌換成13,000枚BNB,獲利超430萬美元,該地址仍有450億枚Gala,但不太可能兌現,因為資金池基本已耗盡。此外,黑客的初始資金來自幾個幣安賬戶。

今日早些時候消息,一個BNB Chain上地址在BNB Chain上地址憑空鑄造了超10億美元的pGALA代幣,并通過在PancakeSwap上售出獲利。pNetwork表示此為跨鏈橋配置錯誤所致,GALA跨鏈橋已暫停,請用戶不要在BNB Chain上DEX中交易pGALA。[2022/11/4 12:16:04]

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

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

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

慢霧:Inverse Finance遭遇閃電貸攻擊簡析:據慢霧安全團隊鏈上情報,Inverse Finance遭遇閃電貸攻擊,損失53.2445WBTC和99,976.29USDT。慢霧安全團隊以簡訊的形式將攻擊原理分享如下:

1.攻擊者先從AAVE閃電貸借出27,000WBTC,然后存225WBTC到CurveUSDT-WETH-WBTC的池子獲得5,375.5個crv3crypto和4,906.7yvCurve-3Crypto,隨后攻擊者把獲得的2個憑證存入Inverse Finance獲得245,337.73個存款憑證anYvCrv3Crypto。

2.接下來攻擊者在CurveUSDT-WETH-WBTC的池子進行了一次swap,用26,775個WBTC兌換出了75,403,376.18USDT,由于anYvCrv3Crypto的存款憑證使用的價格計算合約除了采用Chainlink的喂價之外還會根據CurveUSDT-WETH-WBTC的池子的WBTC,WETH,USDT的實時余額變化進行計算所以在攻擊者進行swap之后anYvCrv3Crypto的價格被拉高從而導致攻擊者可以從合約中借出超額的10,133,949.1個DOLA。

3.借貸完DOLA之后攻擊者在把第二步獲取的75,403,376.18USDT再次swap成26,626.4個WBTC,攻擊者在把10,133,949.1DOLAswap成9,881,355個3crv,之后攻擊者通過移除3crv的流動性獲得10,099,976.2個USDT。

4.最后攻擊者把去除流動性的10,000,000個USDTswap成451.0個WBT,歸還閃電貸獲利離場。

針對該事件,慢霧給出以下防范建議:本次攻擊的原因主要在于使用了不安全的預言機來計算LP價格,慢霧安全團隊建議可以參考Alpha Finance關于獲取公平LP價格的方法。[2022/6/16 4:32:58]

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

慢霧:AToken錢包疑似遭受攻擊 用戶反饋錢包中資產被盜:據慢霧區情報,近期 AToken 錢包(atoken.com)疑似遭受到攻擊,用戶在使用 AToken 錢包后,幣被偷偷轉移走。目前已經有較多的用戶反饋錢包中的資產被盜。AToken 錢包官方推特在2021年12月20日發布了停止運營的聲明。官方 TG 頻道中也有多位用戶反饋使用 AToken 錢包資產被盜了,但是并沒有得到 AToken 團隊的回復和處理。

如果有使用 AToken 錢包的用戶請及時轉移資產到安全的錢包中。具體可以參考如下操作:

1. 立即將 AToken 錢包中的相關的資產轉移到新的錢包中。

2. 廢棄導入 AToken 或者使用 AToken 生成的助記詞或私鑰的錢包。

3. 參考慢霧安全團隊梳理的數字資產安全解決方案,對數字資產進行妥善的管理。

4. 留存相應有問題的 AToken 錢包 APP 的安裝包,用于后續可能需要的取證等操作。

5. 如果資產已經被盜,可以先梳理被盜事件的時間線,以及黑客的相關地址 MistTrack 可以協助挽回可能的一線希望。[2022/2/9 9:39:46]

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

動態 | 慢霧:Cryptopia被盜資金發生轉移:據慢霧科技反洗錢(AML)系統監測顯示,Cryptopia攻擊者分兩次轉移共20,843枚ETH,價值超380萬美元。目前資金仍停留在 0x90d78A49 和 0x6D693560 開頭的兩個新地址,未向交易所轉移。據悉,今年早些時候加密貨幣交易所Cryptopia遭受了黑客攻擊,價值超過1600萬美元的以太坊和ERC-20代幣被盜。[2019/11/17]

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

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

細節分析

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

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

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

通過查詢交易的細節,我們發現,攻擊者首先是通過 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:TOKETOKTOKENKENPUP TokenSlothi TokenZG TokenZPER token

比特幣最新價格
操控者無法回避的阻力問題_SNX

換個視角聊聊。 因為昨天文章有個圖,就是aicoin統計到的賣出量。就幾百個比特幣砸盤然后盤面大跌這個事。 說一下,市場的顧慮點.

1900/1/1 0:00:00
4.24午間行情:走勢健康 進入震蕩蓄勢階段_DGE

文章系金色財經專欄作者牛七的區塊鏈分析記供稿,發表言論僅代表其個人觀點,僅供學習交流!金色盤面不會主動提供任何交易指導,亦不會收取任何費用指導交易,請讀者仔細甄別,謹防上當.

1900/1/1 0:00:00
以太網即將獨霸穩定幣世界?_以太坊

在過去24小時,BTC價格上漲了4%,而ETH、XLM和XTZ都經歷了7%到9%的漲幅。加密貨幣方面沒什么大的新聞,人們的注意力仍然集中在以太坊作為穩定幣價值傳輸的平臺這一點上(我之前也寫過,這.

1900/1/1 0:00:00
FTX視頻直播 | 超跌反彈還是重返牛市?從技術面和基本面剖析主力不想讓你知道的走法_FTX

超跌反彈還是重返牛市? 4月13日(周一)晚上7:30,FTX攜手幣coin,特邀FTX臺灣區社群合伙人:Benson數據:Alameda Research地址向FTX轉入8.

1900/1/1 0:00:00
看雀巢咖啡如何玩轉區塊鏈?_區塊鏈

全球最大的食品生產商雀巢(Nestlé)宣布將加入IBM 的Food Trust Blockchain Initiative,并將其對區塊鏈技術的使用擴展到該公司的豪華咖啡品牌Zoégas.

1900/1/1 0:00:00
視頻 | 用戶視角:三大交易所眼中的對方什么樣?_TUB

你眼中的三大交易所是什么樣呢?留言區交流~YouTube將為視頻創作者探索NFT功能:1月25日消息,YouTube首席執行官Susan Wojcicki表示.

1900/1/1 0:00:00
ads