DeFi 建設(shè)者面臨數(shù)學(xué)問(wèn)題——如果他們?cè)谥悄芎贤惺褂玫慕咏椒ú荒芊乐孤┒?,黑客可以從他們的協(xié)議中竊取資金。
上周,黑客從穩(wěn)定貨幣協(xié)議中獲得穩(wěn)定貨幣協(xié)議 Raft Finance 中竊取了 360 萬(wàn)美元。黑客利用閃電貸發(fā)動(dòng)攻擊,其原理是利用。 Raft 智能合同中的精度損失漏洞。這個(gè)漏洞是由于數(shù)字接近時(shí)的放棄錯(cuò)誤造成的,這促使黑客獲得額外的股份代幣。
雖然 Raft 經(jīng)歷過(guò) Trail of Bits 和 Hats Finance 等待公司多次審計(jì),但漏洞未得到修復(fù)。
Raft Finance 被黑事件只是一系列的 DeFi 在最新的盜竊案件中,攻擊者針對(duì)的是精度損失漏洞。像 Balancer 和 Onyx 這樣的 DeFi 該協(xié)議也受到了這樣的攻擊。事實(shí)上,像 Onyx 一樣,DeFi 借貸協(xié)議 Compound 分叉版本也被發(fā)現(xiàn)在其代碼中包含了放棄錯(cuò)誤,這些錯(cuò)誤被使用,就像使用一樣, Hundred Finance 和 Midas Capital 情況是一樣的。
接近法或放棄是使用接近但與原始數(shù)字真實(shí)值不完全相同的數(shù)字,可能導(dǎo)致放棄誤差和精度喪失,特別是在大量數(shù)學(xué)計(jì)算的復(fù)雜性中 DeFi 協(xié)議中。
「我確實(shí)覺(jué)得 DeFi 面對(duì)整數(shù)舍入方面的數(shù)學(xué)挑戰(zhàn),」泰勒·韋伯告訴智能合同開(kāi)發(fā)者兼安全研究員 DL News。
當(dāng)接近法引起的誤差數(shù)量較少時(shí),這不是問(wèn)題,但當(dāng)偏差積累到足夠大的水平時(shí),黑客會(huì)像他們?cè)跓o(wú)數(shù)次攻擊中所做的那樣使用這些誤差值。
「一些 DeFi 高度動(dòng)態(tài)和創(chuàng)新的行為可能會(huì)使攻擊者將精度損失放大到非常大的水平,」匿名加密審計(jì)公司 Trust Security 負(fù)責(zé)人 Trust 告知 DL News。
「閃電貸款機(jī)制和高流通性 AMM 理論上,黑客的整合促使黑客大規(guī)模應(yīng)用『價(jià)值喪失』問(wèn)題,」Trust 補(bǔ)充道。
難以檢驗(yàn)
在加密領(lǐng)域,放棄錯(cuò)誤和精度喪失是很常見(jiàn)的,這背后有幾個(gè)原因。
主要原因是支持加密的計(jì)算邏輯不適合性能。
「EVM 與其他計(jì)算架構(gòu)幾乎相似,即不支持以分?jǐn)?shù)的形式計(jì)算,因此必然會(huì)失去精度,」Trust 說(shuō)。
同時(shí),代幣的小數(shù)點(diǎn)位數(shù)也不盡相同。例如,USDC 有六位小數(shù),而且 DAI 有 18 位置。在兩種代幣交換的交易池中,必須設(shè)計(jì)某種形式的精度縮放,以考慮不同的小數(shù)點(diǎn)位數(shù)。精度縮放涉及調(diào)整次要資產(chǎn)的小數(shù)點(diǎn)位數(shù),以匹配主要資產(chǎn)的小數(shù)點(diǎn)位數(shù)。
此外,像其他算術(shù)問(wèn)題一樣,智能合同審計(jì)人員很難發(fā)現(xiàn)放棄錯(cuò)誤。事實(shí)上,這些漏洞在審計(jì)過(guò)程中經(jīng)常被忽視,導(dǎo)致即使經(jīng)過(guò)大量審計(jì)協(xié)議,黑客仍然會(huì)利用這個(gè)漏洞成為受害者。
「一種文化變化」
Raft Finance 黑客事件引起了對(duì)認(rèn)真對(duì)待放棄錯(cuò)誤的討論。
「我不認(rèn)為問(wèn)題不在于我們受到了我們的痛苦 EVM 整數(shù)限制取決于開(kāi)發(fā)人員和審計(jì)人員如何處理放棄錯(cuò)誤類別的漏洞,」Webb 說(shuō)。
Webb 呼吁進(jìn)行「文化改變」,希望 DeFi 建設(shè)者和審計(jì)員可以像對(duì)待遞歸調(diào)用漏洞一樣對(duì)待放棄錯(cuò)誤。
智能合同審計(jì)員 Joe Dakwa 告知 DL News,完善的單元測(cè)試和模糊測(cè)試應(yīng)該成為一個(gè)很好的標(biāo)準(zhǔn)實(shí)踐。模糊測(cè)試是一種可以在智能合同中進(jìn)行的測(cè)試,將隨機(jī)數(shù)據(jù)輸入代碼,以檢查是否有問(wèn)題。
安全專家表示,類似模糊測(cè)試的不變性測(cè)試也應(yīng)該添加到測(cè)試組合中。