Pickle Finance遭攻击损失近2000万美元DAI,未经严格审计的DeFi路在何方?
這一周,“科學(xué)家”們(利用技術(shù)實力和知識門檻專薅 DeFi 的羊毛的黑客)很忙。
11月14日,黑客攻擊 Value DeFi 的 MultiStablesVault 池子,獲得近 740?萬美金的 DAI;11月17日,黑客攻擊Origin Protocol 憑空鑄造 2050萬 枚OUSD。
今天凌晨 2 時 37 分,當(dāng)人們還在熟睡之時,黑客攻擊 DeFi 協(xié)議 Pickle Finance(酸黃瓜),撈得近 2000 萬美元的 DAI。
加密貨幣再次登上央視?DeFi淪為“科學(xué)家”的提款機?
11月18日,比特幣沖擊 18,000 美元,加密貨幣再次登上央視,此前,加密貨幣被譽為去中心化的金融工具首次登上央視。
據(jù)央視報道,從投資回報率的角度來看,加密貨幣是今年真正的“頭號”投資產(chǎn)品。“彭博銀河加密貨幣指數(shù)”上漲約65%,超過金價逾20%的漲幅,也超過全球股市、債市和大宗商品市場的收益率。漲幅較高的一個關(guān)鍵原因是以太坊幣價暴漲,漲幅達到169.40%。
央視解釋道:“以太坊幣價格攀升得益于去中心化金融工具(DeFi)的使用增加,以及疫情肆虐后各國出臺的巨額刺激措施,讓投資者選擇了比特幣、以太坊等加密貨幣進行保值。”
一方面,加密貨幣市場頻頻發(fā)出利好消息;另一方面,DeFi 項目因未經(jīng)嚴(yán)格審計頻遭攻擊。
據(jù)悉,今年 9 月 10?日 酸黃瓜 Pickle Finance 啟動流動性挖礦,9 月 14 日 V神發(fā)推文贊賞該項目,使其代幣價格暴漲 10 倍。而遭到此次攻擊后,酸黃瓜損失近價值 2000 萬的 DAI,同時 24 小時內(nèi)其代幣腰斬。
CoinmarketCap 數(shù)據(jù)顯示, Pickle Finance 代幣(Pickle)的價格在24小時內(nèi),從 22.7 美元跌到 10.2 美元,它的市值在未銷毀的情況下, 24小時內(nèi)蒸發(fā)了 1220 萬美元。
發(fā)生了什么?
PeckShield 通過追蹤和分析發(fā)現(xiàn),攻擊者通過StrategyCmpdDaiV2.getSuppliedUnleveraged() 函數(shù)查詢資產(chǎn)余額 1972萬 美元;
隨后,攻擊者利用輸入驗證漏洞將 StrategyCmpdDaiV2 中的所有 DAI 提取到 Pickle Jar:這個漏洞位于 ControllerV4.swapExactJarForJar() 函數(shù)中,其中包含兩個既定的偽 Jar。在未驗證既定 Jar 的情況下,此步驟會將存入的所有 DAI 提取到 Pickle Jar,并進行下一輪部署。
接下來,攻擊者調(diào)用 earn()?函數(shù)將提取的 DAI 部署到 StrategyCmpdDaiV2 中。在內(nèi)部緩沖區(qū)管理中,黑客調(diào)用了三次 earn() 函數(shù),在 StrategyCmpdDaiV2 中生成共計 950,818,864.8211968 枚 cDAI;
第一次調(diào)用 earn() 函數(shù)存入 1976萬 枚DAI,鑄造 903,390,845.43581639 枚 cDAI;
第二次調(diào)用 earn() 函數(shù)存入 98.8萬 枚DAI,鑄造 45,169,542.27179081 枚 cDAI;
第3次調(diào)用 earn() 函數(shù)存入4.9萬 枚DAI,鑄造 2,258,477.11358954 枚cDAI;
隨后,攻擊者調(diào)用?ControllerV4.swapExactJarForJar()?函數(shù),利用任意代碼執(zhí)行將?StrategyCmpdDaiV2?中的所有?cDAI?提取出來,這一步中,_execute()?函數(shù)有兩個參數(shù):_target和?_data,_target?指的是目標(biāo)地址,即圖中橘色所示部分;_target?是一個加白的地址,攻擊者沒辦法任意控制此地址,此處他們利用的是?CurveProxyLogic,該加白的合約(能通過?262?行?approvedJarConverter[_targets[i]?的檢查。也就是說,能被完全控制的是參數(shù)? _data,即圖中紫色所示部分,_data?中包含?_execute()?函數(shù)可調(diào)用的add_liquidity()?函數(shù),以及傳給?add_liquidity()?的所有參數(shù)。
此時,咱們回到橘色框里的 curve、curveFunctionSig、curvePoolSize、curveUnderlyingIndex、underlying,其中 curve 是一個地址,它表示橘色框里倒數(shù)第二行中的 curve.call()?函數(shù)可以執(zhí)行任意一個合約,因此,攻擊者把 curve 設(shè)置成 StrategyCmpdDaiV2,curveFunctionSig 表示除了剛剛指定合約外,還可以指定要調(diào)用此合約的函數(shù),通過此操作攻擊者成功調(diào)用 StrategyCmpdDaiV2.withdraw()?函數(shù)。
接下來就是組織藍色框中的函數(shù) StrategyCmpdDaiV2.withdraw()?的參數(shù)?_asset,藍色框中的?_asset 實際上是橘色框框里的 liquidity,liquidity 由傳入函數(shù) add_liquidity()?的 underlying 得來,underlying 是另一個偽造的合約地址,它的 balanceOf()?函數(shù)會返回 cDAI 的地址。攻擊者將 cDAI 的地址設(shè)置成 liquidity[0]?(此處的?0?也是 add_liquidity()?函數(shù)的參數(shù) curveUnderlyingIndex),然后,liquidity 被打包到 callData 里再傳給 withdraw()?函數(shù),使得 withdraw()?函數(shù)取出的?_asset 就是 cDAI 的地址。值得注意的是,如果 want == _asset ,藍色框里的函數(shù)就不執(zhí)行,此設(shè)計的目的在于 want (也就是 DAI)是不允許被取出的,所以攻擊者刻意取出對應(yīng)的 cDAI。
最后,執(zhí)行回 ControllerV4.swapExactJarForJar() 函數(shù), 所提取的cDAI 被存入惡意的?_toJar . 在 _toJar.deposit() 函數(shù)里, 所有 950,818,864.8211968 枚 cDAI 立即轉(zhuǎn)入黑客地址。
未經(jīng)嚴(yán)格審計的DeFi能走多遠?
針對此次 Pickle Finance(酸黃瓜)被攻擊事件,其審計公司 Haechi 發(fā)推文稱,今年 10 月對其代碼進行了一次審計,但是攻擊者利用的漏洞發(fā)生在新創(chuàng)建的智能合約中,而不是接受安全審計的智能合約中。與此次漏洞攻擊相關(guān)的代碼存在于 controller-v4.sol 中的 swapExactJarForJar,而非此前審計的 controller-v3.sol 中,該智能合約不包含 swapExactJarForJar。
對此,PeckShield 相關(guān)負(fù)責(zé)人表示:“有一些 DeFi 項目在做過第一次智能合約安全審計后,可能會為了快速上線主網(wǎng),省略審計新增的智能合約,這種省略或能爭取短時的利益,但就像此次攻擊一樣最終因小失大。DeFi 們在上線之前一定要確保代碼進行徹底地審計和研究,防范各種可能發(fā)生的風(fēng)險。”
未經(jīng)嚴(yán)格審計即上線的 DeFi 項目能走多遠?
總結(jié)
以上是生活随笔為你收集整理的Pickle Finance遭攻击损失近2000万美元DAI,未经严格审计的DeFi路在何方?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ICC2:限制LVT比例
- 下一篇: HTML在黑色框中加白色文字,文字一部分