5.DNS劫持原理

DNS的工作原理

DNS分爲ClientServerClient扮演發問的角色,也就是問Server一個Domain Name,而Server必須要回答此Domain Name的真正IP地址。而當地的DNS先會查自己的資料庫。如果自己的資料庫沒有,則會往該DNS上所設的的DNS詢問,依此得到答案之後,將收到的答案存起來,並回答客戶。

DNS服務器會根據不同的授權區(Zone),記錄所屬該網域下的各名稱資料,這個資料包括網域下的次網域名稱及主機名稱。

  在每一個名稱服務器中都有一個快取緩存區(Cache),這個快取緩存區的主要目的是將該名稱服務器所查詢出來的名稱及相對的IP地址記錄在快取緩存區中,這樣當下一次還有另外一個客戶端到次服務器上去查詢相同的名稱 時,服務器就不用在到別臺主機上去尋找,而直接可以從緩存區中找到該筆名稱記錄資料,傳回給客戶端,加速客戶端對名稱查詢的速度。例如:

  當DNS客戶端向指定的DNS服務器查詢網際網路上的某一臺主機名稱 DNS服務器會在該資料庫中找尋用戶所指定的名稱 如果沒有,該服務器會先在自己的快取緩存區中查詢有無該筆紀錄,如果找到該筆名稱記錄後,會從DNS服務器直接將所對應到的IP地址傳回給客戶端 ,如果名稱服務器在資料記錄查不到且快取緩存區中也沒有時,服務器首先會纔會向別的名稱服務器查詢所要的名稱。例如:

DNS客戶端向指定的DNS服務器查詢網際網路上某臺主機名稱,當DNS服務器在該資料記錄找不到用戶所指定的名稱時,會轉向該服務器的快取緩存區找尋是否有該資料 ,當快取緩存區也找不到時,會向最接近的名稱服務器去要求幫忙找尋該名稱的IP地址 ,在另一臺服務器上也有相同的動作的查詢,當查詢到後會回覆原本要求查詢的服務器,該DNS服務器在接收到另一臺DNS服務器查詢的結果後,先將所查詢到的主機名稱及對應IP地址記錄到快取緩存區中 ,最後在將所查詢到的結果回覆給客戶端

常見的DNS攻擊包括:

1) 域名劫持

  通過採用黑客手段控制了域名管理密碼和域名管理郵箱,然後將該域名的NS紀錄指向到黑客可以控制的DNS服務器,然後通過在該DNS服務器上添加相應域名紀錄,從而使網民訪問該域名時,進入了黑客所指向的內容。

  這顯然是DNS服務提供商的責任,用戶束手無策。

2) 緩存投毒

  利用控制DNS緩存服務器,把原本準備訪問某網站的用戶在不知不覺中帶到黑客指向的其他網站上。其實現方式有多種,比如可以通過利用網民ISP端的DNS緩存服務器的漏洞進行攻擊或控制,從而改變該ISP內的用戶訪問域名的響應結果;或者,黑客通過利用用戶權威域名服務器上的漏洞,如當用戶權威域名服務器同時可以被當作緩存服務器使用,黑客可以實現緩存投毒,將錯誤的域名紀錄存入緩存中,從而使所有使用該緩存服務器的用戶得到錯誤的DNS解析結果。

  最近發現的DNS重大缺陷,就是這種方式的。只所以說是“重大”缺陷,據報道是因爲是協議自身的設計實現問題造成的,幾乎所有的DNS軟件都存在這樣的問題。

3)DDOS攻擊

  一種攻擊針對DNS服務器軟件本身,通常利用BIND軟件程序中的漏洞,導致DNS服務器崩潰或拒絕服務;另一種攻擊的目標不是DNS服務器,而是利用DNS服務器作爲中間的“攻擊放大器”,去攻擊其它互聯網上的主機,導致被攻擊主機拒絕服務。

4) DNS欺騙

DNS欺騙就是攻擊者冒充域名服務器的一種欺騙行爲。

  原理:如果可以冒充域名服務器,然後把查詢的IP地址設爲攻擊者的IP地址,這樣的話,用戶上網就只能看到攻擊者的主頁,而不是用戶想要取得的網站的主頁了,這就是DNS欺騙的基本原理。DNS欺騙其實並不是真的“黑掉”了對方的網站,而是冒名頂替、招搖撞騙罷了。

  現在的Internet上存在的DNS服務器有絕大多數都是用bind來架設的,使用的bind版本主要爲bind 4.9.5+P1以前版本和bind 8.2.2-P5以前版本.這些bind有個共同的特點,就是BIND會緩存(Cache)所有已經查詢過的結果,這個問題就引起了下面的幾個問題的存在.

