新聞中心
“亡羊補(bǔ)牢,為時(shí)未晚”,這句話在生活中的大部分時(shí)候均適用。然而,在面臨網(wǎng)絡(luò)安全時(shí),牢破也許就會(huì)造成無法挽回的損失。

在安全問題未造成不可彌補(bǔ)的損失前就被發(fā)現(xiàn),或是一開始便做好萬全準(zhǔn)備,才是身為區(qū)塊鏈從業(yè)者的安全第一要義。
北京時(shí)間8月14日下午,CertiK安全技術(shù)團(tuán)隊(duì)發(fā)現(xiàn)DeFi匿名耕種項(xiàng)目Based官方宣布有攻擊者通過調(diào)用Based智能合約中的某一個(gè)函數(shù),將一號池(Pool 1)凍結(jié),同時(shí)宣布將重新部署其一號池。
官方發(fā)布推特稱,有黑客試圖將“Pool1”永久凍結(jié),但嘗試失敗。而“Pool1”將繼續(xù)按計(jì)劃進(jìn)行。
CertiK通過分析該智能合約,認(rèn)為這次凍結(jié)Based項(xiàng)目一號池事件,是一次由于存在智能合約漏洞導(dǎo)致的事故。
事件經(jīng)過
- Based團(tuán)隊(duì)部署一號池智能合約,部署地址為0x77caF750cC58C148D47fD52DdDe43575AA179d1f。
- Based官方通過調(diào)用智能合約中的renounceOwnership函數(shù)來聲明智能合約所有者,但未進(jìn)行智能合約初始化。
- 由于在Based智能合約中initialize函數(shù)被錯(cuò)誤的設(shè)置為可以被外部調(diào)用,因此造成在初始化智能合約過程中,一號池的智能合約被外部攻擊者用錯(cuò)誤的值初始化。
- 錯(cuò)誤的初始化造成Based官方無法再次初始化一號池的智能合約,因此造成一號池被凍結(jié),任何質(zhì)押行為都無法完成。
- Based官方?jīng)Q定放棄該智能合約,重新部署一號池智能合約。
智能合約技術(shù)細(xì)節(jié)
(1) Based團(tuán)隊(duì)在部署智能合約后,沒有及時(shí)的調(diào)用下圖的initialize函數(shù)來初始化智能合約的設(shè)置:
(2) 外部調(diào)用者利用Based團(tuán)隊(duì)在部署和初始化智能合約之間的時(shí)間差,乘機(jī)調(diào)用了下圖中671行被錯(cuò)誤設(shè)置調(diào)用范圍的initialize函數(shù),搶先初始化了一號池的智能合約:
(3) 上圖兩個(gè)initialize函數(shù)都是由initializer的修飾符修飾。根據(jù)其中代碼,如果調(diào)用了其中一個(gè)initialize函數(shù),另外一個(gè)initialize函數(shù)就無法被調(diào)用。initializer修飾符代碼如下圖所示,這造成了Based官方失去了初始化函數(shù)的機(jī)會(huì):
(4) 綜上因素,Based智能合約無法被官方正確初始化,因此任何質(zhì)押行為都無法進(jìn)行。
質(zhì)押失敗的交易記錄:
如何避免事件發(fā)生
該次事件本質(zhì)上是由智能合約漏洞導(dǎo)致的,但如果Based團(tuán)隊(duì)提早注意到這個(gè)漏洞,提前初始化智能合約,可以完全規(guī)避這次危險(xiǎn),避免一號池被凍結(jié)。因此,CertiK安全技術(shù)團(tuán)隊(duì)建議:
- 部署智能合約時(shí)應(yīng)準(zhǔn)備好初始化智能合約所需要的命令腳本等工具,及時(shí)初始化智能合約,避免攻擊者利用部署操作和初始化操作之間的時(shí)間差搶先初始化或者操縱智能合約。
- 了解智能合約的運(yùn)行原理和技術(shù)細(xì)節(jié),不要盲目的采用其他的智能合約代碼。
- 邀請專業(yè)的安全團(tuán)隊(duì)對其智能合約進(jìn)行審計(jì),保證智能合約的安全性和可靠性。
當(dāng)前名稱:CertiK:Based智能合約出現(xiàn)漏洞重新部署其一號池事件分析
分享地址:http://m.5511xx.com/article/dpecdhh.html


咨詢
建站咨詢
