SharkTeam:KyberSwap攻擊事件原理分析
SharkTeam
2023-11-28 10:41
本文约1053字,阅读全文需要约4分钟
2023年11月23日,因為Tick操縱和流動性重複計數,KyberSwap在以太坊、Arbitrum等多個網絡上受到黑客攻擊,攻擊者已獲利約4800萬美元。

2023 年11 月23 日,因為Tick 操縱和流動性重複計數,KyberSwap 在以太坊、Arbitrum 等多個網絡上受到黑客攻擊,攻擊者已獲利約4800 萬美元。

SharkTeam 對此事件第一時間進行了技術分析,並總結了安全防範手段,希望後續項目可以引以為戒,共築區塊鏈產業的安全防線。

一、攻擊交易分析

這次攻擊事件比較複雜,攻擊實作也比較巧妙,我們選擇其中一筆攻擊交易來詳細分析和說明。

攻擊交易:

0x09a3a12d58b0bb80e33e3fb8e282728551dc430c65d1e520fe0009ec519d75e8

攻擊者地址:

0x50275E0B7261559cE1644014d4b78D4AA63BE836

攻擊者合約:

0xaF2Acf3D4ab78e4c702256D214a3189A874CDC13

在這筆交易中,攻擊者針對3 個不同的流動性池進行一系列操作用來耗盡池中的資金。我們選擇了一個池進行攻擊流程分析,這些池彼此獨立存在。

攻擊流程:

1.攻擊者先是透過閃電貸貸了10, 000 枚wstETH,隨後將約2, 998 枚wstETH 加入進池子裡,swap 出來約2, 842 枚WETH;

2.此時池子對應的Tick 狀態為-110, 910 ,wstETH 的價格從1.05 ETH 變成0.000015257 。此時池子的流動性為0 ,為接下來製造虛假的流動性做鋪墊;

3.攻擊者在[ 0.000014659 , 0.000015260 ]範圍中加入3.4 wstETH 流動性,並且移除0.56 wstETH;

4.接下來,攻擊者進行兩次swap,分別是WETH->wstETH、wstETH->WETH。第一次swap 後,將價格壓至0.000014657 ,比0.000014659 稍微低點。第二次swap 後,將價格提高至0.000016368 ;

5.一開始是池子裡有約為3 wstETH 流動性(mint 3.4 wstETH - burn 0.56 wstETH),現在池子裡約為(1, 056 + 3, 911)枚,顯然更多;

6.攻擊歸還閃電貸後,並且從攻擊合約轉走資金

二、漏洞原因分析

這次攻擊事件根本原因:在computeSwapStep 函數中,計算Tick 時有精確度損失。由於Tick 可被操縱,成功繞過了_updateLiquidityAndCrossTick 函數,因而可以反復增加流動性。

1.在第一次swap 中,攻擊者利用calcReachAmount 函數計算wstETH 數量,最後計算得出1, 056.056735638220800000 ;

2.呼叫estimateIncrementalLiquidity 和calcFinalPrice 函數後,傳入的數量為1, 056.056735638220799999 。經過round up 和round down 處理後,此時Tick 為-111311 ,而下限Tick 為-111310 。因此,透過nextTick = currentTick+ 1 ,並使用「!=」對兩個sqrtP 參數進行判斷,成功繞過了_updateLiquidityAndCrossTick 函數,避免了流動性的更新;

3.在第二次swap 時候,呼叫了_updateLiquidityAndCrossTick,增加了流動性。由於第一次swap 時數量計算發生精確度損失,導致流動性未更新移除,導致第二次計算流動性時出現雙倍的情況。

三、安全建議

針對這次的攻擊事件,開發人員在日常開發中應採取以下安全措施:

1.注意正確計算業務中的不變量和數學邏輯,避免精確度損失。

2.專案發版前,需與第三方專業的審計團隊合作,進行合約審計。

About Us

SharkTeam 的願景是保護Web3世界的安全。團隊由來自世界各地的經驗豐富的安全專業人士和高級研究人員組成,精通區塊鍊和智慧合約底層理論。提供包括鏈上大數據分析、鏈上風險預警、智慧合約審計、加密資產追討等服務,並打造了鏈上大數據分析和風險預警平台ChainAegis,平台支援無限層級的深度圖分析,能有效對抗Web3世界的進階持續性攻擊(Advanced Persistent Threat,APT)風險。已與Web3生態各領域的關鍵參與者,如Polkadot、Moonbeam、polygon、Sui、OKX、imToken、ChainIDE 等建立長期合作關係。

官網:https://www.sharkteam.org

Twitter:https://twitter.com/sharkteamorg

Discord:https://discord.gg/jGH9xXCjDZ

Telegram:https://t.me/sharkteamorg

SharkTeam
作者文库