從預簽名到權限失守,Drif 的安全防線爲何形同虛設?

撰文:Four Pillars

編譯:AididiaoJP,Foresight News

核心要點

2026 年 4 月 1 日 16:05(UTC 時間),Drift 協議遭受了約 2.85 億美元的重大攻擊。Drift 是 Solana 生態系統中頭部永續合約去中心化交易所。此次攻擊屬於複雜的抵押品操縱方案:攻擊者利用被泄露的管理員密鑰,上線了一個無價值代幣的新現貨市場,隨後關閉了提款保護機制,最後通過僞造的抵押品價值提取了真實資產。

該攻擊結合了基於持久化隨機數的預簽名技術與高級社會工程學手段。自 3 月 23 日起,攻擊者爲兩名多籤簽名者及兩個由攻擊者控制的賬戶分別創建了持久化隨機數賬戶。即使在 3 月 27 日協議方執行了合法的多籤遷移之後,攻擊者仍成功重新獲得了對新多籤中兩名簽名者的訪問權限。攻擊者通過誤導交易內容的方式,從合法簽名者處獲取了預簽名,利用持久化隨機數加以存儲,並於 4 月 1 日批量執行,最終奪取了管理員權限。此事件不涉及助記詞泄露或智能合約漏洞。

此事件是又一次重大的操作安全失誤,距離 Resolv 攻擊事件僅相隔 10 天。Resolv 的崩潰源於其完全未設置多籤機制;而 Drift 儘管設有多籤,但因閾值過低且缺乏額外安全機制而同樣失守。這兩起事件共同表明,對特權架構進行根本性重新設計已十分迫切。

事件概述

來源:@DriftProtocol

2026 年 4 月 1 日 16:05(UTC 時間),Solana 上旗艦級的永續合約去中心化交易所 Drift 協議遭遇了大規模攻擊。Drift 是一個提供槓桿交易、現貨交易、借貸及其他多種去中心化金融服務的協議,其架構結合了虛擬自動做市商與鏈上訂單簿。就在攻擊發生之前,該協議鎖定的總價值約爲 3.09 億美元。

來源:@PeckShieldAlert

大約在 18:10(UTC 時間),即攻擊開始約兩小時後,Drift 團隊在 X 平臺上發文,要求用戶暫停存款。隨後,團隊確認了攻擊事件,並暫停了所有存款與提款功能。包括 PeckShield 與 Lookonchain 在內的多家安全及鏈上分析公司估計,損失約爲 2.85 億美元。Phantom 錢包迅速採取行動,屏蔽了對該協議的訪問。

此事件之所以格外引人關注,是因爲它發生在 Resolv 攻擊事件之後僅 10 天,成爲短時間內連續發生的又一起大規模管理員密鑰泄露事件。兩起事件存在共同根源:根本原因並非智能合約代碼漏洞,而是操作安全方面的失誤。

根本原因分析

本次攻擊的核心在於攻擊者利用被泄露的管理員權限實施了抵押品操縱。如果說 Resolv 事件是「具備鑄造權限的密鑰被泄露」,那麼 Drift 事件就是「具備市場上線及安全配置權限的密鑰被泄露」。二者表現形式不同,但根源一致。以下將對攻擊流程進行逐步分析。

來源:Dexscreener

本次攻擊最直接的工具是 CarbonVote Token(CVT),一種流動性極低的代幣。攻擊者控制的地址之一(FnYXwy...LpAjjx)在攻擊前三週發行了該代幣。CVT 的總供應量約爲 7.5 億枚,其中攻擊者錢包持有超過 80%。攻擊者在 Raydium 上創建了一個價值約 500 美元的最小流動性池,隨後進行了持續的刷量交易。

Drift 協議中的 initializeSpotMarket 函數允許管理員直接指定預言機地址及其參數來源。查閱現有現貨市場的軟件開發工具包配置可知,每個市場均單獨定義了預言機、預言機來源及代幣鑄造字段。這意味着,即使像 CVT 這樣沒有 Pyth 喂價的代幣,只要攻擊者獲得了管理員權限,也可以使用任意預言機源將其上線爲市場。

在此次攻擊中,攻擊者爲 CVT 市場指定了一個 Switchboard 喂價作爲其預言機。Switchboard 是一個預言機網絡,創建自定義喂價相對容易。攻擊者配置了一個由其控制的喂價,將 7.85 億枚 CVT 的價值定爲數億美元。Dexscreener 等價格追蹤平臺顯示 CVT 價格約爲 1 美元,但其實際市場流動性和內在價值幾乎爲零。

攻擊中所使用的掏空錢包(HkGz4K...ovpZES)大約在八天前,即 3 月 24 日首次出現活躍。該錢包通過 NEAR 協議意圖獲得了預充值,鏈上記錄顯示截至攻擊當日,該錢包共完成 325 筆交易。

攻擊當日所使用的管理員簽名者(H7PiGq...y7ZgL)的鏈上活動歷史同樣值得關注。該密鑰總共僅記錄了 29 筆交易。其第一筆交易發生於 3 月 31 日 15:05(UTC 時間),即攻擊前一天;最後一筆交易發生於 4 月 1 日 18:05(UTC 時間),即攻擊當日。該密鑰的整個鏈上存在時間約爲 27 小時。其原因可從鏈上記錄中清晰看出。

