🤖 最新推出:《Quicknode 人工智慧實戰手冊》 10 個經過實測的 AI 程式設計食譜agents 。
查看食譜 常見的區塊鏈故障模式:共識、應用程式與基礎設施風險 |Quicknode已通過 SOC 2 Type II 認證 · ISO 27001
答案>了解區塊鏈安全基礎知識>常見的區塊鏈故障模式 簡而言之:區塊鏈會在三個層級發生故障。共識層的故障包括驗證者程式錯誤、網路分割以及 51% 攻擊;應用層的故障包括智慧合約程式錯誤、預言機操縱以及治理漏洞;基礎架構層的故障則包括節點當機、服務供應商中斷以及雲端事故。每個層級都需要各自的防禦機制。這些故障之所以重要,是因為區塊鏈應用程式涉及真實資金的流動,因此一旦發生故障,所造成的損失遠比一般軟體要嚴重得多。
簡單的解釋
區塊鏈常被稱為「無需信任」且「immutable 」。這並不代表它們不會出錯。如同任何複雜的分散式系統,區塊鏈可能以多種方式、在多個層級上發生故障。
對開發者而言,關鍵在於故障會層層疊加。即使一個安全的智慧合約,若有人篡改為其提供資料的預言機,仍可能導致用戶資金損失。即使一個編寫完善的應用程式,若其底層節點發生故障,仍可能無法正常運作。
不妨將其比作一棟建築物。地基(共識層)可能會出現裂縫;管線與電路(應用層)可能會發生滲漏或短路;物業管理公司(基礎設施層)則可能破產。每種故障都需要不同的防護措施,而一個具韌性的系統能夠同時抵禦這三種情況。
共識層故障
共識層是每條區塊鏈的基礎。它決定了驗證者如何就哪些交易有效、哪些區塊應加入區塊鏈達成共識。一旦共識失敗,其造成的損害將是所有層級中最嚴重的:區塊鏈可能會停滯、重新組織,或產生相互衝突的區塊。
驗證者漏洞是最常見的共識失敗原因之一。區塊鏈客戶端軟體相當複雜。若在區塊生成、認證邏輯或狀態轉換過程中出現漏洞,可能會導致驗證者產生無效區塊、在輪次中途當機,或對正確狀態產生分歧。
當某個客戶端在網路中佔據主導地位時,風險便會增加。如果 70% 的驗證者運行相同的客戶端,而該客戶端存在漏洞,那麼網路的 70% 將立即癱瘓。正因如此,客戶端多樣性——即同一協議的數種獨立實作——在區塊鏈安全領域中經常被提及。
當一群驗證者無法再相互通訊時,便會發生網路分割。常見原因包括網際網路中斷、針對性的 DDoS 攻擊,以及路由故障。
若分叉的雙方均無法達到共識門檻(通常為質押權重的三分之二),區塊生成將停止。
如果雙方仍能達到閾值,區塊鏈便會暫時分叉,雙方各自產出自己的區塊。
當網路重新連線時,重新組織(reorg)會解決此分叉。較短分叉上的交易將會被撤銷。
51% 攻擊(或針對基於 BFT 的區塊鏈的 34% 攻擊)會讓擁有多數共識權力的攻擊者篡改近期交易紀錄。其運作方式如下:
攻擊者建立了一條從公共鏈分叉出來的私有鏈。
私有區塊鏈收集的工作量證明或驗證者證明,比公有區塊鏈更多。
攻擊者將其廣播出去。由於其權重較高,網路便接受了它,並捨棄了公鏈上的近期區塊。
這使得雙重支付成為可能。攻擊者先在公有鏈上發送資金並等待確認,接著發布一條未包含該筆交易的私有鏈。如此一來,他們既能取得商品,又能保留資金。
應用層故障
應用層涵蓋智慧合約、DeFi 協議、預言機,以及保管數十億美元用戶資金的鏈上邏輯。此處最常發生故障,且造成的損失也最大。
再進入攻擊的目標是那些在更新自身狀態之前便呼叫其他合約的合約。被呼叫的合約可以在更新生效之前「重新進入」原始合約,並再次執行相同的函式,從而導致資金被盜。
2016 年的 DAO 駭客事件屬於「再入攻擊」。該事件造成約 6,000 萬美元的損失,並導致Ethereum 與Ethereum Classic 之間產生分裂。儘管這個漏洞已為人所知多年,但在那些跳過「檢查-效果-互動」模式的新合約中,它仍時常出現。
當數學運算產生的數值超出其資料型別所能容納的範圍時,便會發生整數溢出與下溢,導致數值發生循環。原本應為負數的減法運算,可能會返回一個巨大的正數,使攻擊者得以索取超過其持有的代幣數量。Solidity 0.8.0 新增了內建檢查機制,當發生溢出時會回滾交易。使用較舊版本編寫,或採用未經檢查的數學區塊的合約,仍面臨此風險。
當管理功能未檢查呼叫者身分時,便會發生存取控制失效的情況。屆時,任何人都能執行原本僅限合約擁有者或特定角色才能執行的功能。常見範例:
未受保護的升級功能,允許任何人替換合約的邏輯
未進行所有權檢查的提取函式
設定錯誤的基於角色的存取權限
預言機的惡意操縱特別危險,因為它攻擊的是鏈上與鏈下數據之間的橋樑。那些在借貸、清算或衍生性金融商品中使用價格預言機的合約,可能會被誘使根據虛假價格採取行動。
閃電貸款是最常見的工具。在單一的原子交易中,攻擊者會:
借入大量代幣
利用它們來操縱由預言機讀取的去中心化交易所(DEX)上的價格
以虛假價格在目標協議上觸發一項有利可圖的操作
償還貸款
該目標合約完全達到了其設計目的。問題出在預言機的設計上,該設計未能考量到短期價格波動。
治理漏洞攻擊鎖定去中心化自治組織(DAO)及去中心化金融(DeFi)協議的投票系統。攻擊者通常透過閃電貸款取得足夠的治理代幣,藉此通過惡意提案。該提案可能耗盡金庫資金、變更協議設定以製造漏洞,或將管理權交給攻擊者。
基礎架構層的故障
基礎設施故障並不會破壞區塊鏈本身,而是會阻斷應用程式和使用者存取區塊鏈的能力。對開發者或終端使用者而言,其結果與區塊鏈故障無異:應用程式會停止運作。
節點當機和同步失敗會導致節點離線,或使其提供過時資料。若某個節點落後於區塊鏈末端數個區塊,便會回傳舊的餘額、遺漏近期交易,並可能拒絕依賴近期狀態的有效交易。若某個應用程式僅依賴單一節點且未設置故障轉移機制,當該節點發生故障時,該應用程式便會隨之停擺。
服務供應商的服務中斷會同時影響該供應商的所有客戶。若某家主要的 RPC 服務供應商發生服務中斷,所有使用其端點的應用程式都將無法存取該鏈。這是在本應去中心化的系統中存在的集中化風險:當數千個應用程式共用同一家服務供應商時,該供應商便會成為單一故障點。
雲端服務供應商的故障,會像影響其他雲端服務一樣,影響區塊鏈節點。當 AWS、GCP 或其他雲端服務發生區域性中斷時,該區域內的每個節點都會離線。由於絕大多數區塊鏈節點都運行在少數幾家雲端服務供應商上,因此單一雲端服務的中斷,對網路健康狀況和應用程式正常運作時間造成的衝擊,往往遠超乎預期。
即使 RPC 端點運作正常,DNS 和網路故障仍可能導致應用程式無法連線至其 RPC 端點。DNS 劫持、BGP 路由問題以及 TLS 憑證問題,都可能切斷應用程式與其基礎架構之間的連線。
減緩策略
要防範這些故障,必須採取涵蓋這三個層級的分層式方法。
在共識層中,客戶端的多樣性是最有效的防禦手段。只要有數種客戶端實作,其中一個的錯誤便不會導致整個網路癱瘓。質押分佈同樣至關重要:廣泛且去中心化的驗證者群組,能降低協調性故障與 51% 攻擊的風險。
在應用層,主要的防禦措施包括安全稽核、形式驗證以及漏洞懸賞計畫:
在部署前,應委託數家獨立公司對智慧合約進行審計。
利用形式驗證,從數學上證明程式碼符合其規格。它能發現人工審查可能忽略的錯誤。
舉辦漏洞懸賞計畫,支付報酬給白帽駭客,以鼓勵他們找出並負責任地披露系統漏洞。
採用「時間鎖定」機制,讓社群能在變更生效前進行審查。此舉可防止惡意或存在錯誤的更新立即上線。
要求管理功能必須經過多重簽名核准,以確保即使單一金鑰遭竊,也無法執行具特權的操作。
在基礎架構層面上,跨供應商、跨區域及跨雲端的冗餘機制是基礎。切勿僅依賴單一的 RPC 供應商、資料中心或雲端服務。
斷路器會在故障元件導致依賴它們的系統癱瘓之前,將其切斷。
「優雅降級」能確保在某些元件無法運作時,核心功能(例如顯示餘額)仍能正常運作。
Quicknode 如何建立韌性
Quicknode該系統的基礎架構是為了能吸收基礎架構層的故障而建構的:
橫跨 14 個以上地區及 5 家以上雲端與裸機服務供應商的地理分佈
在可行的情況下,客戶群應具多樣性
自動故障轉移,可將請求導離狀態異常的節點
由專責的區塊鏈營運團隊提供全天候(24/7)監控equipe
Quicknode Streams 透過保證傳送、最終性順序處理以及自動處理重組(reorg),使資料管線更具韌性。當發生重組時,Streams 會自行偵測並修正受影響的資料。至於應用層監控,Streams 可讓您監控特定合約事件、異常交易模式,以及可能預示正在進行中的漏洞攻擊的狀態變更。
對於對系統正常運作時間有最嚴格要求的團隊,Quicknode 專用Clusters 服務提供與共享流量完全隔離的基礎架構,並附帶保證正常運作時間的服務水準協議 (SLA)。即使其他客戶的流量驟增,也不會影響您的運作速度,從而為關鍵任務應用程式提供所需的隔離環境。
區塊鏈最常見的故障類型有哪些?
上述故障是根據其發生的層級進行分組的。該層級同時也標示出應由誰負責防範每項故障。下表列出了最常見的故障類型、每種類型的範例,以及相應的修復位置。
圖層 | 常見故障 | 範例 | 減緩措施的實踐之地 |
|---|
共識 | 51% 攻擊或區塊鏈重組 | 多數派重寫了近代史 | 協議與驗證者集 |
共識 | 網路分割或停止運作 | 驗證者無法達到門檻 | 通訊協定與客戶端的多樣性 |
應用 | 再入性或預言機操縱 | 閃電貸款耗盡了借貸池 | 智慧合約與審計 |
應用 | 存取控制或治理漏洞 | 未受保護的行政功能 | 智慧合約與多簽名 |
基礎設施 | 節點當機或服務供應商中斷服務 | RPCendpoint 傳回過期的資料 | 冗餘基礎設施 |
該如何在區塊鏈故障造成損失之前及早發現?
偵測能力是決定事件能否被控制,還是演變成災難的關鍵。透過持續監控區塊鏈基礎架構,可即時偵測節點延遲、錯誤激增及同步差距。更廣泛的可觀測性將這些訊號與應用程式行為關聯起來,讓您能在使用者察覺之前,就發現漏洞或服務中斷。
「鏈條中斷」與「鏈條重組」之間有何區別?
基礎設施的冗餘機制如何降低故障風險?
常見問題
區塊鏈故障的三大層面是什麼?
故障可能源自共識層(驗證者錯誤、網路分割、51% 攻擊)、應用層(智慧合約錯誤、預言機操縱、治理漏洞),或基礎設施層(節點當機、服務供應商及雲端服務中斷)。具韌性的系統能抵禦這三類故障。
區塊鏈損失最常見的原因是什麼?
應用層故障——尤其是智慧合約漏洞和預言機操縱——是最常見且代價最高的。底層區塊鏈通常完全按照設計運作,但存在缺陷的合約或預言機邏輯卻遭到了利用。
單一 RPC 提供者發生中斷,是否會導致我的應用程式無法運作?
是的。如果您的應用程式僅依賴單一服務供應商、單一資料中心或單一雲端區域,一旦該處發生中斷,您的服務便會無法運作。透過將流量分散至具備自動故障轉移功能的冗餘服務供應商和區域,即可消除這個單一故障點。
51% 攻擊與網路分割是一回事嗎?
不。51% 攻擊是指多數共識權力者蓄意試圖改寫區塊鏈歷史,而網路分割則是驗證者之間意外失去通訊所致。兩者都可能導致區塊重組,但其成因與防禦措施卻有所不同。
該如何防範預言機遭人為操縱?
應使用能彙總不同來源及不同時間點價格的預言機,避免僅依賴單一去中心化交易所(DEX)的現貨價格,並加入合理性檢查與斷路器機制。這些措施能有效抵禦因價格饋送短暫失真而引發的閃電貸攻擊。
延伸閱讀