天天看點

DNS攻擊原理與防範

 編者注:這是一篇舊文,來源已不可考,但是依舊有參考價值,分享給諸君。

  随着網絡的逐漸普及,網絡安全已成為internet路上事實上的焦點,它關系着internet的進一步發展和普及,甚至關系着internet的生存。可喜的是我們那些網際網路專家們并沒有令廣大internet使用者失望,網絡安全技術也不斷出現,使廣大網民和企業有了更多的放心,下面就網絡安全中的主要技術作一簡介,希望能為網民和企業在網絡安全方面提供一個網絡安全方案參考。

DNS攻擊原理與防範

<a target="_blank"></a>

  dns分為client和server,client扮演發問的角色,也就是問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位址記錄到快取緩存區中 ,最後在将所查詢到的結果回複給用戶端

  通過采用黑客手段控制了域名管理密碼和域名管理郵箱,然後将該域名的ns紀錄指向到黑客可以控制的dns伺服器,然後通過在該dns伺服器上添加相應域名紀錄,進而使網民通路該域名時,進入了黑客所指向的内容。

  這顯然是dns服務提供商的責任,使用者束手無策。

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

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

  一種攻擊針對dns伺服器軟體本身,通常利用bind軟體程式中的漏洞,導緻dns伺服器崩潰或拒絕服務;另一種攻擊的目标不是dns伺服器,而是利用dns伺服器作為中間的“攻擊放大器”,去攻擊其它網際網路上的主機,導緻被攻擊主機拒絕服務。

  dns欺騙就是攻擊者冒充域名伺服器的一種欺騙行為。

  原理:如果可以冒充域名伺服器,然後把查詢的ip位址設為攻擊者的ip位址,這樣的話,使用者上網就隻能看到攻擊者的首頁,而不是使用者想要取得的網站的首頁了,這就是dns欺騙的基本原理。dns欺騙其實并不是真的“黑掉”了對方的網站,而是冒名頂替、招搖撞騙罷了。

  網際網路上的dns放大攻擊(dns amplification attacks)急劇增長。這種攻擊是一種資料包的大量變體能夠産生針對一個目标的大量的虛假的通訊。這種虛假通訊的數量有多大?每秒鐘達數gb,足以阻止任何人進入網際網路。

  與老式的“smurf attacks”攻擊非常相似,dns放大攻擊使用針對無辜的第三方的欺騙性的資料包來放大通訊量,其目的是耗盡受害者的全部帶寬。但是,“smurf attacks”攻擊是向一個網絡廣播位址發送資料包以達到放大通訊的目的。dns放大攻擊不包括廣播位址。相反,這種攻擊向網際網路上的一系列無辜的第三方dns伺服器發送小的和欺騙性的詢問資訊。這些dns伺服器随後将向表面上是提出查詢的那台伺服器發回大量的回複,導緻通訊量的放大并且最終把攻擊目标淹沒。因為dns是以無狀态的udp資料包為基礎的,采取這種欺騙方式是司空見慣的。

  這種攻擊主要依靠對dns實施60個位元組左右的查詢,回複最多可達512個位元組,進而使通訊量放大8.5倍。這對于攻擊者來說是不錯的,但是,仍沒有達到攻擊者希望得到了淹沒的水準。最近,攻擊者采用了一些更新的技術把目前的dns放大攻擊提高了好幾倍。

  目前許多dns伺服器支援edns。edns是dns的一套擴大機制,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線路就夠了。否則,你就需要更多的帶寬以便承受小規模的洪水般的攻擊。不過,幾乎任何人都無法承受每秒鐘數gb的dns放大攻擊。

  是以,你要保證手邊有能夠與你的isp随時取得聯系的應急電話号碼。這樣,一旦發生這種攻擊,你可以馬上與isp聯系,讓他們在上遊過濾掉這種攻擊。要識别這種攻擊,你要檢視包含dns回複的大量通訊(源udp端口53),特别是要檢視那些擁有大量dns記錄的端口。一些isp已經在其整個網絡上部署了傳感器以便檢測各種類型的早期大量通訊。這樣,你的isp很可能在你發現這種攻擊之前就發現和避免了這種攻擊。你要問一下你的isp是否擁有這個能力。

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

 原文釋出時間為:2014-04-13

本文來自雲栖社群合作夥伴“linux中國”

繼續閱讀