前情提要:Aztec 第二次「血流成河」的 210 萬美元漏洞
就在上週,知名 Layer 2 擴容方案 Aztec Protocol 再度傳出慘烈的被盜事件。區塊鏈安全公司 SlowMist 在第一時間發出警報,指出這次攻擊的根源在於專案曾經使用、但已「下線」的智慧合約——這些被棄置的合約在專案停止維護後,仍然留有可被利用的漏洞。不到一週內,第二次攻擊再次造成約 210 萬美元的資金流失,這讓不少 DeFi 投資者開始懷疑:難道「退役」的智慧合約也會變成看不見的資安地雷?
什麼是「被遺棄」的智慧合約?
在區塊鏈的專案開發流程裡,開發者常常會隨著功能迭代、版本升級或安全考量,部署新的智慧合約,同時把舊合約標記為「deprecated」——也就是「廢棄」的意思。理論上,這些合約應該在合約層面加上「停用」或「移除」的開關,讓它們不再接受任何交易;但在實務上,很多專案因為時間緊迫、成本考量或是「不小心」,只把合約「關掉」而沒有完全移除,甚至沒有撤除鏈上的授權。這就像是把已經退役的軟體留在伺服器上,雖然不再更新,但駭客仍能透過舊漏洞長驅直入。
漏洞的本質:從「可升級」到「可劫持」
SlowMist 的研究報告指出,Aztec 這次的問題合約原本是為了實現「zkRollup」的提款功能而設計的。當專案在升級到新版合約時,舊合約的「提款許可權」並未被完全撤銷,導致攻擊者只要取得相應的簽名,就能直接呼叫舊合約的「withdraw」函式,將資金轉走。更糟糕的是,這類合約往往沒有「暫停」機制(pause mechanism),因此一旦被發現漏洞,短期內根本無法即時止血。
為何「被遺棄」的合約如此危險?
- 維護成本低: 多數專案在升級後會把焦點放在新合約上,舊合約的維護幾乎停擺。這讓舊程式碼成為「安全孤島」——沒有最新補丁,也沒有安全審計。
- 鏈上依舊可見: 區塊鏈的特性是「不可篡改」,即便專案已經「下線」舊合約,該合約仍完整儲存在區塊鏈上,任何人都可以直接讀取與互動。
- 介面依舊開放: 許多舊合約為了相容性,仍保留開放的 API,只要知道函式名稱與引數格式,攻擊者就能直接呼叫。
- 缺乏監控: 專案方的監控節點通常只會針對新版合約進行異常行為警報,舊合約的資金流向往往被忽略。
從 Aztec 事件學到的資安教訓
- 全面停用與移除: 當專案決定「退役」智慧合約時,務必在合約層面加入「kill switch」或直接將合約登出,防止任何未授權的呼叫。
- 定期安全審計: 即使合約已經「下線」,仍需定期對其進行安全審計,確保沒有殘留的漏洞被利用。
- 設定預警與暫停機制: 在每個關鍵合約中加入「pause」功能,萬一發生異常,能在第一時間暫停資金流動。
- 加強鏈上監控: 使用專門的鏈上監控工具(如 Tenderly、Forta)對所有合約(包括已退役的)進行異常交易警報。
- 公開漏洞獎勵計畫: 鼓勵社群白帽駭客主動報告舊合約漏洞,形成「眾包」安全防線。
給 DeFi 玩家的自保建議
作為一般投資者,我們同樣需要對「退役」合約保持警覺。以下是幾點可以在智慧型手機上執行的簡單檢查:
- 在參與任何 DeFi 專案前,先檢視該專案的合約列表,確認是否有「deprecated」合約仍在運作。
- 使用區塊鏈瀏覽器(如 Etherscan)檢查合約的最後一次互動時間,若發現久未更新卻仍有資金流動,要提高警覺。
- 如果有條件,盡量把資金放在有「時間鎖」或「多簽」機制的合約中,降低單點被盜的風險。
- 關注專案方釋出的安全公告與升級說明,特別是涉及合約「退役」的公告,確認是否有完整的「停用」計畫。
- 加入專案的社群(如 Discord、Telegram),在遇到異常時能第一時間得到官方回應。
結語:資安沒有「退休」這回事
Aztec 接連兩次的 210 萬美元被盜教訓,再次提醒我們:在區塊鏈世界裡,資安是一條不歸路。即便專案已經「退役」某段程式碼,也不代表它可以「退休」。只要合約還存在於鏈上,它就有可能被利用。對於專案方而言,完整的「退役」流程與持續的監控是必不可少的;對於投資者而言,保持警覺、定期檢查合約狀態,才能在這個充滿變數的領域裡,保障自己的資產安全。
未來,我們期待看到更多專案在升級時能真正做到「一刀切」的停用,讓「被遺棄」的智慧合約不再成為隱形的資安地雷。只有這樣,DeFi 生態才能在安全的基石上持續繁榮。
🔍 相關標籤
#Aztec #DeFi #智慧合約 #資安漏洞 #區塊鏈 #SlowMist #加密貨幣 #安全審計 #Layer2

