Eth2 中的時間伺服器攻擊及其緩解措施

買賣虛擬貨幣
摘要:Eth2 中的時間伺服器攻擊之前也有人討論過。但迄今為止,主流意見都認為這種攻擊只能導致驗證者暫時離線,等節點運營者重建正確的時間同步措施,節點就能重新回到線上。但是,如果節點可以被誘騙去簽署一條有關遙遠未來某個 epoch 的見證訊息(attestation),危險性就遠不止暫時離線這麼簡單:因為共識演算法的環繞投票罰沒規則,這些節點在整個網路實際到達該錯發的見證訊息的目標 epoch 之前,將不能再簽名任何見證訊息(否則就會觸發罰沒)(譯者注:有關環繞投票罰沒條件的介紹,見此處)。在共識規則的運作下,這種時間伺服器攻擊會導致受攻擊的驗證者幾乎永遠離線,而相關的權益人也會因為懶惰懲罰(inactivity leak)而付出慘痛代價。攻擊介面Eth2 中的見證訊息就是驗證者簽過名的、包含所認可的來源檢查點和目標檢查點的資訊;來源檢查點和目標檢查點都以時段號(epoch number)和區塊根(block root)來表示。Casper FFG 的演算法的安全性保證之一便是 “無環繞投票” 規則:驗證者簽名過的任意兩條訊息中,不能出現有 attestation1.source < attestation2.source 且 attestation2.target < attestation1.source 的情況(一條見證訊息所試圖敲定的範圍恰好在另一條見證訊息試圖敲定的範圍內)[1]。我們可以按如下手法炮製一次時間伺服器攻擊:第一步是透過操縱時間伺服器的時間,使之跳轉到未來的某個時間,使得被攻擊驗證者的時間也跳轉到未來(比如說 15 到 20 天之後),這個時間必須短於懶惰懲罰致使驗證者餘額降低至零的時間,否則驗證者就不會再簽名見證訊息了。然後我們需要誘騙相關的節點,使之認為它其實是跟鏈保持同步的,然後它才會簽署見證訊息。如果攻擊者控制了多個對等節點,這一點總是有可能做到的,只需在點對點的網路頻道中傳送一些來自未來時間的見證訊息和區塊即可。控制多個節點也是容易實現的,所以這並不是一個不現實的攻擊者假設。一旦目標驗證者簽名了一條以未來 epoch 為目標 epoch 的見證訊息,攻擊者就可以把這條訊息儲存下來,然後確定這名驗證者在整個網路實際到達那個未來 epoch 之前,都不能再簽名任何見證訊息了(否則攻擊者可以發出這條訊息,使之被罰沒)。當前所有 Eth2 實現的驗證者客戶端都有措施防止該驗證者簽署相互衝突的見證訊息,因此該驗證者實質上就是離線了。
結果一名攻擊者可以透過一個時間伺服器(或類似設施,例如 roughtime)來驅逐所有 TA 能影響到的驗證者。這種攻擊會比此前使用同樣介面所設想的攻擊 [2] 更為惡劣,因為影響不是暫時的,而是持久得多。雖然我們有可能在幾分鐘之內就能發現這樣的攻擊,而且所有專業的節點都能在幾個小時內恢復正常時間,但這於事無補,因為損害已經發生了 —— 而且可以導致驗證者的慘重損失,例如,可能有很多驗證者會因為指數升高的懶惰懲罰而被提出網路。緩解措施加入驗證者客戶端不罰沒規則我們可以在驗證者客戶端中加入一條不罰沒規則:要求他們在簽署所有訊息前都評估當前的時間,而且不要提前簽署未來的訊息。這個辦法其實只有在驗證者客戶端與信標鏈節點沒有部署在同一臺機器上且沒有被攻擊波及時才有用。不過,對於金鑰分割型驗證者來說是一個明確的改進,因為這個規則將不允許領導哦啊這節點提議一條未來的見證訊息,可以阻擋驗證者的行動。為時間同步措施加入更多的保護
本文所提出的問題表明,時間伺服器的同步措施所包含的攻擊介面比我們從前設想的嚴重得多,必須引起我們的注意。小幅度的時間偏移雖然惱人,但不會導致嚴重的問題,所以,僅在時間伺服器推送的更新與本地的 RTC 時間相差幅度在一定範圍內才使用更新、否則就拒絕更新,似乎是更好的模式。但這個模式仍會遺留一個攻擊介面在啟動程序中。因此時有發生的大規模電源中斷可能會演變成嚴重的問題、一次性影響眾多驗證者。我認為,可以讓驗證者客戶端在啟動前先檢查罰沒保護資料庫、如果在幾個小時乃至幾天內都沒有簽名過任何訊息,就拒絕啟動。長時間不簽名訊息意味著可能發生了時間伺服器攻擊。可以新增一個強制啟動的標籤來應對例外情況。(感謝 @alonmuroch 的討論,使我們發現了這種攻擊)。[1] https://arxiv.org/abs/1710.09437 [2] Time attacks and security models 

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;