什麼是重入攻擊(Reentrancy Attack)?為什麼它如此危險?
重入攻擊是智能合約最經典也最危險的漏洞之一。想像一個合約的「提款」功能:用戶呼叫提款 → 合約先轉錢 → 再更新餘額。攻擊者可以在「合約轉錢」但「還沒更新餘額」的那個窗口,再次呼叫提款,這樣帳面上顯示你有 1 ETH,實際已轉出了 10 次。最著名的案例是 2016 年的 The DAO 駭客事件,通過重入攻擊竊取了約 360 萬 ETH,直接導致以太坊硬分叉成 ETH 和 ETC 兩條鏈。現代的智能合約審計都會優先檢查重入問題,但新協議仍然屢屢出現類似漏洞,2023 年 Euler Finance 被駭走約 1.97 億美元,部分也涉及類似的邏輯漏洞。
我要怎麼評估一個 DeFi 協議的智能合約是否安全?有哪些具體指標?
幾個可以公開查核的指標。第一,審計數量和品質:查看協議是否有來自 OpenZeppelin、Trail of Bits、Certik、Sherlock 等知名機構的獨立審計,有幾份、最新的是什麼時候——單一審計遠不如多次審計、而且新版本上線後的審計比老審計重要。第二,TVL 和歷史:長期高 TVL(數億美元以上)且從未被駭,是最好的「時間壓力測試」,這表示黑客已經看過這個合約很多次卻找不到進入點。第三,管理員控制權:看協議是否有 Timelock(升級需要等待 24–72 小時才生效,給社區時間反應)和多簽錢包(至少 3/5 或 4/7)控制管理員功能。第四,漏洞賞金計畫(Bug Bounty):Immunefi 上有沒有高額的漏洞賞金,反映協議是否認真對待安全。
審計報告說「無重大漏洞」,為什麼還是會被駭?
幾個原因讓「有審計」不等於「一定安全」。第一,審計是靜態快照:審計在某個時間點對某個版本的程式碼做評估;之後若協議升級了新版本但沒有重新審計,之前的審計就無效了。第二,審計不能保證零漏洞:安全專家也是人,複雜的業務邏輯漏洞有時非常隱晦,即使是 Trail of Bits、OpenZeppelin 這種頂尖機構也可能遺漏。第三,多個合約的交互作用(Composability)是新的攻擊面:單獨審計每個合約可能沒問題,但它們組合起來的行為可能引入新漏洞——Flash Loan 攻擊就是利用多個協議組合產生的意外行為。所以審計是必要條件,不是充分條件。最硬的保護還是「長期沒被駭的時間考驗」加「高額 Bug Bounty 讓白帽黑客願意報告而不是竊取」。
進階:「形式化驗證(Formal Verification)」是比審計更嚴格的安全手段嗎?
是,但是有侷限。形式化驗證(Formal Verification)是用數學方法對程式碼的邏輯進行嚴格的形式化證明,確認它在所有可能的輸入條件下都能按預期行為——不只是「我測了幾種情況,沒發現問題」,而是「我數學上證明了它在任何情況下都不會出問題」。這比傳統的代碼審計更嚴格、更全面。缺點是:成本極高(只有頂尖 DeFi 協議負擔得起)、能驗證的性質需要被精確形式化定義(「這個合約不會把用戶資金轉到錯誤的地址」這種說法需要數學上精確描述)、而且形式化驗證只能確保規格(specification)的正確性,如果規格本身就寫錯了,驗證也沒用。目前 DAI/USDS 的核心合約、以及 Aave 的部分關鍵組件有使用形式化驗證,但它依然是輔助工具,不是替代人工審計和 Bug Bounty 的萬能方案。
Euler Finance 2023 年駭客事件:1.97 億美元損失的教訓
2023 年 3 月,DeFi 借貸協議 Euler Finance 被黑客利用智能合約邏輯漏洞,一次性竊取約 1.97 億美元的資產(包含大量穩定幣)。攻擊利用了 Euler 的「donate to reserve」功能的邏輯缺陷,配合閃電貸放大了損失規模。
Euler 有接受過知名機構的安全審計,但那個特定的 donate 功能在攻擊者的利用方式下產生了審計沒有完全涵蓋的邊界條件。
事後,Euler 進行了漫長的談判,最終白帽黑客(實際上是被抓到的攻擊者)歸還了約 95% 的資金;但用戶仍然有長達數週無法存取資金的期間。
這跟你的錢有什麼關係:Euler 是「有審計、有名氣、有 TVL」的藍籌協議,卻還是出事了。這說明即使你做了功課,也要記得智能合約風險永遠不是零——只放你輸得起的金額到 DeFi,是比「選好協議」更根本的原則。
智能合約風險的本質取捨:DeFi 的「自我執行、不依賴中介」換來的代價是「程式碼錯誤就全軍覆沒」
DeFi 的核心優點是去除了銀行這個中間人:你的錢直接跟程式碼互動,沒有人可以「主動」挪用你的存款或阻止你提款(只要合約正常運作)。但這個去中介化的代價,是當那段程式碼出問題時,同樣沒有任何人能出來負責修復——沒有存款保險、沒有法律上的賠償義務(除非合約明文寫了)、沒有客服電話。智能合約風險就是這個取捨的另一面。越去中心化、越自動執行的協議,越難事後修補;越保守、越有完善治理的協議,反而能更快速回應安全事件。