PeckShield:bZx協議再遭黑客“二連擊”背後的技術命門
PeckShield
2020-02-20 10:21
本文约2515字,阅读全文需要约10分钟
02月18日,bZx 再次遭遇了類似的攻擊,這一次的攻擊從技術原理與上一次不同,此次黑客是通過操縱Oracle 價格對bZx 合約進行了“矇騙”。

PeckShield:硬核技術解析,bZx協議遭黑客漏洞攻擊始末PeckShield:硬核技術解析,bZx協議遭黑客漏洞攻擊始末PeckShield:硬核技術解析,bZx協議遭黑客漏洞攻擊始末

PeckShield:硬核技術解析,bZx協議遭黑客漏洞攻擊始末

》中分析了bZx 於02月15日遭到黑客一次可組合資產流動性攻擊,那是由於bZx 合約對抵押品狀態判斷不完善導致的。

Figure: Five Exploitation Steps With Oracle Manipulation

02月18日,bZx 再次遭遇了類似的攻擊,這一次的攻擊從技術原理與上一次不同,此次黑客是通過操縱Oracle 價格對bZx 合約進行了“矇騙”。

漏洞的攻擊細節如下:

一級標題

一級標題

一級標題

Figure1: Flashloan Borrowing From bZx

本次攻擊者向bZx 平台借出7,500 ETH,並指定攻擊者的合約(此前已經部署)為資產接收方地址,這部分是基本的借貸功能,此處不做進一步解釋。

一級標題

一級標題

一級標題

第二步:拉升sUSD

Figure2: Pumping With Kyber (and Uniswap)

這兩步驟也是正常的DEX 幣幣交換的過程,在這兩個批次操作之後sUSD 對ETH 的價格瘋漲到了0.00899,是市場價的2.5 倍。

一級標題

一級標題

一級標題

Figure3:Hoarding From Synthetix

一級標題

一級標題

第四步:抵押借款

攻擊者將手裡擁有的1,099,841 枚sUSD 通過bZx 的borrowTokenFromDeposit() 接口全部抵押到bZx 合約之中,按照sUSD/ETH 正常價格的話,bZx 應當借給攻擊者3,928 ETH,但是bZx 從Oracle Kyber 這邊獲取的價格偏高,使得借出了6,796 枚ETH,多藉了2,868 ETH。

Figure4: Collateralized Borrowing From bZx

一級標題

一級標題

一級標題

Figure5: Repay The Flashloan To bZx

第五步:閃貸還款

攻擊者利用從bZx 借到的6,796 枚ETH 以及手中剩餘的資產一起還給之前從bZx 借出來的7,500 ETH,然後退場離開,完成閃貸操作。

完成整個閃電貸流程之後,當前資產情況:

1)bZx 平台對攻擊者藉出的6,796 ETH;

總結總結

總結

一級標題

總結

這一次的攻擊事件中,我們能看出DeFi 產品在設計過程中幾個明顯的問題點:

1)當引入第三方Token 的時候,需要考察第三方Token 的安全性,有沒有可能被單方面市場操縱,從而引起價格波動;

2)DeFi 平台自身應當有價格容錯與檢驗機制,使用第三方Oracle 獲取價格的時候,對他方的數據有盡可能多的驗證;

3)平台自身對於價格也應當設立止水閥機制。

PeckShield
作者文库