智能合約是區塊鏈上的自動執行合約。通過自動執行和遵守合約條款的過程,它們消除了對律師或銀行等中間人的需求。智能合約可以在沒有任何人工參與的情況下自動運行,安全且不可篡改。由於這種能力,它們對希望實現程序自動化和降低交易成本的個人、公司和政府具有吸引力。
智能合約可以消除對中間商的需求,從而降低交易成本、加快交易速度並提高透明度,這是其主要優勢之一。由於數據記錄在分散的、不可滲透的賬本上,因此智能合約還可以提供比傳統合約更高的安全性和隱私性。
本文深入探討智能合約,詳細解釋其工作原理及其可能被黑客攻擊的原因。讀者可以學到以下內容:
智能合約如何運作
智能合約如何遭受黑客攻擊
重入攻擊
上溢/下溢
對時間戳的依賴
鑄造代幣和將代幣列入黑名單
計算錯誤
惡意庫和依賴項
搶先交易
真實黑客攻擊示例
預防和緩解策略
讓我們開始吧!
智能合約如何運作
智能合約通過使用編碼來執行協議條款。代碼發佈到區塊鏈後,只要滿足預設條件,合約就會自動運行。此後合約將無法更改。
例如,如果雙方同意一份出售房屋的智能合約,一旦付款並且區塊鏈驗證了,合約就會立即將房屋所有權轉移給買方。
許多行業,包括金融、供應鏈管理、房地產等,都可能使用智能合約。隨着技術的發展和越來越廣泛的應用,它有能力改變我們開展業務和相互溝通的方式。
智能合約如何遭受黑客攻擊
由於智能合約無需中介即可自動執行合同協議,因此被譽爲一種顛覆性技術。與任何技術一樣,智能合約也存在漏洞,黑客不斷尋找新方法來利用它們。以下是一些最典型的智能合約黑客攻擊:
1. 重入攻擊
重入攻擊很難被發現,因爲代碼似乎運行正常,允許攻擊者反覆利用漏洞,直到成功。DAO 漏洞就是一個著名的重入攻擊案例,攻擊者通過反覆從 DAO 合約中竊取資金,竊取了價值 5000 萬美元的以太幣。
開發人員可以採用各種技術來降低重入攻擊的風險。例如,他們可以創建互斥鎖來禁止併發執行同一合約,或者設置 gas 消耗限制來停止冗長的遞歸函數。
2. 溢出/下溢
當數學運算的結果超出數據類型的界限時,就會發生整數溢出和下溢。
整數溢出和下溢的後果可能是災難性的。例如,用戶可能會提款,但最終餘額爲負數。攻擊者還可能創建一個非常大的值,以繞過限制或發起拒絕服務攻擊。
開發人員可以利用 BigInt 或 uint256 等能夠處理大整數的數據類型來防止整數溢出和下溢。爲了確保輸入值在允許的範圍內,他們還可以加入邊界條件檢查。
3. 對時間戳的依賴
時間戳依賴性是另一個可能導致意外行爲的問題。智能合約可以使用時間戳來驗證時間敏感的情況,包括用戶是否有權獲得付款。攻擊者可以利用這一弱點,通過更改時間戳或在特定時刻啓動交易,使某種情況提前發生。
開發人員可以使用區塊編號來確認特定情況的有效性,而無需依賴時間戳。他們還可以設置時間限制,以防止合約執行超過一定時間。開發人員還可以從可靠的外部時間源獲取精確的時間戳。
4. 鑄造代幣和將代幣列入黑名單
黑客可以利用智能合約中的鑄造和黑名單功能來添加、刪除或限制用戶對代幣的訪問。例如,黑客可以使用鑄造功能生產無限數量的代幣,然後將其出售以賺取利潤。
或者,攻擊者可以利用黑名單功能拒絕訪問特定用戶的代幣,從而削弱用戶信心。爲了阻止此類攻擊,智能合約開發人員必須正確構建鑄造和黑名單機制並進行嚴格測試。
5. 計算錯誤
智能合約的正常運行依賴於準確的計算。不準確的估算可能會帶來意想不到的結果。例如,如果智能合約包含計算錯誤,使攻擊者能夠繞過某些限制或獲取他們無權獲得的現金,合約所有者可能會蒙受損失。此外,如果計算錯誤導致代幣餘額不準確,消費者可能會感到困惑並失去對智能合約的信任。
6.惡意庫和依賴項
智能合約經常使用來自其他來源的庫和依賴項。如果這些依賴項或庫是惡意的或被入侵的,則可能讓攻擊者能夠訪問合約或其資金。例如,攻擊者可以利用智能合約對帶有後門的庫的使用來接管合約。此外,如果庫存在漏洞,攻擊者可以利用智能合約來獲得優勢。
7. 搶先交易
在已知的未來交易發生之前,將交易執行隊列中的交易提前執行以贖回的行爲在區塊鏈和加密貨幣領域被稱爲搶先交易。爲了獲取可能的收益並切斷現金,這通常是通過檢查智能合約中從未使用過的指令和功能來實現的。
當攻擊者在交換交易廣播後但尚未完成時對其進行監視時,他們就實施了搶先交易攻擊。然後,他們會重新排列交易,以謀取自己的利益。這通常是通過礦工或機器人立即將新交易添加到現有交易之前來實現的。惡意交易在現有交易完成之前執行。
現實世界中智能合約黑客攻擊的例子
儘管智能合約的設計是安全的,但它們偶爾也會被破壞或用於惡意目的。以下是一些實際智能合約被黑客攻擊的例子:
KingDice 黑客
KingDice 是基於以太坊區塊鏈的去中心化博彩網絡。2017 年 8 月,一名黑客利用智能合約代碼漏洞竊取了價值近 30 萬美元的以太幣。
Uniswap V2 的漏洞
2020 年 11 月,一名黑客利用 Uniswap V2 智能合約的漏洞竊取了價值近 30 萬美元的比特幣。爲了操縱代幣價格並利用套利機會,攻擊者使用了閃電貸。
DAO 攻擊
DAO(去中心化自治組織)是在以太坊區塊鏈上開發的,是一個基於智能合約的投資基金。2016 年 6 月,一名黑客利用編程漏洞從 DAO 竊取了價值近 5000 萬美元的以太坊。此次黑客攻擊導致以太坊區塊鏈發生硬分叉,從而催生了以太坊經典版。
Parity 錢包被黑
2017 年 7 月,一名黑客利用 Parity 多重簽名錢包的漏洞竊取了價值近 3000 萬美元的以太坊。由於智能合約編程中存在錯誤,黑客能夠控制錢包並將所有資金轉移到另一個賬戶。
預防和緩解策略
開發人員可以採用以下推薦的做法來創建安全的智能合約:
使用完善且經過審覈的庫和依賴項。使用完善且經過審覈的庫和依賴項有助於降低智能合約中引入漏洞的風險。應避免使用未經測試或不受信任的代碼,開發人員應仔細檢查他們使用的任何第三方代碼的安全性。
實施邊界條件檢查。智能合約應實施邊界條件檢查,包括最大和最小輸入參數值。通過這樣做,可以減少整數溢出和下溢攻擊。智能合約技術的有效性和廣泛使用取決於智能合約攻擊的預防和緩解。
使用完善且經過審覈的庫和依賴項有助於降低智能合約中引入漏洞的風險。應避免使用未經測試或不受信任的代碼,開發人員應仔細檢查他們使用的任何第三方代碼的安全性。
避免時間戳依賴。爲了降低時間戳被操縱的可能性,開發人員應避免將時間戳作爲執行智能合約邏輯的唯一基礎。當滿足特定要求時,他們可以採用區塊編號或區塊哈希等替代技術。
全面測試。查找和修復智能合約漏洞取決於全面測試。開發人員應運行單元測試和集成測試,以確認合約按預期運行並儘早發現任何潛在問題。
正確實現鑄幣和黑名單功能。開發人員在實現鑄幣和黑名單功能時應小心謹慎,以防止不必要的訪問和操縱。
確保計算準確。智能合約的正常運行取決於準確的計算。在執行困難的數學運算時,開發人員應使用經過驗證的庫並確保其計算準確。
安全審計。安全審計是查找智能合約弱點的有用技術。在部署智能合約之前,開發人員可以聘請智能合約審計公司對其進行審計。此類審計可以幫助團隊在代碼投入生產之前發現並修復任何潛在問題。
形式化驗證。這是一種確認智能合約準確性的數學技術。此方法可以幫助確保智能合約按計劃執行且安全。
漏洞賞金。通過提供漏洞賞金,鼓勵安全研究人員發現並報告智能合約漏洞。爲了發現並修復潛在問題,開發人員可以付費讓大量安全專家發現漏洞。
結論
總之,雖然智能合約提供了一種革命性的區塊鏈交易自動化方法,但它們很容易受到黑客攻擊和安全漏洞的攻擊。開發人員必須遵守智能合約審計和安全測試等推薦做法,以防止智能合約遭到黑客攻擊。
開發人員可以確保區塊鏈技術的長期健康發展,併爲所有用戶創建一個值得信賴的生態系統,免受智能合約黑客攻擊的危險。他們可以通過實施漏洞賞金、形式驗證和安全審計等程序來實現這一結果。最後,優先考慮安全性對於智能合約和區塊鏈領域的發展至關重要。
智能合約如何遭到黑客攻擊?這篇文章最先出現在 Coinfomania 上。
