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