作者:Jagjit Singh,CoinTelegraph;編譯:五銖,金色財經
盡管智能合約具有开創性,但它也並非不受惡意方可能利用的缺陷的影響。
輸入驗證不足是一個普遍的弱點,使攻擊者能夠通過提供意外的輸入來影響合約的執行。 此外,業務邏輯的不當應用可能會在合同中產生意外行爲或邏輯差距,從而導致漏洞。 此外,如果處理不當,不安全的外部調用(例如涉及與外部數據源或其他合約的接口的調用)可能會造成漏洞。
重入攻擊是一個合約在完成其自身狀態更改之前從外部調用另一個合約時發生的弱點。 這允許被調用合約重新進入調用合約,並可能再次執行其某些操作。 這可能會導致意外的行爲,並允許攻擊者改變合約的狀態,從而耗盡資金或產生其他負面影響。
考慮到此類攻擊的可能性,开發人員在使用外部合約或數據源時也應謹慎行事,確保正確處理外部調用,以避免意外行爲和漏洞。 他們可以通過密切關注智能合約測試等安全程序來幫助保護智能合約免受不斷變化的威脅。
在智能合約中,當合約在完成自己的狀態更改之前從外部調用另一個合約或函數時,就會發生重入攻擊。
這允許被調用合約重新進入調用合約,並可能再次執行其部分操作,這可能會導致不可預見且頻繁的惡意行爲。 例如,合約 A 調用合約 B 發送資金,然後修改自己的狀態。
合約 B 的代碼可能包含一個回調函數,允許其重新進入合約 A,並可能在合約 A 完成其狀態更改之前重新執行傳輸函數。 這將使攻擊者能夠在完成初始交易之前多次從合約中獲取資金。
2016 年臭名昭著的以太坊區塊鏈上的去中心化自治組織 (DAO) 黑客攻擊是另一個衆所周知的例子。 攻擊者利用智能合約代碼中的重入缺陷,遞歸地從 DAO 中刪除資金,最終導致價值數百萬美元的以太坊 (ETH) 被盜。
此外,包括 Uniswap、Lendf.Me、BurgerSwap、SURGEBNB、Cream Finance 和 Siren Protocol 在內的多個去中心化金融 (DeFi) 協議由於可重入漏洞而蒙受了重大財務損失。 這些違規行爲造成了 350 萬美元至 2500 萬美元的損失,凸顯了 DeFi 領域可重入漏洞帶來的持續威脅。
重入攻擊利用智能合約函數的順序執行和外部調用形成一個循環,攻擊者可以在完成之前多次執行特定函數,這可能會導致惡意行爲和未經批准的資金提取。
在受害者完成狀態修改之前,攻擊者的合約有效地“欺騙”受害者的合約回調攻擊者的合約。 此操作可能會導致反復提款或其他疏忽行爲。
上圖演示了對智能合約的重入攻擊。 攻擊者的合約調用受害者的“withdraw()”函數,該函數在更新余額之前發送以太坊。 然後,攻擊者的後備函數被觸發,再次遞歸調用withdraw()以從受害者合約中耗盡資金。 這種攻擊利用了受害者在發送資金之前未能更新余額的情況。
讓我們使用一個簡化的示例來分解重入攻擊的工作原理:
假設有一個允許用戶提取資金的數字錢包智能合約。 除了跟蹤用戶余額之外,該合約還具有提款功能,方便資金提取。 提款功能通常允許用戶將他們的代幣或以太坊從智能合約提取到他們的個人錢包。
用戶自行請求從錢包中提款。 他們使用提款功能輸入所需的提款金額。
提款函數會在調用時驗證用戶是否有足夠的資金進行提款。 如果滿足要求,它將所需的資金轉移到用戶選擇的地址。
這就是弱點顯現出來的地方。 在提款反映在用戶的余額中之前,合約會對另一個合約或账戶進行外部調用。
如果外部合約的代碼包含可以再次調用原始合約的函數(例如另一個提款函數),則會創建一個遞歸循環。 這使得可以在完成之前再次調用withdraw方法。
然後,攻擊者使用惡意合約來利用此循環。 攻擊者合約在錢包合約調用外部合約期間,在余額更新之前,快速再次調用錢包的提現函數。
在某些情況下,智能合約的回退功能(一種獨特的功能,當合約收到沒有任何數據或以太坊的調用時啓動)可能會被攻擊者使用。 重入攻擊可以通過在資金仍在處理過程中重復調用回退函數來進行。
攻擊者的合約可以在同一筆交易中重復使用提款功能,因爲錢包合約會延遲更新余額,直到收到外部調用後。 因此,這使得資金更容易在未經授權的情況下被取出,從而使攻擊者能夠竊取超出其合法權利的資金。 隨後,它給錢包合約的用戶造成了巨大的經濟損失。
重入攻擊會對智能合約用戶產生嚴重影響,因爲它們有可能造成重大財務損失。
重入攻擊最直接的後果之一是未經授權提取或操縱易受影響的智能合約中保存的現金。 攻擊者利用該漏洞反復從合約中提取資金,耗盡合約余額,並可能給在受影響合約中投資或存儲資產的用戶造成重大財務損失。
此外,重入攻擊可能會削弱用戶對智能合約和區塊鏈技術安全性和完整性的信心。 重入漏洞可能會產生災難性的影響,2016 年以太坊區塊鏈上的 DAO 黑客事件等備受矚目的事件就證明了這一點,該事件造成了巨大的經濟損失並損害了社區的聲譽。
除了短期財務後果之外,重入攻擊還可能產生長期影響,例如監管和法律關注、投資者信任度下降以及對區塊鏈平台和項目聲譽的損害。 容易受到攻擊的認知可能會導致用戶在與智能合約交互或投資去中心化應用程序(DApp)時保持謹慎,從而阻礙區塊鏈技術的採用和擴展。
在智能合約創建和審計方面實施最佳實踐對於減輕重入威脅是必要的。
這包括使用具有安全記錄的知名代碼庫,這是實現這一目標的一種方法。 這些庫經過了廣泛的測試和同行評審,這降低了引入漏洞的機會。
开發人員還應該使用“檢查-效果-交互”設計等安全檢查,通過確保狀態修改以原子方式發生,最大限度地減少重入攻擊的機會。 如果可用的話,可以使用可重入安全的智能合約开發框架來添加針對此類漏洞的額外防线。
开發人員不太可能手動添加安全保護,因爲這些框架通常包含專門設計用於避免重入攻擊的內置方法和保護措施。 然而,由於區塊鏈安全仍在發展,开發人員必須繼續尋找新的威脅和弱點。
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。
標題:金色百科 | 什么是智能合約中的重入攻擊?
地址:https://www.torrentbusiness.com/article/106697.html