近日,PeckShield 監控到DeFi 協議Origin Protocol 穩定幣OUSD 遭到攻擊,攻擊者利用在衍生品平台dYdX 的閃電貸進行了重入攻擊(Re-entrancy attack),造成價值770萬美元的ETH 和DAI 的損失。

重入攻擊是以太坊智能合約上最經典的攻擊手段之一,著名的the DAO 被盜事件就是攻擊者運用重入攻擊導致以太坊硬分叉,損失價值5000 萬美元以太幣。

自今年4月起,DeFi 項目頻遭重入攻擊。

4月18日,黑客利用Uniswap 和ERC777 標準的兼容性問題缺陷實施重入攻擊;

4月19日,Lendf.Me 也遭到類似重入攻擊;

11月14日,黑客利用Akropolis 項目的SavingsModule 合約在處理用戶存儲資產時存在的某種缺陷連續實施了17 次重入攻擊,損失203萬枚DAI。

北京時間2020 年11 月17 日,PeckShield 監控到穩定幣OUSD 遭到重入攻擊。 OUSD 是Origin Protocol 推出的一種與美元掛鉤的ERC-20 穩定幣,用戶可通過將基礎穩定幣(例如USDT、USDC、DAI)存入Origin 智能合約來鑄造OUSD 穩定幣,之後該協議會將基礎穩定幣投資於多個DeFi 協議並進行收益耕作,為OUSD 持有者賺取回報。

重入攻擊重現憑空創造2050萬枚OUSD

PeckShield 通過追踪和分析發現,首先,攻擊者從dYdX 閃電貸貸出70,000 枚ETH;

隨後,在UniswapV2 中先將17,500 枚ETH 轉換為785萬枚USDT,再將所貸剩餘的52,500 枚ETH 轉換為2099萬枚DAI;

接下來,攻擊者分四次鑄造OUSD 穩定幣:

第一次通過mint() 函數鑄造OUSD 時,攻擊者確實在Origin 智能合約中存放了750萬枚USDT,並獲得750萬枚OUSD;

第二次通過mintMultiple() 多種穩定幣函數鑄造OUSD 時,攻擊者在Origin 智能合約中存放了2050萬枚DAI 和0 枚假“穩定幣”,並在此步驟中通過重入攻擊來攻擊合約。攻擊者將2050萬枚DAI 和0 枚假“穩定幣”存入VaultCore 中,此時智能合約收到2050萬枚DAI,在嘗試接收0 枚假“穩定幣”時,攻擊者利用惡意合約進行劫持,在智能合約正常啟動鑄造2050萬枚OUSD 之前,調用mint() 函數,先惡意增發了2050萬枚OUSD,此次惡意增發由VaultCore 合約調用rebase() 函數實施。

值得注意的是,為順利實施劫持,攻擊者在上述mint() 函數調用時,真金白銀地存入了2,000 枚USDT,同時獲得第三次鑄幣2,000 枚OUSD。隨後,調用oUSD.mint() 函數第四次鑄造2050 萬枚OUSD。

rebase 指代幣供應量彈性調整過程,即對代幣供應量進行“重新設定”。在DeFi 領域有一類代幣擁有彈性供應量機制,即每個代幣持有用戶的錢包餘額和代幣總量會根據此代幣價格的變化而等比例變動。此時,攻擊者共獲得2800.2萬枚OUSD,包括抵押的750萬枚USDT、2050萬枚DAI 和2000 枚USDT。由於調用rebase() 函數,攻擊者所獲得的OUSD 總計上漲至33,269,000 枚。

最後,攻擊者先用所獲得的33,269,000 枚OUSD 贖回1950萬枚DAI、940萬枚USDT、390萬枚USDC;再在Uniswap 中將1045萬枚USDT 兌換為22,898 枚ETH,將390萬枚USDC 兌換為8,305 枚ETH,將190萬枚DAI 兌換為47,976 枚ETH,共計79,179 枚ETH,並將其中70,000 枚ETH 歸還到dYdX 閃電貸中。

據PeckShield 統計,攻擊者在此次攻擊中共計獲利11,809 枚ETH 和2,249,821 枚DAI,合計770萬美元。

對於次攻擊事件,Origin Protocol 官方回應稱,正在積極採取措施,以期收回資金。

隨著DeFi 生態的蓬勃發展,其中隱藏的安全問題也逐漸凸顯,由於DeFi 相關項目與用戶資產緊密相連,其安全問題亟待解決。

對此,PeckShield 相關負責人表示:“此類重入攻擊的發生主要是由於合約沒有對用戶存儲的Token 進行白名單校驗。DeFi 是由多個智能合約和應用所組成的'積木組合',其整體安全性環環相扣,平台方不僅要確保在產品上線前有過硬的代碼審計和漏洞排查,還要在不同產品做業務組合時考慮因各自不同業務邏輯而潛在的系統性風控問題。”