Drift 協議的管理員權限並非由單個外部擁有賬戶管理,而是通過多籤機制實現。然而後續調查揭示的攻擊路徑遠比簡單的多簽入侵更爲複雜。大約在攻擊前九天,攻擊者創建了四個持久化隨機數賬戶。其中兩個與 Drift 安全委員會多籤的簽名者相關聯,另外兩個由攻擊者控制。持久化隨機數是 Solana 上的一種機制,能夠繞過普通交易中約一分鐘的區塊哈希有效期,允許提前收集簽名並在日後執行。據信,攻擊者利用這一機制,通過誤導交易內容的方式,從合法簽名者處獲取了預簽名。

四天後,Drift 團隊因安全委員會成員變更而執行了計劃中的多籤遷移。此次遷移屬於常規操作流程,但攻擊者成功適應了這一變化。

攻擊發生前一天,攻擊者爲遷移後多籤中的一位簽名者(6UJbu9...Pvu924)創建了一個新的持久化隨機數賬戶。此時,攻擊者已重新獲得了對更新後多籤中五分之二簽名者的有效訪問權限。這表明攻擊者已深度滲透系統,甚至能夠應對多籤遷移這樣的意外變動。

攻擊當日,Drift 團隊執行了一次從保險基金的例行測試提款。約一分鐘後,攻擊者快速連續執行了兩筆預先簽名的持久化隨機數交易。

來源:solscan

第一筆交易在 Squads 多簽上執行了 VaultTransactionCreate、ProposalCreate 及 ProposalApprove 指令,創建了惡意的管理員轉移提案並記錄了第一次批准。

緊接着,第二筆交易利用持久化隨機數執行了 ProposalApprove 及 VaultTransactionExecute 指令。五分之二的閾值隨即達成,且由於時間鎖設置爲零秒,該交易立即得到執行。此時,Drift V2 程序中的 UpdateAdmin 指令被調用,將管理員地址轉移給了攻擊者(H7PiGq...y7ZgL)。

此處的關鍵細節在於,這兩筆交易均事先完成了全部簽名,並在攻擊當日批量提交。簽名者當時很可能並未充分理解其所簽名的交易內容。Drift 團隊使用的「交易誤述」一詞表明,簽名者被誘騙簽署了僞裝成常規操作的惡意管理員轉移交易。持久化隨機數的作用在於無限期存儲這些預簽名,使得攻擊者可以在其選擇的時機予以執行。

被替換後的管理員簽名者隨後調用了 Drift V2 程序(dRifty...cn33UH),執行了兩個操作。

來源:solscan

第一,攻擊者通過 initializeSpotMarket 指令,在 Drift 上將 CVT 註冊爲新的現貨市場。在此過程中,創建了一個新的現貨市場賬戶(BY3WYn...FVU1Cf)和兩個 CVT 代幣賬戶,並將 Drift 金庫的程序派生地址(PDA,JCNCMF...XXJfrw)設置爲代幣所有者。

Drift 運行的是多資產抵押系統,這意味着在新現貨市場上註冊的代幣可以立即用作抵押品。然而要被視爲合格抵押品,該市場的 initial_asset_weight 與 maintenance_asset_weight 參數必須設置爲大於零的正值,而默認的初始化值較低或接近於零。對攻擊交易(4a5962R...st82X)的分析顯示,updateSpotMarketMarginWeights(或等效的風險參數更新)與 initializeSpotMarket 被捆綁在同一筆交易中執行,攻擊者將 CVT 的抵押品權重設置爲最大值。

這暴露了一個從縱深防禦角度來看的關鍵設計缺陷:市場上線、預言機源指定、最大抵押品權重配置以及提款保護禁用等操作,均可在單筆交易內一次性完成。本應用於防止大額頭寸集中風險的權重摺扣因子,在權重本身被設爲最大值之後,也喪失了實際效用。如果該程序對新創建市場的權重設置上限,或對權重變更設置獨立的時間鎖,那麼這種一次性瓦解所有防禦措施的攻擊將無法實現。

來源:solscan

第二,在同一筆交易中,攻擊者五次調用 updateWithdrawGuardThreshold 指令,將主要資產市場的提款限額提高到了極端水平。所有市場的限額均被設置爲約 500 萬億的統一數值,實際上將提款保護機制的閾值推至無窮大,從而廢除了旨在阻止異常大額提款的安全防護功能。

這一筆交易(4a5962R...st82X)同時摧毀了 Drift 的三道核心防線。

第一,通過分配一個由攻擊者控制的 Switchboard 喂價作爲預言機,價格機制被攻破。第二,抵押品權重被設置爲最大值,使得一個毫無內在價值的代幣被認定爲優質抵押品。第三,提款保護機制的閾值被提升至約 500 萬億的水平,實質上消除了異常提款的阻斷機制。

包括管理員權限變更在內,攻擊者僅用兩筆交易就瓦解了該協議的全部安全架構。從代碼審計的角度來看,這帶來了一個深刻的悖論:Drift 的合約代碼完全按照審計所確認的方式運行。initializeSpotMarket 按設計註冊了新市場,指定了預言機源並設置了權重參數;updateWithdrawGuardThreshold 按設計修改了限額。問題根源在於系統設計本身——該設計允許完整的攻擊鏈條在一筆交易內完成。這已不屬於代碼審計的範疇,而是屬於特權架構與參數約束設計的範疇。

最終,攻擊者通過一個新創建的 Drift 用戶賬戶,存入了約 7.85 億枚 CVT 作爲抵押品。由攻擊者控制的 Switchboard 預言機喂價將此價值評定爲數億美元,而被設爲最大的抵押品權重則認可了幾乎全部估值作爲有效抵押品。Drift 的保證金系統完全按照預期設計運行。問題在於,輸入該系統的每一個參數都已被攻擊者惡意操縱。