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