首先回顧一下DDoS攻擊的原理。DDoS是Distributed Denial of Service的簡稱,即分布式拒絕服務(wù)攻擊,其利用處于不同位置的足夠數(shù)量的僵尸主機(jī)產(chǎn)生數(shù)目巨大的數(shù)據(jù)包對一個或多個目標(biāo)實(shí)施DoS攻擊,耗盡受害端的網(wǎng)絡(luò)帶寬、系統(tǒng)資源,使受害主機(jī)或網(wǎng)絡(luò)喪失提供正常網(wǎng)絡(luò)服務(wù)的能力。
【傳統(tǒng)網(wǎng)絡(luò)對DDoS攻擊的防御】
那傳統(tǒng)網(wǎng)絡(luò)是怎么對DDoS攻擊進(jìn)行安全防御的呢?簡單來講,傳統(tǒng)安全技術(shù)的防護(hù)手段,通常是代替server端來響應(yīng)client發(fā)過來的請求,并通過client的下一步動作有無跟進(jìn)繼續(xù)請求,來判斷該請求是否來自真實(shí)用戶。因?yàn)槿绻侨怆u發(fā)起的攻擊行為,通常不會再有下一步的動作被匹配到。而如果某個特定的client IP一旦被認(rèn)定為是真實(shí)請求的IP,則該IP會被放入對應(yīng)的“白名單池”,后續(xù)一段時(shí)間內(nèi),當(dāng)該IP繼續(xù)請求時(shí),便會被認(rèn)為是合法的。可參考如下示意圖:

這只是一個簡單的原理模擬圖,有些在策略上可能不一定適用黑白名單IP list。
【傳統(tǒng)權(quán)威DNS服務(wù)器對DDoS的防御手段】
知道了DDoS的常用防御手段,我們再來說說,對于傳統(tǒng)的權(quán)威DNS服務(wù)器,是怎么防護(hù)DDoS攻擊的。對于權(quán)威DNS而言,默認(rèn)的請求都是基于UDP,而且DNS協(xié)議里面明確說明了DNS服務(wù)器可以限制為TCP提供的資源,所以權(quán)威DNS的DDoS攻擊防御最重要的是如何防住UDP攻擊。 但是UDP DDoS防御的最大的問題莫過于UDP沒有會話,不能通過包的交互來判斷某個請求是否為攻擊行為,僅僅查看某個DNS數(shù)據(jù)報(bào)文是不可能區(qū)分是否為攻擊請求或者真實(shí)用戶請求的。因此傳統(tǒng)安全技術(shù)首要地工作就在于需要將缺乏會話交互的UDP一來一回請求轉(zhuǎn)換成為具有會話記錄的UDP多來多回請求,它們會利用DNS協(xié)議的特點(diǎn)采用如下技術(shù)進(jìn)行防御:
1、CNAME重傳
利用DNS的特性,遞歸請求具有迭代查詢一直到獲取最終結(jié)果的特點(diǎn),直接代替DNSserver給client返回一個偽造的唯一隨機(jī)字符串cname域名,并根據(jù)該源IP是否繼續(xù)發(fā)起針對該cname域名的請求來判定,該IP是否為正常請求。很顯然,如果某個IP馬上跟進(jìn)發(fā)起了該cname域名的請求,則該IP是可被信任的;相對地,如果某個IP在規(guī)定的超時(shí)時(shí)間內(nèi)并沒有發(fā)起針對該cname域名的請求,則該IP將被判定為攻擊者
2、TC重傳
利用DNS的特性,在DNS請求client遇到DNS應(yīng)答flag字段中TC標(biāo)記為1時(shí)必然會發(fā)起TCP DNS請求的特點(diǎn),直接代替DNS server給client返回一個偽造的空應(yīng)答但該應(yīng)答flag字段中TC標(biāo)記為1,并根據(jù)該源IP是否繼續(xù)發(fā)起針對該域名的TCP的DNS請求來判定,該IP是否為正常請求。很顯然,如果某個IP馬上跟進(jìn)發(fā)起了TCP的DNS請求,則該IP是可被信任的;相對地,如果某個IP在規(guī)定的超時(shí)時(shí)間內(nèi)并沒有發(fā)起針對的TCP請求,則該IP將被判定為攻擊者。
3、首包丟棄
利用DNS的特性,在DNS請求client在超時(shí)時(shí)間內(nèi)沒有收到DNS應(yīng)答時(shí)會重發(fā)該請求的特點(diǎn),傳統(tǒng)安全直接丟棄該首包請求,并根據(jù)該源IP是否繼續(xù)發(fā)起針對這個域名的第二次請求來判定,該IP是否為正常請求。很顯然,如果某個IP針對性地發(fā)起了第二次請求,則該IP是可被信任的;相對地,如果某個IP在規(guī)定的超時(shí)時(shí)間內(nèi)并沒有發(fā)起第二次請求,則該IP將被判定為攻擊者。
由以上信息我們可以知道,這三種手段其原理都是通過將原來的DNS的UDP一來一回請求轉(zhuǎn)換成為具有會話記錄的UDP多來多回請求,并通過判斷第二次請求的特點(diǎn)來判定該源IP是否為真實(shí)用戶訪問行為或者攻擊行為,并隨之進(jìn)行對應(yīng)的白名單/黑名單操作。

