針對DNS的DDoS 攻擊(分布式拒絕服務攻擊)現已成為比較常見的極具破壞力的互聯網攻擊方式之一:
· 今年1月,國內出現大規模網站無法存取的事件,原因是DNS被劫持。當地用戶連到許多以.com與.net為域名的網站時,會被導引到美國Dynamic Internet Technologies公司的IP地址。
· 3月初,谷歌提供給大眾的公用DNS服務器8.8.8.8,遭到DNS劫持的持續時間長達22分鐘,當時所有使用該DNS服務的網絡流量都被綁架,傳到巴西和委內瑞拉境內。
· 3月底、4月初,谷歌DNS服務又發生遭到土耳其網絡供貨商的攔截事件。對方設立了DNS服務器假裝是谷歌DNS,挾持當地的網絡聯機使用假冒的谷歌DNS。
總體而言,DNS攻擊事件未來仍將不斷發生,而且遭遇的頻率將越來越頻繁,又很難預防與實時反應。他們是如何實施攻擊的?我們又該如何防范呢?
欺騙式攻擊
利用DNS基礎架構來制造DDoS攻擊其實相當容易:攻擊者向互聯網上的域名服務器發送請求,然后域名服務器做出反應。
攻擊者偽裝成目標對象的地址而不是基于自身IP地址來發送請求,這些目標對象包括:網頁服務器、路由器、另外一個域名服務器、或者互聯網上的任何一個節點。
DNS欺騙請求相當容易,因為這些請求通常通過UDP(無連接用戶數據報協議)進行傳輸。從任意IP地址發送DNS請求相當簡單,如同在明信片上寫上回信地址一樣。
盡管容易,欺騙請求還不足以使攻擊對象癱瘓,如果對這些請求的回應并不比這些請求自身大的話,攻擊者將把大量欺騙請求發送到目標對象上。為了最大限度的對目標對象造成傷害,對每個查詢應該獲得一個非常大的回應,才可以輕松造成影響。
采用DNS擴展名機制 (EDNS0)后,DNS自1999年以來得到了極大擴展,基于UDP 的DNS信息已經可以攜帶大量數據。一個回應便能達到4096個字節,而絕大多數請求則在長度上不超過100 個字節。
較早之前,要在互聯網Namespace里找到一個較大的回應相對困難,但是現在,各大企業已經開始部署DNSSEC(域名系統安全擴展),實現較大回應已經變得很容易。DNSSEC將密鑰和數字簽名存儲在Namespace里記錄在冊,這些都會起到積極作用。
現在,充斥網絡的圖片攻擊者正在從你的網頁服務器IP地址上向isc.org 域名服務器發送欺騙請求。每個44字節請求,你的網頁服務器都會收到4077字節的回應,增大了近93倍。
現在讓我們快速計算一下,就能知道這種狀況有多糟。假設每個攻擊者接入互聯網的帶寬都是1Mbps,每秒他可以發出2840條44字節的請求,那這個請求數據流就會帶來近93Mbps的流量送達你的網頁服務器,而每11次攻擊就會達到1G。
那么,那些反社會的攻擊者到哪里去找到這10個幫兇來共同完成這次攻擊呢?事實上,他們不需要找任何人,他們會用到一種由成千上萬臺電腦組成的僵尸網絡來完成攻擊。
結果是毀滅性的。在一家DDoS攻擊緩解公司Prolexic發布的全球DDoS攻擊季報中我們可以看到,最新發現的一個基于DNS的客戶受攻擊案例,其流量達到了167Gbps,此外,Prolexic 在報告中還指出,DDoS攻擊所占用的帶寬平均每個季度已經增加了 718 %,達到48Gbps。
但是,我們能不能對isc.org域名服務器進行修正,讓它能夠識別來自同一IP地址的相同數據在不停發送請求呢?難道這些攻擊真的無法遏制嗎?
當然能,但絕非只有isc.org域名服務器才可以被攻擊者利用來放大攻擊流量,還有其他權威域名服務器,但受此影響最大的要算是開放式遞歸域名服務器了。
開放式遞歸域名服務器就是一種簡單的域名服務器,它可以對任一IP地址發來的遞歸請求進行處理。我可以把請求 forisc.org的數據發給它,然后它會給我一回應,你也可以做。
互聯網上不應有太多開放式遞歸域名服務器。遞歸域名服務器的作用,就是代表DNS用戶在互聯網Namespace上查詢數據,就如同在筆記本電腦或者智能手機上查詢數據那樣。通常情況下,網管員建立遞歸域名服務器,供某一特定群體使用(就像您以及您的團隊)。除非這些社區使用的是OpenDNS 和谷歌公共DNS,但設置這樣的公共開放式DNS服務,其目的并不是供諸如摩爾多瓦這樣的國家來使用。那些具有公眾精神、安全意識且能力最強的管理員,可以在他們的遞歸域名服務器上設置接入控制,以此來限制對授權系統的使用。
既然如此,究竟多大的問題,我們才可以啟用遞歸域名服務器呢?答案是很大。Open Resolver Project收集了總共3300萬個開放式遞歸域名服務器的名單。黑客們可以向許多服務器發送欺騙請求,是因為他們更愿意將isc.org數據注入你的網頁服務器、域名服務器、邊界路由器并最終導致他們癱瘓。
以上就是基于DNS的DDoS攻擊的工作原理,但謝天謝地,我們還是有一些方法來與它們相抗衡的。
如何渡過危機
你首先要做的是在你的DNS基礎架構上加裝設備,借此來監測是否正處在攻擊之中。有好多公司根本不知道他們接收到的請求究竟是什么,所以他們就無法第一時間知道他們正在受到攻擊。
利用BIND的內置統計支持功能,便能輕易實現對請求的判斷。比如,BIND域名服務器在執行mdc stats命令或者可配置統計區間的時候,會將數據注入其統計文件,我們可以依據數據來檢視查詢速率、套接字錯誤以及其它攻擊跡象,如果不能確定攻擊如何發展也不要擔心,因為對DNS進行監測的部分目的就是要建立起一個標準,以此來判斷何謂異常狀態。
下一步,讓我們看一下面向互聯網的基礎設施。不要將自己囿于外部權威域名服務器;檢查一下交換機、路由器、防火墻以及網絡連接。檢查是否有單點故障。要確定你是否可以方便并低成本地地避免出現問題。
如果可能的話,需要將外部權威域名服務器所分布的廣大區域列入你的考慮范圍,這可幫你避免單點故障,同時在沒有遭受攻擊的情況下也對你大有裨益。遞歸域名服務器負責解決你所在地區的域名問題,它將查詢距離最近的權威域名服務器。所以,跨區分布可以幫你向客戶和代理商提供更好更優的性能。如果在某些地區你的客戶分布比較集中,那就在這些客戶附近配置一臺權威域名服務器以做出快速響應。
或許,抵御DDoS攻擊的根本之道便是過度配置基礎設施。好消息是,要實現域名服務器的過度配置已經不再貴不可及,一臺性能優良的域名服務器一秒鐘可以處理數十萬條請求。
究竟這種過度配置域名服務器要達到何種程度,這取決于:您在網上的價值?在面向網絡的基礎設施中,有沒有其他組件有可能在域名服務器之前出問題?很顯然,在邊界路由器或者防火墻之后花大價錢部署頂級DNS基礎設施并不可取,因為它們有可能會在域名服務器之前失效,一有風吹草動,影響必現。
了解一下現在最強大的DDoS對DNS設備的攻擊技術,將對你大有裨益,如果目的不是為錢的話,這種攻擊將超過100Gbps。
利用Anycast技術同樣也可以抗擊DDoS攻擊。Anycast技術允許多個服務器來共享某個單一IP地址,因此非常適合DNS。事實上,互聯網根域名服務器已經使用Anycast技術多年,用以向全球提供根區域數據,同時這一技術也允許根目錄與單一基于UDP的DNS 信息相匹配。
要部署Anycast技術,需要在支撐域名服務器的主機上運行動態路由協議,如OSPF或BGP。路由過程會廣播到相鄰路由器并路由到一個新的虛擬IP地址。該地址你的域名服務器可以監聽到。該路由過程應該足夠智能,當本地域名服務器停止響應的時候路由過程也停止廣播。你可以使用自建代碼將路由守護程序添加到健康域名服務器上,或者購買一款產品來替你完成。Infoblox 公司的NIOS軟件, 就包含了對Anycast的支持。
那么Anycast是如何抵御DDoS攻擊的呢?假設你有6個外部域名服務器,分屬于兩個Anycast群組(即三個服務器共用一個Anycast IP地址,剩下三個共用另外一個IP地址)。每個群組里有三個成員,分別來自美國、歐洲和亞洲。DDoS掛載在主服務器上,任何時候都可以通過網絡上任何一個點將流量發送到群組里的任何一臺服務器之上,發動攻擊。除非攻擊者能夠將足夠多的流量從北美、歐洲以及亞洲等地同時發送到你的基礎設施上,否則他們無法取得成功。
最后,有一種方法可同時利用廣闊的地區分布及Anycast技術,而無需過多投入資金,那就是使用基于云的DNS 提供商,諸如像Dyn和Neustar這樣的在其全球數據中心里運行Anycast域名服務器的公司。通過向其支付費用,你可以托管自己的空間并對你的數據請求做出答復。此外,你還可以繼續保持對空間數據的直接控制,那就是讓服務商配置域名服務器作為你空間的備用,然后將數據從一臺由你指定和內容管理的主域名服務器上進行加載。在你運行主域名服務器時一定要確保其處于隱藏狀態 (意味著沒有域名服務器記錄指向它),要不你就會面臨風險:攻擊者會將它看作單點故障從而實施攻擊。在使用基于云的DNS提供商的時候你需要記住這一點:大多數費用或者至少部分費用是基于他們的域名服務器收到的來自你的空間數據的請求次數計算的。在DDoS攻擊中,這些請求上會陡然增加,完全失去控制,且對你有百害而無一利。所以一定要確保他們提供抵御DDoS攻擊的方案,但又不能由你來承擔流量費用。
如何避免成為DDoS攻擊的幫兇
現在,你已經知道該如何配制DNS基礎設備來抵御DDoS攻擊了。這一點很重要,可以保證你在DDoS攻擊中不會被挾持從而成為幫兇來禍害他人。
還記得DNS服務器是如何放大流量的嗎?攻擊者利用開放式遞歸域名服務器和權威域名服務器作為放大器,發送欺騙請求從而導致域名服務器做出的回應大小超過請求的100多倍,網絡上的任何設備都有可能成為其攻擊目標。沒有人想成為這種攻擊的目標,當然,更沒有人愿意成為幫兇。攻擊者會利用你的域名服務器資源和帶寬來發動攻擊。如果被攻擊對象采取措施阻斷了你的域名服務器與其網絡之間的流量,當攻擊結束后,被攻擊對象就無法再在你的空間里恢復原有域名了。
如果你運行的是開放式遞歸域名服務器,辦法很簡單:那就是不用。很少有公司會向遞歸查詢開放運營的域名服務器。OpenDNS 和谷歌公共DNS是兩個例外,但如果你能讀到我這篇文章,我想你應該不會這么做的。我們應該是在遞歸域名服務器中加裝接入控制,確保只有經過授權的請求才會用到它。藉此,我們可以將DNS請求限定在企業內網IP地址上,這樣在任何一個域名服務器上都可實現。(微軟的DNS服務器不支持基于IP地址的請求接入控制,給它什么它就讀取什么。)
如果你運行一臺權威域名服務器呢?很顯然,你無法限制那些向你發送請求的IP地址,或者只有一部分IP地址可以限制(你可以對那些明顯來自虛假IP地址的請求予以拒絕,比如RFC 1918 地址)。但是你可以不回應。
長期以來,活躍在互聯網上的兩位白帽黑客Paul Vixie 和 Vernon Schryver,發現利用權威域名服務器來放大某些請求模式便可發起DDoS攻擊。具體來說,攻擊者通過虛假IP地址(或地址塊)向域名服務器不停地發送同一請求,以求制造最大限度的攻擊。規范的遞歸服務器不會這樣做。當記錄回應時間已經耗盡時,回應已經被緩存并且不會再被發送請求。
Vixie和Schryver提出了一個很巧妙的機制,叫做應答頻率限制 (Response Rate Limiting, RRL),允許權威域名服務器追蹤有多少同樣的回應是針對同一請求發出的。當發送次數達到某個設定閾值時,域名服務器就在一段時間內停止發送回應。當權威域名服務器不再收到同一問題的請求時,就會終止對回應的壓制,其結果就是權威域名服務器將不再發送高于閾值的任何回應,因此DDoS再也不能發威了。
RRL已被內置在了BIND域名服務器版本9.9.4中,包括NSD和Knot在內的其他域名服務器現在都支持它。當域名服務器升級到全新版本,或者安裝了支持RRL的全新應用時,攻擊者將DNS基礎設施當作放大器的圖謀,就越來越難以實現。
希望以上的內容能夠幫助您了解DNS基礎設施是如何在DDoS攻擊中被攻擊和被利用的,希望您能夠知曉如何做才能更好的抵御DDoS攻擊,確保您的域名服務器不會在不知情的情況下被挾持和被利用。