SSO 模組 2 - 智慧合約漏洞:深入探討重入攻擊
智慧合約提供透明度,但也伴隨風險。本文揭露重入等漏洞,並以 DAO 損失 1.5 億美元為案例。整數溢位導致 BeautyChain 損失 9 億美元。DAOMaker 因存取控制缺陷損失 400 萬美元。閃電貸攻擊使 Harves Finance 損失 3800 萬美元。
作者 Markos Mebellis

本頁內容
智慧合約以其效率、透明度和不可篡改的特性,正在革新全球產業。然而,其開放且自動化的設計也使它們暴露於風險之中。為了在將威脅降至最低的同時最大化其潛力,掌握其漏洞和可能的攻擊途徑至關重要。撰寫和維護這些合約需要謹慎關注並遵循最佳實務。本文深入探討常見漏洞,並以真實案例加以說明,以增進理解。讓我們來看看以下由 Salus Security 提供的文章。
主要漏洞:
**重入:**攻擊者利用空隙,在關鍵操作完成或數值更新之前重新進入函式。
單一函式重入: 當合約與惡意合約互動時發生,允許後者重新進入某個函式。例如,惡意合約可以不斷重新進入 'withdrawBalance' 函式,在餘額更新之前盜取更多 ether。
著名攻擊:
- The DAO(2016): 在籌集 1.5 億美元後,因程式碼漏洞遭到駭客攻擊。這導致以太坊網路分裂。
- PolyDex(2021): 因 PLX Locker 智慧合約遭到重入攻擊而損失 50 萬美元。
- Bacon Protocol(2022): 因 lend() 函式中的重入漏洞而損失 100 萬美元。
- Lendf.Me(2020): 在多種加密貨幣中損失約 2470 萬美元。
**跨函式重入:**源於不同函式之間共享狀態以及重入保護不足。上述 'balances' 範例表明,儘管 'withdrawAll' 有保護,攻擊者仍可利用 'transfer' 函式。
惡名昭彰的事件:
- DFX Finance(2022): 因攻擊利用一個沒有重入保護的函式而損失超過 700 萬美元。
- Hundred Finance(2022): 在一次重入攻擊利用 borrowFresh 函式後損失約 650 萬美元。
- Fei Protocol(2022): 因攻擊利用重入漏洞而損失約 8000 萬美元。
**跨合約重入:**源於不同合約之間共享狀態以及錯誤的變數修改順序。即使函式有保護,其他函式(如 'burnAccount')仍可能被利用。
重大攻擊:
- Rari Capital(2021): 在不到一小時內損失約 1000 萬美元(約 2600 ETH)。
- ValueDefi(2021): 因依賴外部資料的無效份額計算而損失 5345.314 WBNB。
唯讀重入:
唯讀重入利用一個函式,該函式雖然不會改變合約狀態,但在狀態不一致時仍可能產生錯誤的輸出。
值得注意的攻擊:
- QuickSwap(2022):攻擊者濫用閃電貸來操縱資產現貨價格,詐取 138 ETH 和 700 MATIC 代幣。這是由於 Curve LP 預言機的缺陷而成為可能。
- dForce(2023):在 Arbitrum 和 Optimism 鏈上與 Curve Finance 存取價格預言機的程式碼中存在唯讀重入漏洞。
- Sentimente(2023):一次利用唯讀重入漏洞的攻擊導致 100 萬美元被盜。幸運的是,肇事者歸還了 90%。
- Sturdy(2023):因 Balancer 的唯讀重入問題導致 B-stETH-STABLE 的價格遭到篡改,損失約 442 ETH。
重入漏洞防範:
- 始終遵循檢查-效果-互動模式。
- 對所有敏感操作採用重入保護。
- 謹慎處理每一次外部呼叫。
整數溢位:
當計算超出限制時,就會發生溢位,通常導致極小或極大的數值。
說明性攻擊:
- BeautyChain(2018):攻擊者透過整數溢位取得 10^58 BEC,拋售了驚人的 9 億美元。
- Poolz(2023):導致在以太坊、幣安和 Polygon 鏈上損失約 66.5 萬美元。
整數溢位防範措施:
- 使用安全的計算方法,如 safeMath 函式庫。
- 優先進行邊界檢查,以確保結果保持在範圍內。
- 採用 solidity 編譯器 0.8.0 或更高版本,以內建溢位偵測。
存取控制:
存取控制漏洞源於處理關鍵操作的函式缺乏嚴格的存取限制。
- 重大攻擊:
- DAOMaker(2021):在
init函式處於易受攻擊狀態後,高達約 400 萬美元被盜取。 - GymNetwork(2022):攻擊者利用 depositFromOtherContract() 中的驗證疏失,在沒有任何實際付款的情況下促成非法餘額增加。損失?約 2,475.91 WBNB。
- Tempdao(2023):對 migrateStake 函式的存取控制過於寬鬆,導致損失超過 234 萬美元。
存取控制漏洞
- 說明:由於管理系統內特定操作之存取與權限的限制機制不足而產生的漏洞。
防範措施:
- 嚴格權限檢查:始終對函式(尤其是處理敏感操作的函式)執行嚴格的權限協定。
- 多重簽名機制:對於需要共同決策的任務,使用多重簽名協定,在執行敏感操作前需要多方批准。
常見攻擊途徑
- 描述:攻擊者利用系統漏洞的各種方法或管道,主要針對智慧合約。
著名案例:
- 閃電貸攻擊:利用去中心化金融系統的即時借貸功能來執行惡意活動。
- 搶先交易:攻擊者得知其他使用者的待處理交易後,透過支付更高的 gas 費用搶先執行。
閃電貸攻擊
- 說明:雖然本質上並非攻擊,FlashLoan 是 DeFi 的一項功能,讓使用者能即時借入大筆資金而無需抵押。由於合約互動與關係中的邏輯漏洞,它已被利用。
知名攻擊事件:
- Harves Finance(2020.10.26):造成 3800 萬美元損失。
- InverseFinance(2022.6.16):導致損失 53.2445 WBTC 與 99,976.29 USDT。
- NewFreeDAO(2022.9.8): 被盜走 4,481 WBNB,約合 125 萬美元。
- Lodestar(2022.12.11): 透過預言機價格操縱遭到利用。
- 0vix(2023.4.28): 導致 Polygon 鏈上損失 200 萬美元。
防範建議:
- 在專案開發期間辨識 Flashloan 的特性。
- 為準確判定價格,請使用時間加權平均或多個預言機。
搶先交易
- 說明:攻擊者從 memPool 得知另一位使用者的交易,並藉由提供更高的 gas 費用加以利用。
知名攻擊事件:
- Sushi Badger Digg(2021.1.25):造成 81.68 ETH 的損失。
- Sushiswap Ape-ETH 池(2022.5.17):攻擊者獲利約 0.3 ETH。
- Uniswap(2023.4.2):透過三明治攻擊造成約 2,500 萬美元的損失。
防範建議:
- 交易時使用滑價保護。
- 在非尖峰時段執行交易,尤其是在波動劇烈的市場中。
- 使用 1inch 的 FlashBot rpc 將交易直接傳送給礦工,藉此繞過 memPool。
摘要
恭喜!您已完成模組 2 - 智慧合約漏洞:深入探討重入攻擊與常見漏洞利用
讓我們回顧你的學習內容:
重入漏洞 - 攻擊者利用漏洞,在函式完全執行完畢前重新進入。
- 單一函式重入: 惡意合約會重新進入另一個合約中的函式。
- 跨函式重入: 由於重入保護不足,不同函式之間共用的狀態會遭到利用。
- 跨合約重入: 利用不同合約間的共享狀態。
- 唯讀重入: 利用狀態不一致時產生錯誤輸出的函式。
整數溢位 - 計算超出設定上限,導致極端數值。
存取控制漏洞 - 源於關鍵函式缺乏嚴格的存取限制。
常見攻擊向量 - 攻擊者利用系統漏洞的方法。
**閃電貸攻擊** - 一種 DeFi 功能,允許在無需抵押的情況下即時進行大額借貸,但因邏輯缺陷而被利用。
搶先交易攻擊- 攻擊者獲知待處理交易的資訊,並透過提供更高的 gas 費用從中獲利。
本文由以下單位提供:
