隨著不安全物聯網(IoT)設備的激增,針對域名系統(DNS)供應商的分布式拒絕服務(DDoS)攻擊在數量和規模上正在不斷增加。這些攻擊隨之影響依賴於這些供應商進行域名解析的網站。雖然DNS供應商采取了各種方法來保護自己免受此類攻擊,但網站保護自身的方法之一是使用多個DNS供應商。
2016年發生了史上最大規模之一的DDoS攻擊,這一攻擊是針對DNS供應商Dyn的。此次攻擊前後有三波,它通過已感染Mirai惡意軟件的物聯網設備組成的僵屍網絡進行攻擊。許多公司都受到此次攻擊的影響,比如Amazon、Paypal、Reddit和Github。該攻擊導致Dyn無法響應由其域名服務器解析的域名的有效DNS查詢,以至於終端用戶無法訪問相關域名。
據Dyn技術副總裁Phil Stanhope所說,此次Dyn攻擊事件還包括一個基於TCP SYN
cookie的攻擊,該攻擊利用了Linux內核的一個錯誤。SYN cookie是一種用於緩解SYN flood攻擊的方法,SYN
flood攻擊通過連續發送TCP SYN請求來耗盡目標系統的資源。然而,SYN cookie也有自己的問題,在Linux
3.x版本中,一個系統級別的鎖用於生成SYN
cookie。由於這個級別的鎖定,無論內核實際數量多少,系統均如單核系統一樣運行,從而降低了其實際處理能力。Linux
4.x版本通過使用針對各個CPU內核的局部鎖來解決這個問題。
DNS供應商采用了各種方法來防止攻擊,比如清理(scrubbing)。清理是通過第三方來過濾所有流量。第三方以提供保護為服務,清除惡意流量,使合法流量通過並到達最終目的地。許多廠商提供這樣的服務,比如Akamai、AT&T、Verizon和Arbor
Networks。
對某個網站或域名的任何HTTP(或其他協議)請求,都需進行DNS查詢,以將域名解析為一個或多個IP地址。該請求穿行於域名中各個級別的授權服務器的多個解析器。例如,對www.infoq.com的請求,首先是根服務器,然後再查詢.com的頂級域名(TLD)服務器,最後查詢infoq.com的授權服務器。整個過程中的解析器可能會緩存結果,以便更快地進行後續響應。緩存可以由DNS響應中的生存時間(TTL)值控制。針對infoq.com授權服務器的DDoS攻擊可能使得這些授權服務器無法響應有效查詢,並且最終導致整個網站無法訪問。
一般來說,DNS服務器冗余可以防止此類中斷。也就是說任何商業DNS供應商都將為一個既定域名提供多個DNS服務器。dig或drill命令可用於查看域名服務器記錄(下面以infoq.com為例)。
但是,如果某個供應商遭到DDoS攻擊,那麼可能其所有的域名服務器都會受到影響。因此使用多個DNS供應商有助於解決這一問題。
要使用多個DNS供應商,必須允許編輯各個DNS供應商的域名服務器記錄,以便所有記錄都可以作為響應的一部分進行發送。另外,每個供應商都將擁有多個域名服務器,並且各供應商的所有域名服務器的順序是打亂的。這樣對一個供應商的失敗請求會引起對另一個供應商的請求,而不是一直在嘗試第一個供應商的所有其他域名服務器,因為這些服務器可能也是失效的。
確保DNS可靠性的其他方法還有Anycast,在這個方法中,多個域名服務器具有相同IP地址。進行DNS查詢時,數據包被傳送到最近的域名服務器。在失效的情況下,數據包由底層路由協議自動傳送到最近的有效域名服務器。
設置正確的TTL非常重要,這樣即使記錄由服務於響應的中間服務器進行緩存,也可以實現發生故障時切換到輔助服務器。正如Stanhope在Velocity的演講中所說,未來NetOps、DevOps、SecOps和SRE團隊之間需要更多的協作來緩解這種攻擊。