在ipplescam.com 時代,Ripple 如何處理 DoS/DDoS?
我將假設在 Ripple 被某些子群體非理性地憎恨的日子裡,在 Ripple 啟動去中心化計劃之前,該網站曾經是 Google 上“漣漪幣”的第一個結果。 ,即遭到無情的 DoS 和 DDoS 攻擊。
伺服器是如何受到保護的?
好的,由於評論部分開始變得笨拙,我將輸入一個更長且更詳細的答案,其中包含@VinnieFalco 答案中的一些部分。
根據Wikipedia的說法,DoS 攻擊被定義為:“試圖使目標使用者無法使用機器或網路資源”,並且通常涉及“使目標機器充滿外部通信請求,以至於它無法響應合法的流量,或響應太慢以至於基本上不可用“
我們都同意,連接到 Internet 並在某個埠提供服務的系統不能只是神奇地阻止壞人連接到它,也不能選擇只接受“好”流量而避免接收“壞”流量。
DoS 攻擊有許多“類型”,但它們都歸結為一件事:它們尋求消耗資源:
如您所知,資源有多種形式。有時攻擊會消耗頻寬,有時它們會消耗 RAM、磁碟空間、IOPS、文件描述符、許可證插槽/席位,或者您的服務所需的任何有限資源。
從根本上說,您有兩種選擇:要麼將可用資源增加到攻擊水平之上,要麼安然無恙。
有時您可以做得更好:您可以通過使用內容傳遞網路來減弱試圖消耗頻寬的攻擊。如果攻擊導致 I/O 性能下降,您可以從旋轉硬碟驅動器轉到基於快閃記憶體的儲存,甚至是基於 RAM 的儲存。您可以限制使用需要受到攻擊的資源的命令。
有時您還可以做得更好:您可以檢測到攻擊流量僅來自主機子集,並在上游提供商處過濾掉這些數據流。如果 I/O 是瓶頸,您可以嘗試重新架構程式碼以減少必要的 I/O 數量。如果命令的計算成本很高,您可以嘗試優化它們,甚至以更有效的方式重新實現它們。
但是,最終,您真正能做的就是削弱DoS 攻擊的力量。一般來說,你無法阻止DoS,如果它發生了,你通常最終不得不彎腰等待它通過。
那麼 Ripple 伺服器呢?
至於增加可用資源,顯然這超出了程式碼的範圍:它不能神奇地提供更多資源。這是伺服器運營商的工作,他們通常會確保他們的伺服器有足夠的過剩容量來提供伺服器,即使在服務需求激增的情況下也是如此。所以這不是程式碼可以做的任何事情。
但是,伺服器可以做的事情是嘗試檢測它們何時處於重負載或受到攻擊並做出響應。從某種意義上說,這兩種情況的結果都是一樣的:
伺服器將懲罰連接,這些連接迫使伺服器在每單位時間裡做的工作比伺服器認為合理的多。通常,懲罰是通知使用者伺服器太忙並忽略命令,如果他堅持以不可接受的高速率發出命令,則斷開他的連接。
當然,伺服器沒有真正的方法來完全準確地區分使用者是否濫用,因為它沒有水晶球。它所知道的只是它從源接收的命令以及這些命令的發送速率,並以此為基礎做出決定。因此,雖然這種對策會影響確實濫用的使用者,但它也會影響合法使用者。
伺服器還可以跟踪其所有連接的負載,並且可以決定在負載開始攀升時使某些命令(它知道這些命令非常昂貴但並非絕對必要)暫時不可用。這樣,伺服器可以節省資源以用於處理必要的命令。
當然,這種方法更生硬,並且會影響合法使用者,因為伺服器可能拒絕執行昂貴的命令,即使是來自沒有發出任何其他昂貴命令或造成過度負載的合法使用者的命令。
最重要的是,Vinnie Falco 提到:伺服器試圖通過以下方式保護自己和網路免受濫用:
- 強加(微不足道且可忽略不計的)交易費用,這些費用應在 XRP 中支付,並根據包括網路負載在內的各種因素動態擴展;和
- 實施全網“賬戶”和“行動”儲備。
這意味著試圖以某種方式攻擊網路的人本質上必須為這樣做的“特權”付出代價,他們攻擊得越厲害,他們必須付出的代價就越多。
為什麼這有幫助?通常,那些策劃 (D)DoS 攻擊的人實際上並不需要支付費用,而且他們的成本很低,這使得攻擊不僅啟動成本低,而且維護成本低。這是一個巨大的優勢
通過收取對普通使用者來說微不足道的費用,Ripple 伺服器和網路將這一優勢帶走:他們“阻止”(D)DoS 嘗試,因為發起和維持針對 Ripple 的攻擊的成本迅速增加。
Ripple 伺服器還實施了一些其他機制來防止和減輕 (D)DoS 攻擊的影響。結合起來,所有這些事情都很好,但最重要的是,我們已經回到了我之前所說的:
連接到 Internet 並提供服務的系統不能只是神奇地阻止壞人連接到它,也不能選擇只接受“好”流量而避免接收“壞”流量。
我沒有涉及的另一件事是:優化 Ripple 伺服器程式碼以提高性能。這是我們在Ripple Labs花費大量時間的事情,我們仍然有我們想做的事情和我們想要實施的想法。我們也希望有才華的開源開發人員組成的充滿活力的社區也能看到並貢獻他們的許多好主意。