項目方遇見“打樁機”?被攻擊約40次損失170萬美元!Paraluni安全事件分析

2022年3月13日,成都鏈安鏈必應-區塊鏈安全態勢感知平台輿情監測顯示,Paraluni合約遭受攻擊損失約170萬美元,成都鏈安技術團隊對此事件進行了相關分析。

#1 總述

我們以第一筆攻擊交易0xd0b4a1d4964cec578516bd3a2fcb6d46cadefe1fea5a2f18eec4c0a496e696f9為例:

地址列表

攻擊地址:

0x94bC1d555E63eEA23fE7FDbf937ef3f9aC5fcF8F

攻擊合約 :

0x4770b5cb9d51EcB7AD5B14f0d4F2cEe8e5563645

ParaProxy:

0x633Fa755a83B015cCcDc451F82C57EA0Bd32b4B4

ParaImpl:

0xA386F30853A7EB7E6A25eC8389337a5C6973421D (MasterChef)

UGT :

0xbc5db89CE5AB8035A71c6Cd1cd0F0721aD28B508

UBT

0xcA2ca459Ec6E4F58AD88AEb7285D2e41747b9134

1.向CakeSwap(0x7EFaEf62)中通過閃電貸借貸224 BSC-USD, 224 BUSD

2.把第1步借到的代幣向Para-LP(0x3fD4FbD7)中添加流動性,並將獲得的222枚流動性代幣的接收地址指定為UBT(0xcA2ca459)地址,這一步是為了後續的重入做準備。

項目方遇見“打樁機”?被攻擊約40次損失170萬美元!Paraluni安全事件分析

圖 1 初始準備

3.攻擊合約(0x4770b5cb)調用ParaProxy合約的depositByAddLiquidity函數,添加流動性代幣抵押挖礦,此處傳入的pid為18,對應的Para-LP (BSC-USD/BUSD) 0x3fD4FbD7a83062942b6589A2E9e2436dd8e134D4,但是token0,token1傳入的地址為UGT、UBT的地址,數量為1e18。

項目方遇見“打樁機”?被攻擊約40次損失170萬美元!Paraluni安全事件分析

圖 2 重入攻擊

4. 此處原本正常的邏輯為:添加流動性,並將流動性代幣存入pid為18的流動性抵押池,但是本函數在代碼中並未檢查添加的流動性token0、token1得到的流動性代幣是否與pid對應的流動性代幣地址一致,導致了攻擊的發生。注意,並不是所有的流動性池抵押都有該風險,由於第2524行代碼,pool的ticket需要為零地址才能夠通過該檢查。

但是攻擊者通過控制執行邏輯,實際執行的邏輯為:第2505,2506行將攻擊者指定的1枚UGT、1枚UBT代幣轉入ParaProxy合約。然後在第2535行代碼用於添加流動性,並在第2537行檢查添加的流動性代幣數量。

此時,vars.oldBalance為初始流動性代幣數量。攻擊者為了通過第2537行的檢查,在添加流動性的過程中,進行了重入攻擊。由於在添加流動性時調用了攻擊者構造的惡意代幣的transferFrom函數,攻擊者在transferFrom函數中才將流動性通過deposit函數存入ParaProxy合約。這也是第2步時攻擊合約將流動性代幣接收地址指定為UBT合約的原因所在。

在重入過程中,UBT合約存入了真正的LP代幣222枚,並計入ParaProxy的賬本中。在重入完成後,ParaProxy合約地址新增了222枚LP代幣,ParaProxy合約將其視為攻擊合約添加的LP,並計入賬本中。至此,UBT合約和攻擊合約都新增了222枚LP的存取記錄。

項目方遇見“打樁機”?被攻擊約40次損失170萬美元!Paraluni安全事件分析

圖 3 ParaImpl合約相關代碼

重入相關過程如下圖所示:

項目方遇見“打樁機”?被攻擊約40次損失170萬美元!Paraluni安全事件分析

圖 4 攻擊流程示意圖

5.UBT合約和攻擊合約分別調用withdraw函數,從ParaProxy合約提取221枚LP(有部分手續費),並歸集到攻擊合約,由攻擊合約將LP移除流動性並獲取對應的BSC-USD以及BUSD

6.歸還閃電貸225枚BSC-USD, 225枚BUSD,並將獲利的221枚BSC-USD、225枚BUSD發送到攻擊者地址。整個攻擊交易執行完成。

#2 總結建議

攻擊者一共執行了約40次攻擊,共獲利約170萬美元(665枚ETH)。截止發稿時,攻擊者通過跨鏈協議將其轉到以太坊網絡中,並將其中的660枚ETH轉入Tornado.Cash,另外5枚ETH轉入了0xDd52CE617cAF1b7C8cEaCC111DE2f1c54E20C1b0地址。

本次攻擊主要由合約代碼中存在邏輯缺陷以及存在資金操作的關鍵函數未進行防重入導致。建議合約開發者在開發過程中進行完整的測試以及第三方審計,並養成使用Openzeppelin庫的ReentrancyGuard合約來進行重入攻擊的防範。

本文鏈接:https://www.8btc.com/article/6735640

轉載請註明文章出處

(0)
上一篇 2022-03-14 11:59
下一篇 2022-03-14 12:58

相关推荐