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