專案方遇見“打樁機”?被攻擊約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)地址,這一步是為了後續的重入做準備。


圖 1 初始準備

3.攻擊合約(0x4770b5cb)呼叫paraproxy合約的depositbyaddliquidity函式,新增流動性代幣抵押挖礦,此處傳入的pid為18,對應的para-lp (bsc-usd/busd) 0x3fd4fbd7a83062942b6589a2e9e2436dd8e134d4,但是token0,token1傳入的地址為ugt、ubt的地址,數量為1e18。

圖 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的存取記錄。

圖 3 paraimpl合約相關程式碼


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

圖 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合約來進行重入攻擊的防範。


免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;