治理攻擊是什麼,跟一般認知的駭客攻擊有什麼不同?
治理攻擊指的是攻擊者利用去中心化自治組織(DAO)的投票機制本身作為攻擊工具,取得足夠數量的治理代幣後,提交並通過一個表面上合法、但實質上對協議有害的提案——例如把協議金庫的資金轉移到攻擊者控制的地址、或者修改核心參數讓攻擊者能繞過正常的安全檢查。因為整個過程完全依照協議設計好的治理流程進行,從技術角度看,這不是「破解」了什麼安全漏洞,而是「合法地」利用了治理機制本身。
跟一般認知的駭客攻擊最大的不同在於「攻擊路徑」:多數駭客攻擊利用的是智能合約程式碼裡的技術缺陷(例如前面文章介紹過的重入攻擊、預言機操縱),本質上是繞過或欺騙系統的安全機制;治理攻擊則完全不需要繞過任何技術防線,攻擊者堂而皇之地透過協議自己設計的投票流程達成目的,某種程度上是「用規則本身的漏洞攻擊規則」,而不是攻擊程式碼的漏洞。這也是為什麼治理攻擊經常被認為是特別難以透過傳統程式碼審計方式防範的風險類型。
治理攻擊為什麼會發生,為什麼閃電貸讓這類攻擊變得特別容易執行?
多數 DAO 治理設計的初衷,是假設治理代幣的持有分佈相對分散,任何單一參與者都難以短時間內取得足以左右投票結果的數量,這個假設在協議推出初期、代幣分佈確實相對分散時大致成立。但這個設計存在一個隱藏的前提沒有被充分考慮:如果治理代幣本身在公開市場上有足夠的流動性可供借貸,攻擊者理論上不需要真正「持有」這些代幣很長時間,只需要在投票那一刻取得控制權即可。
閃電貸的出現讓這個漏洞從理論風險變成實際可行的攻擊手法:攻擊者可以在同一筆交易裡,透過閃電貸借入巨額治理代幣、用這些代幣投票通過惡意提案、執行提案帶來的獲利(例如轉移金庫資金)、再歸還借來的代幣,整個過程不需要攻擊者準備任何長期資金,也不需要承擔代幣價格波動的風險。這也是為什麼多數協議在經歷過類似攻擊事件後,開始重新檢視自己的治理機制設計,例如加入投票前的代幣鎖倉時間要求(也就是本站介紹過的 veToken 模式),從根本上排除瞬間借貸取得投票權的可能性。
治理攻擊具體怎麼執行,一次完整的攻擊流程是什麼樣子?
典型的閃電貸型治理攻擊流程包含幾個環節:
這裡有一個關鍵環節值得特別留意:如果協議在提案通過與實際執行之間,設置了一段強制的時間延遲(稱為「時間鎖」),這能有效阻斷這種瞬間完成的攻擊模式,因為攻擊者無法讓借來的代幣停留超過一筆交易的時間,時間鎖的存在能給社群足夠反應時間,在提案真正執行前發現異常並採取應對措施。
治理攻擊對一般用戶有什麼實際影響,該怎麼評估一個 DAO 是否容易受害?
對持有某個協議治理代幣或資金存放在該協議裡的用戶而言,治理攻擊一旦成功,直接後果可能是協議金庫被掏空、關鍵安全參數被惡意修改導致其他攻擊接踵而至,這類損失往往是立即且不可逆的,因為投票與執行的過程完全符合協議自己設計的規則,沒有中心化機構能事後宣告這次投票無效並強制撤銷。
評估一個 DAO 是否容易受害,幾個具體可以查證的指標:治理代幣本身在鏈上是否有大量可供閃電貸借入的流動性(流動性越深,代表被瞬間借出巨額投票權的風險越高);提案通過與實際執行之間有沒有設置時間鎖(沒有時間鎖或延遲時間過短,代表社群缺乏足夠反應時間應對異常投票);投票是否要求最低參與門檻(法定人數),如果日常投票參與率本來就很低,攻擊者需要取得的投票權門檻也相對較低,更容易被少量突發資金左右;以及協議過去是否曾經歷過類似攻擊嘗試(即使未遂),這類歷史紀錄能提供關於協議治理機制實際抗攻擊能力的具體參考。查看一個協議是否值得信任時,這些具體的治理機制設計細節,往往比單純看「這是不是一個 DAO」更有參考價值。
2022 年 4 月,農業協議 Beanstalk 遭受一起知名的閃電貸型治理攻擊:攻擊者透過閃電貸借入巨額資金取得該協議治理代幣的絕大多數投票權,在同一筆交易裡通過一個表面包裝成正常提案、實質是把協議金庫資金轉移到攻擊者地址的惡意提案,並立即執行提案、歸還閃電貸,整起攻擊在單一區塊內完成,造成約 1.8 億美元的損失,是治理攻擊史上規模最大的案例之一,也讓「投票前鎖倉時間」與「執行前時間鎖」這兩項設計,後續成為多數協議治理機制的標準配置。
此為安全風險詞條,無正向取捨可言——治理攻擊對受害協議與其成員純粹是損失,唯一能討論的取捨在於:協議選擇開放、即時的治理機制(低門檻參與、快速執行)能提升治理效率與參與便利性,但代價是抗攻擊能力較弱;選擇加入投票前鎖倉、執行前時間鎖等防禦機制,能大幅提升安全性,但代價是治理流程變慢、參與門檻提高,這是協議設計階段的取捨,不是用戶能片面改變的選擇。