每個網站都有可能會遭受到攻擊,現在的互聯網服務器遭受的最多的是DDOS攻擊,本文總結了一些DNS服務器會遇到的DDOS攻擊類型,以及相應的預防措施。
[1]的作者將DDOS的攻擊分為三種類型:
- 大數據洪水攻擊(Volume Based Attacks):這種攻擊的目標是通過使網絡服務器所在的網路的帶寬超負載,使你的服務器對外服務能力下降,甚至無法對外服務。這種攻擊常見的有UDP floods, ICMP floods,欺騙性報文攻擊等。這種攻擊一般用Gbps來衡量。
- 協議攻擊(Protocol Attacks):這種攻擊的目標是通過消耗網絡服務器、路由器、交換機、防火牆、負載均衡等設備的資源,使你的服務器對外服務能力下降,甚至無法對外服務。這種攻擊常見的有SYN floods,IP碎片攻擊,Ping of Death,Smurf DDOS攻擊等。這種攻擊一般用pps(packet per second)來衡量。
- 應用層攻擊(Application Layer Attacks):這種攻擊的目標是使服務器的軟件產生運行錯誤而停止對外服務。
下面會扁平地一一介紹各種攻擊,不會根據分類來介紹。
- UDP floods
UDP是一種無連接(connectionless)無狀態(sessionless)的傳輸協議,攻擊者會向目標服務器的任意端口(port)發送大量的UDP報文,目標服務器收到這些UDP報文后,會查看有沒有相應的服務監聽這個請求端口,如果沒有服務監聽這個請求端口,則向請求者發送ICMP Destination Unreachable報文。目標服務器在發送大量的ICMP報文上會消耗過多的服務器資源,從而使得目標服務器對外服務過慢,甚至停止服務。
UDP floods攻擊防御的常用辦法是過濾與所提供服務的包大小差別太大的請求包,或者限速,某一個請求IP所請求的UDP包的類型每秒不能超過一定的閾值,超過則丟棄。
- DNS 放大DDOS攻擊
這種攻擊依然是利用了UDP協議的無連接無狀態的特點,用戶偽造一個IP地址向DNS服務器發起請求,DNS服務器處理后會將結果返回到偽造的IP所在的網絡。如果這個DNS請求請求的是某個zone下面的所有資源記錄(dig ANY www.xxx.com ),DNS服務器返回的數據包就可能特別大,大量的大包發向偽造IP所在的網絡,就有可能阻塞那邊的網絡,或者消耗大量的服務器資源。因為DNS服務器返回的是一個合法的DNS消息,所以對於網絡人員來說,對這種攻擊的防御
目前很多的DNS服務器只負責解析一個domain中的域名,關閉遞歸查詢可以使你的DNS服務器不會成為DNS放大攻擊中的傀儡,BIND9中的option{recursion no;};可以關閉遞歸;如果你的服務器還想提供遞歸功能的話,可以只對特定IP段的查詢提供遞歸功能,BIND9中可以像下面這樣設置:
options {
allow-query { any; };
allow-recursion { corpnets; };
};
可喜的是,BIND9.8及以上的版本為用戶提供了限速的功能:
rate-limit {
responses-per-second 5;
window 5;
};
- DNS Cache 污染
這個可能不屬於DDOS攻擊,但是也把它放在這里。
Cache污染是指權威域名服務器返回給遞歸域名服務器的資源記錄被黑客劫持,換成了他們的資源記錄,這個資源記錄會在遞歸域名服務器中存在TTL時間,在這個時間內,用戶的DNS請求得到的就是虛假的合法信息。通過這種方法,黑客可以把一個網站的訪問引流到另一個網站。
這篇文章詳細介紹了DNS cache污染是如何工作的。
上面文章的作者提出的預防的解決辦法是亡羊補牢,當發現這種攻擊時,用TCP發起DNS請求。。。。汗。還有中方法是發現Cache污染的時候刷新(flush)一遍cahce,
實際上,DNS整套協議在流轉的過程中的每個環節都有可能遭受攻擊,DNS協議的幾種操作和可能存在的安全威脅見這里(第四節)。
下圖是Internet網絡上面遭受的攻擊種類,這些攻擊涉及到了四層到七層的所有常用的協議。
防患未然才是最有效的預防方法,時刻對安全保持一顆敬畏的心才會做好事情。
Enjoy~