DNS欺騙

  在DNS的緩存還沒有過期之前,如果在DNS的緩存中已經存在的記錄,一旦有客戶查詢,DNS服務器將會直接返回緩存中的記錄

  防止DNS被攻擊的若干防範性措施

  互聯網上的DNS放大攻擊(DNS amplification attacks)急劇增長。這種攻擊是一種數據包的大量變體能夠產生針對一個目標的大量的虛假的通訊。這種虛假通訊的數量有多大?每秒鐘達數GB,足以阻止任何人進入互聯網。

  與老式的smurf attacks”攻擊非常相似,DNS放大攻擊使用針對無辜的第三方的欺騙性的數據包來放大通訊量,其目的是耗盡受害者的全部帶寬。但是,“smurf attacks”攻擊是向一個網絡廣播地址發送數據包以達到放大通訊的目的。DNS放大攻擊不包括廣播地址。相反,這種攻擊向互聯網上的一系列無辜的第三方DNS服務器發送小的和欺騙性的詢問信息。這些DNS服務器隨後將向表面上是提出查詢的那臺服務器發回大量的回覆,導致通訊量的放大並且最終把攻擊目標淹沒。因爲DNS是以無狀態的UDP數據包爲基礎的,採取這種欺騙方式是司空見慣的。

  這種攻擊主要依靠對DNS實施60個字節左右的查詢,回覆最多可達512個字節,從而使通訊量放大8.5倍。這對於攻擊者來說是不錯的,但是,仍沒有達到攻擊者希望得到了淹沒的水平。最近,攻擊者採用了一些更新的技術把目前的DNS放大攻擊提高了好幾倍。

  當前許多DNS服務器支持EDNSEDNSDNS的一套擴大機制,RFC 2671對次有介紹。一些選擇能夠讓DNS回覆超過512字節並且仍然使用UDP,如果要求者指出它能夠處理這樣大的DNS查詢的話。攻擊者已經利用這種方法產生了大量的通訊。通過發送一個60個字節的查詢來獲取一個大約4000個字節的記錄,攻擊者能夠把通訊量放大66倍。一些這種性質的攻擊已經產生了每秒鐘許多GB的通訊量,對於某些目標的攻擊甚至超過了每秒鐘10GB的通訊量。

  要實現這種攻擊,攻擊者首先要找到幾臺代表互聯網上的某個人實施循環查詢工作的第三方DNS服務器(大多數DNS服務器都有這種設置)。由於支持循環查詢,攻擊者可以向一臺DNS服務器發送一個查詢,這臺DNS服務器隨後把這個查詢(以循環的方式)發送給攻擊者選擇的一臺DNS服務器。接下來,攻擊者向這些服務器發送一個DNS記錄查詢,這個記錄是攻擊者在自己的DNS服務器上控制的。由於這些服務器被設置爲循環查詢,這些第三方服務器就向攻擊者發回這些請求。攻擊者在DNS服務器上存儲了一個4000個字節的文本用於進行這種DNS放大攻擊。

  現在,由於攻擊者已經向第三方DNS服務器的緩存中加入了大量的記錄,攻擊者接下來向這些服務器發送DNS查詢信息(帶有啓用大量回復的EDNS選項),並採取欺騙手段讓那些DNS服務器認爲這個查詢信息是從攻擊者希望攻擊的那個IP地址發出來的。這些第三方DNS服務器於是就用這個4000個字節的文本記錄進行回覆,用大量的UDP數據包淹沒受害者。攻擊者向第三方DNS服務器發出數百萬小的和欺騙性的查詢信息,這些DNS服務器將用大量的DNS回覆數據包淹沒那個受害者。

  如何防禦這種大規模攻擊呢?首先,保證你擁有足夠的帶寬承受小規模的洪水般的攻擊。一個單一的T1線路對於重要的互聯網連接是不夠的,因爲任何惡意的腳本少年都可以消耗掉你的帶寬。如果你的連接不是執行重要任務的,一條T1線路就夠了。否則,你就需要更多的帶寬以便承受小規模的洪水般的攻擊。不過,幾乎任何人都無法承受每秒鐘數GBDNS放大攻擊。

  因此,你要保證手邊有能夠與你的ISP隨時取得聯繫的應急電話號碼。這樣,一旦發生這種攻擊,你可以馬上與ISP聯繫,讓他們在上游過濾掉這種攻擊。要識別這種攻擊,你要查看包含DNS回覆的大量通訊(UDP端口53),特別是要查看那些擁有大量DNS記錄的端口。一些ISP已經在其整個網絡上部署了傳感器以便檢測各種類型的早期大量通訊。這樣,你的ISP很可能在你發現這種攻擊之前就發現和避免了這種攻擊。你要問一下你的ISP是否擁有這個能力。

  最後,爲了幫助阻止惡意人員使用你的DNS服務器作爲一個實施這種DNS放大攻擊的代理,你要保證你的可以從外部訪問的DNS服務器僅爲你自己的網絡執行循環查詢,不爲任何互聯網上的地址進行這種查詢。大多數主要DNS服務器擁有限制循環查詢的能力,因此,它們僅接受某些網絡的查詢,比如你自己的網絡。通過阻止利用循環查詢裝載大型有害的DNS記錄,你就可以防止你的DNS服務器成爲這個問題的一部分。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章