治理攻擊
治理攻擊是劫持一個 DAO 自身的決策機器,去讓協定做出有害之事——最常見的,是投票讓它自己把金庫交給攻擊者。由於鏈上治理把執行綁定到投票上,一個能湊齊足夠投票權的對手,根本不必在程式碼裡找臭蟲;程式碼完全照設計運作,忠實地執行一份由攻擊者「合法」通過的惡意提案。漏洞不在那把鎖上,而在「誰能握有鑰匙」。
決定性的要素,是低成本且暫時地取得投票權。若一個協定的治理代幣具流動性,攻擊者便能買入、借入或閃電貸來取得控制性的份額——而閃電貸尤其危險,因為它讓人能在單筆交易內借入一筆鉅款、用它、再把它全數還清,憑空、免費地變出一個暫時的絕對多數。2022 年的 Beanstalk 事件是教科書般的案例:攻擊者事先送出了惡意提案,接著借入價值約十億美元的閃電貸,瞬間取得絕對多數並觸發一條緊急執行路徑,從協定中抽走約一億八千兩百萬美元,並在同一筆交易中償還貸款。
各種防禦都旨在「讓投票權昂貴到難以租借、讓決策緩慢到難以執行」。把投票權快照在過去某個區塊(如 ERC20Votes 所做)能消解閃電貸,因為快照之後取得的代幣毫無權重。在「提案通過」與「執行」之間設一道時間鎖,給社群一扇偵測惡意提案、並得以退場或介入的窗口。合理的法定門檻與提案門檻提高了被俘獲的成本,信念投票逼迫支持必須跨時間維持,而緊急的多重簽章「守護者」能否決明顯懷有敵意的行動。反覆出現的教訓是:任何持有真實價值的治理系統,都必須假設它自己的投票代幣可能被當作武器。
Beanstalk(2022 年 4 月):攻擊者預先埋下惡意提案,閃電借入約十億美元的資產,在單筆交易中取得治理代幣三分之二的絕對多數,呼叫一個緊急執行函數,把約一億八千兩百萬美元轉給自己,再償還閃電貸——全程原子化完成。兩項本能阻止它的結構性修補:把投票權快照到過去某個區塊,以及一道強制的執行時間鎖。
最違反直覺的治理攻擊,利用的是一個運作得完美無瑕的系統。Beanstalk 中沒有任何合約被「駭」——協定只是順從地執行了一份由閃電貸湊出的絕對多數所合法通過的提案。修補之道是程序性的(快照、時間鎖),而非修掉某個臭蟲。