北京時間9月14日訊息,DeFi借貸協議bZx再次遭到攻擊,而這次攻擊共造成了大約800萬美元的損失,據bZx聯合創始人Kyle Kistner最初提到稱:“這似乎是一次預言機操縱攻擊。”
在攻擊被發現後,bZx團隊立即使用管理金鑰暫停了協議,據悉這次攻擊交易利用了閃電貸和Synthetix,“但它不會影響Synthetix系統,儘管它確實涉及了sUSD,” bZx在twitter上寫道。
而bZx官方在最新公佈的安全報告中提到稱:
“由於一次代幣重複事件,協議保險基金暫時累積了一筆債務。除了協議現金流外,保險基金還會得到代幣庫的支援。”
以下是這次安全事故的時間線:
bZx團隊注意到協議鎖定值(TVL)出現了異常變動;
發現iToken合約有異常,該異常的發生與 _internalTransferFrom() 函式相關;
在確定修復方案後,iToken的鑄造和燃燒被暫停(借款和交易不受影響);
受影響的iToken合約的新版本得到部署,餘額得到更正;
團隊將補丁程式碼傳送給派盾(Peckshield)和Certik進行審查;
iToken的鑄造及燃燒恢復;
攻擊技術細節
每個ERC20代幣都有一個 transferFrom()函式是用於負責傳輸代幣的。你可以呼叫這個函式來建立一個 iToken並將其傳遞給自己,從而允許你人為地增加餘額。
下面是攻擊涉及的技術細節:
使用相同的_from和 _to地址呼叫了傳輸函式;
用相同的引數呼叫Immediately _internalTransferFrom;
下面的程式碼行存在故障:
當_from和_to地址相同時,會導致_balancesFrom和_balancesTo相等。
那麼
上面的問題導致 _balancesFrom餘額的減少,並增加_balancesTo的餘額,最後最重要的部分是儲存_balancesFromNew和 _balancesToNew。那麼攻擊者就能夠有效地人工增加自己的餘額。
然後,下面就是補丁程式碼:
這可以防止攻擊者增加自己的餘額,據悉,修補後的程式碼已被髮送給Peckshield和Certik進行審查,而雙方都批准了這些更改。
安全事故造成近800萬美元債務
儘管,bZx程式碼漏洞很快得到了解決,但這次安全事故確實造成了協議很大的損失,根據官方公佈的資訊顯示,這次事件導致了以下這些債務:
219,199.66 LINK
4,502.70 ETH
1,756,351.27 USDT
1,412,048.48 USDC
667,988.62 DAI
以當前市場價計算,這些損失的代幣的價值達到了800萬美元。
審計並不是靈丹妙藥
根據Bzx團隊公開的資訊顯示,該協議此前已經過安全公司Peckshield及Certik的嚴格審計,其中Peckshield對bzx協議的審計用到了12人周的工作量,而Certik則花費了7人周的工作量。此外,bzx協議團隊還進行了廣泛的自動化測試,不幸的是,審計並不是靈丹妙藥。
而在這次安全事件中,由於bzx協議團隊控制了管理金鑰,因而能夠及時地應對這一事件,否則損失問題將會更大。
顯然,這次事故再次為我們敲響了DeFi安全性的警鐘,即便是得到審計公司的把關,也無法確保程式碼不存在漏洞,而近期湧現出來的大量新DeFi專案,它們的安全隱患顯然要更大。
最後,一首涼涼,送給流動性挖礦。