Paraluni攻擊事件分析

创宇区块链安全实验室
本文约1855字,阅读全文需要约7分钟
黑客利用重入漏洞攻擊Paraluni,獲利逾170萬美元,約1/3已流入Tornado。

1.前言

1.前言

1.前言

2.分析

北京時間2022 年03 月13 日,知道創宇區塊鏈安全實驗室監測到BSC上Paraluni 項目遭到攻擊,黑客獲利約170 萬美金。知道創宇區塊鏈安全實驗室將對本次事件深入跟踪並進行分析。

2.分析

2.1基礎信息

攻擊者地址:0x94bc1d555e63eea23fe7fdbf937ef3f9ac5fcf8f

攻擊者合約:0x4770b5cb9d51ecb7ad5b14f0d4f2cee8e5563645

攻擊交易哈希:0x70f367b9420ac2654a5223cc311c7f9c361736a39fd4e7dff9ed1b85bab7ad54

Masterchef 合約:0xa386f30853a7eb7e6a25ec8389337a5c6973421d

UBT代幣合約(攻擊者創建):0xca2ca459ec6e4f58ad88aeb7285d2e41747b9134

UGT代幣合約(攻擊者創建):0xbc5db89ce5ab8035a71c6cd1cd0f0721ad28b508

為了使得攻擊流程更加清晰,我們將本次攻擊分為兩個階段進行分析。

  • 正文

正文

  • 正文

預攻擊階段

1.攻擊者創建部署兩個代幣合約UBT和UGT。 UBT:改寫transferFrom函數,實現對MasterChef的deposit()函數和withdrawAsset() 函數的調用。 UGT:ERC20代幣標準的代幣合約2.攻擊者使用閃電貸從pancakeSwap借出156,984 BSC-USD和157,210 BUSD。 3.將藉出的USDT和BUSD向對應的ParaPair添加流動性,獲得155,935枚Paraluni LP代幣到UBT合約中。此時獲取的Lp代幣為後續的攻擊提供重要支持。

核心攻擊階段

1.調用MasterChef 合約中的depositByAddLiquidity 函數,傳入參數為_pid:18,_token:[UGT,UBT],_amounts:[1,1],表示向18 號池子添加1 個UGT 和1 個UBT 的流動性。

2.然後內部調用depositByAddLiquidityInternal 函數,該函數的主要作用是調用addLiquidityInternal 函數去鑄造LP 代幣,然後調用_deposit 函數存入LP 代幣到用戶地址。但是函數並未校驗用戶傳入的_tokens 和池子編號為_pid 的tokens 是否匹配,這就造成攻擊者能夠利用自己創建部署的惡意代幣進行後面重要操作。

3.depositByAddLiquidityInternal 再內部調用addLiquidityInternal 函數,該函數通過合約中LP 代幣餘額變化計算出需要deposit 的數量。

4.其中當addLiquidityInternal 函數調用到paraRouter.addLiquidity 時,會調用攻擊者在預攻擊階段部署的UBT 代幣合約中的transferFrom 函數完成添加流動性操作。

但該惡意合約改寫transferFrom 後會調用MasterChef 的deposit() 函數將預攻擊階段第三步獲取的LP 代幣轉入masterChef 中,此時的masterChef 中LP餘額已經變化,然後會調用_deposit 函數存入LP 代幣到用戶地址,此時獲取第一份LP 代幣。

5.攻擊者分別調用UBT 合約中的withdrawAsset 函數和利用攻擊合約調用Mastechef 合約中的withdraw 函數提取兩份相同的LP 到攻擊合約中;

3.漏洞核心

6.最後移除流動性獲取31 萬枚BSC-USD 和31 萬枚BUSD,然後歸還閃電貸完成攻擊。

3.漏洞核心