【傳統(tǒng)方案在權(quán)威DNS防護(hù)中存在的問題】
以上的傳統(tǒng)方案是不是就能完全保護(hù)我們的權(quán)威DNS了呢?其實(shí)還是存在一些防護(hù)的問題。以下我們總結(jié)了權(quán)威DNS防護(hù)可能遇到的問題:
1、 首先從首包丟棄來講,這是在權(quán)威DNS防御中基本沒有被采用的技術(shù),原因主要是遞歸DNS在遇到權(quán)威查詢請求被丟棄時(shí)會根據(jù)SRTT算法另外選擇其他的權(quán)威服務(wù)器,導(dǎo)致傳統(tǒng)安全基本上無法收到所謂的“第二次請求”,因此誤殺的概率極高。同時(shí)權(quán)威丟棄遞歸發(fā)過來的查詢,會對遞歸服務(wù)器的資源占用造成嚴(yán)重影響,這種情況下遞歸服務(wù)器可能會根據(jù)自身保護(hù)的策略直接丟棄該域名的正常請求,有可能造成更嚴(yán)重的故障。
2、 其次是TC重傳,相對于CNAME重傳的策略,TC重傳主要的好處在于并沒有從數(shù)據(jù)內(nèi)容信息上去進(jìn)行篡改,并沒有“偽造”對應(yīng)的應(yīng)答;而重大的缺陷在于需要安全服務(wù)DNSserver端支持TCP的請求,這個在性能上是非常大的考驗(yàn),帶來的被打癱的風(fēng)險(xiǎn)反而會進(jìn)一步加大。另外,有一部分ISP的 LocalDNS根本不支持TCP也是一個重要的問題。
3、 再來談CNAME重傳,前文提到了CNAME重傳最大的問題在于“偽造”了一個虛構(gòu)的應(yīng)答,正常流程中這個“偽造”的應(yīng)答只起到中間傳遞的結(jié)果不會有其他方面的影響,但是現(xiàn)實(shí)情況中,ISP側(cè)的各種“緩存遞歸分離”“緩存加速應(yīng)答”技術(shù)都會對正常的流程進(jìn)行篡改,導(dǎo)致前面提到的這個“偽造”的結(jié)果被當(dāng)成正確的結(jié)果直接回給終端用戶;更要命地是,ISP側(cè)的DNS各種“優(yōu)化TTL”的技術(shù)還會把這種問題嚴(yán)重放大,最終導(dǎo)致嚴(yán)重的故障。
總結(jié),通過上面針對性的描述,我們大概知道了這些方法用在DNS上都有或多或少的問題。當(dāng)然,其實(shí)還包括一些安全集群DNS會話狀態(tài)數(shù)據(jù)一致性、互聯(lián)網(wǎng)原生丟包帶來的黑白名單誤殺、偽造IP攻擊影響真實(shí)IP帶來的誤殺等各種情況下的誤殺,這部分誤殺帶來的影響也不可小視。
【權(quán)威DNS攻擊的防護(hù)重點(diǎn)】
說了這么多,權(quán)威DNS究竟如何防?說真的,DNS系統(tǒng)本身的優(yōu)異性能非常關(guān)鍵。打鐵還需自身硬,還是建議選擇一款性能優(yōu)異的服務(wù)器作為權(quán)威的DNS服務(wù)器。從原理上來講,傳統(tǒng)安全把缺乏會話交互的UDP一來一回請求轉(zhuǎn)換成為具有會話記錄的UDP多來多回的策略比起單純的回復(fù)一個DNS應(yīng)答更耗費(fèi)計(jì)算資源。比如在同樣的性能條件資源下,回復(fù)一個所謂的“cname應(yīng)答”或者“tc應(yīng)答”,還不如直接回復(fù)原生的DNS應(yīng)答,粗略比較下來兩者之間耗費(fèi)CPU指令集并沒有什么差別。當(dāng)然前提最重要的是DNS系統(tǒng)要有卓越的性能,超大的帶寬,有能力媲美安全服務(wù)器甚至優(yōu)于安全服務(wù)器。阿里云解析DNS具備單機(jī)千萬級QPS,遍布全球的超大規(guī)模集群,具備anycast的架構(gòu)、依托阿里巴巴大容量、穩(wěn)定的基礎(chǔ)網(wǎng)絡(luò),能夠輕松抵抗過億級的DDoS攻擊。阿里云解析DNS絕對值得你的信賴。
