Safe 困局 Guard 能否重構契約巴別塔?
作者:flush&kong背景
2025年2月21日,Crypto行業遭遇史上最嚴重的資產管理危機。交易平臺Bybit的鏈上多簽錢包遭定向攻破,近15億美元資產通過一筆“合法簽名”的交易悄然流失。事后鏈上分析顯示,攻擊者通過精密的社會工程攻擊獲取了多簽權限,利用Safe合約的delegatecall功能植入惡意邏輯,最終繞過多重簽名驗證機制,將資金轉移至匿名地址。
這一系列事件的核心問題不在于Safe合約本身,而是在于整個系統的集成過程中的安全隱患,特別是在前端驗證環節。這促使我們需要思考:如何通過Safe的額外安全措施機制來強化多簽錢包的防護能力?Safe
Safe是一款多重簽名(Multi-Sig)錢包,主要用于管理高價值資產和Crypto的安全存儲與轉移。作為去中心化資產管理的基礎設施,它通過多方協同驗證機制確保資金操作的安全性,防止單一管理員或黑客利用單點故障進行惡意操作,廣泛應用于DAO治理、企業資金托管、去中心化基金池等場景。該合約由Safe(原GnosisSafe)團隊開發,是當前行業標準的鏈上資產管理解決方案。合約采用EIP-712標準實現結構化數據簽名,從而提高交易數據的安全性和可驗證性。核心用途
資金安全管理:合約要求多個預先設定的所有者(Owners)共同確認交易才能執行,從而有效防止單點失誤或惡意操作,確保資金安全。
交易執行與管理:通過內置的多簽驗證機制,合約能夠在滿足簽名閾值條件的情況下,執行對外轉賬、調用其他合約或處理復雜的業務邏輯,支持Tokens和原生幣的支付和費用補償。
模塊化擴展:合約采用模塊化設計,通過繼承和組合多個管理模塊(如OwnerManager、ModuleManager、GuardManager、FallbackManager等),使其功能靈活且易于擴展,為不同應用場景提供定制化支持。
函數解析
execTransaction函數執行經過多重簽名驗證的交易:
計算交易的唯一哈希值(結合交易參數、nonce等);
驗證所有簽名的有效性,確保每個簽名均來自合法的所有者或預先批準的地址;
調用目標地址的業務邏輯,并在交易執行后通過事件記錄成功或失敗狀態;
支持靈活的gas費用處理,確保在支付補償時準確計算交易成本。
checkContractSignatures&checkNSignatures函數驗證交易或消息的簽名數據:
分別處理EOA賬戶簽名、合約簽名(EIP-1271)、以及預批準的哈希;
確保簽名按照所有者順序排列,并且每個簽名都來自有效地址,防止重放攻擊和簽名篡改。
getTransactionHash函數生成交易哈希,用于簽名驗證和防止重放攻擊:
利用EIP-712標準對交易數據進行結構化哈希;
使用內聯匯編優化內存操作,提高計算效率;
結合當前的nonce值,確保每筆交易的唯一性。
handlePayment函數處理執行交易過程中的gas補償支付:
根據實際消耗的gas費用和基礎費用計算支付金額;
支持ETH以及其他Tokens的支付,確保費用補償準確無誤。
onBeforeExecTransaction為內部虛擬鉤子函數,在execTransaction函數執行之前被調用。該函數的設計目的是允許繼承Safe合約的子合約在交易執行前進行自定義邏輯處理。接收的參數集包括:
to:目標地址-交易要調用的合約或賬戶地址
value:以太幣值-隨交易發送的以太幣數量
data:數據載荷-包含函數選擇器和參數的調用數據
operation:操作類型-確定是CALL還是DELEGATECALL
safeTxGas:交易gas限制-為交易執行預留的gas數量
baseGas:基礎gas-獨立于交易執行的gas成本
gasPrice:gas價格-用于計算交易費用補償的gas價格
gasToken:gasTokens-用于支付交易費用的Tokens地址
refundReceiver:退款接收者-接收交易費用補償的地址
signatures:簽名集合-所有者對交易的簽名數據
盡管多簽錢包合約憑借其嚴謹的安全設計和靈活的模塊化結構,為數字資產管理提供了高效且安全的解決方案,實現了從交易初始化到最終執行的全流程安全管控,并成為Blockchain安全管理的重要工具,但同樣需要注意的是,受害者大多依賴硬件錢包進行簽名,而部分硬件設備對結構化數據簽名的顯示效果欠佳,容易導致用戶在短時間內無法準確識別交易數據,從而有“盲簽”風險。針對這一現象,除了優化硬件及其數據展示效果之外,還可以探索增加多重確認、智能提示以及增強簽名驗證工具等措施,以進一步降低盲簽帶來的安全隱患。SafeGuard
Safe合約在1.3.0版本中引入的重要安全功能——SafeGuard機制。這一機制旨在為標準的n-out-of-m多簽方案提供額外的限制條件,進一步增強交易安全性。SafeGuard的核心價值在于能夠在交易執行的不同階段進行安全檢查:
交易前檢查(checkTransaction):Guard機制可以在交易執行前,對交易的所有參數進行程序化檢查,確保交易符合預設的安全規則。
交易后檢查(checkAfterExecution):在交易執行完成后,Guard還會進行額外的安全驗證,檢查交易執行后Safe錢包的最終狀態是否符合預期。
架構分析
在近期不斷曝出安全事件的背景下,各方對多簽錢包合約的安全性日益關注,硬件錢包提供商如KeyStone、OneKey、RigSec等紛紛呼吁增強Safe合約的解析和防護能力,以預防類似風險的再次發生。在Bybit事件后,許多項目方開始聚焦Safe合約,并探索基于Guard機制的升級與擴展方案。其中,不乏有基于Guard機制的創新應用,構建一種建立在Safe多簽錢包之上的中間層安全解決方案,為底層資產與用戶資產之間提供了額外的安全保障。其核心作用在于,通過將Safe多簽交易涉及的目標合約、調用方式、執行數據、owner簽名信息、付款信息以及gas信息傳入checkTransaction函數,實現對交易的極細粒度檢查,包括白名單合約調用、白名單函數操作、白名單轉賬目標、交易頻次等權限控制。
值得注意的是,Safe本身只提供Guard管理和回調功能,實際的多簽交易檢查邏輯由用戶自行實現,其安全性取決于Guard實現的質量。如:SolvGuardian拓展了這一思路,在每個Vault配置專門的Guardian來指定允許的目標地址和操作權限,實現了指定允許合約、定義允許函數操作和ACL驗證需求三大權限控制要素。同時,采用分離的治理機制,由VaultGuardian負責執行,而Governor控制治理權限,確保即便Guardian出現問題,也能及時采取補救措施保護用戶資產。類似的設計理念也在Elytro的SecurityControlModule中得到應用,該模塊通過preExecute函數攔截關鍵操作,并借助白名單機制對模塊安裝、鉤子設置和驗證器管理等高風險操作進行精細管控,從而確保只有經過信任的合約才能被添加到系統中,為錢包提供了持久的安全保障。
在Bybit事件攻擊鏈中,若Safe合約部署了合理配置的Guard機制,攻擊者通過execTransaction發起的惡意delegatecall將在預檢階段被多重策略攔截:Guard的checkTransaction函數首先識別到delegatecall操作類型并觸發禁用規則(如強制限定operation僅為普通調用),隨后解析data字段檢測到非常規合約地址(0x4622...7242)及高危函數選擇器,通過預設的合約白名單與函數黑名單策略直接回滾交易,最終形成「策略攔截→邏輯阻斷」的防御體系,徹底阻斷存儲篡改與資金轉移路徑。
(當使用Safe版本≥v1.3.0 SafeGuard模塊的驗證操作https://excalidraw.com/#room=fd1df67dd09b3dab6bd8,Q1jeb1MZW7vwbY4NuxaV5A)
總的來說,Safe僅在1.3.0版本之后才提供Guard功能,盡管Guard可以提供極為細粒度的多簽交易檢查,但用戶在使用Guard功能時有較大的門檻。他們需要自行實現Guard檢查邏輯,粗略的或者有缺陷的Guard實現可能無法幫助用戶提升其Safe錢包的安全性,因此對Guard實現進行安全審計是必要的。毫無疑問的是,安全且適當的Guard實現可以極大提升Safe錢包的安全性。結論與展望
Bybit被攻擊事件凸顯了及時更新安全基礎設施的重要性,Bybit使用的是v1.1.1(<1.3.0)版本的Safe合約,這意味著他們無法使用Guard機制這一關鍵安全特性。如果Bybit升級到1.3.0或更高版本的Safe合約,并實現了合適的Guard機制,例如指定唯一接收資金的白名單地址,并進行嚴格的合約函數ACL驗證,可能就能避免這次的損失。盡管這只是假設,但它為未來的資產安全管理提供了重要思路。
SafeGuard機制就像給數字資產保險箱加裝的智能安檢系統,其效能取決于規則設計的嚴謹性和實施質量。面對日益精密的攻擊手段,我們需要:
自動化驗證:建立自動化的交易驗證機制
動態策略調整:根據威脅情報實時調整安全策略
多層防御:結合多種安全機制構建深度防御體系
持續審計:對Guard實現進行定期安全審計
未來的數字資產管理,將是智能合約安全機制與持續攻防演進的共同進化過程。只有將安全理念融入每一個環節,才能在黑客的"矛"與守護者的"盾"的博弈中構筑真正的安全壁壘。