你須要知道的「DNS劫持」--web安全篇(1)

原文連接html

1、前言

背景:在一次CTO面試過程當中,忽然問起了我,平時開發過程當中有沒有遇到過DNS劫持的狀況,啊,啥是DNS劫持?腦子忽然蹦出全部的DNS的知識點,回憶以前工做遇到的問題,很凌亂,最終回答不知道。努力學習的我回來抓緊作功課,因而纔有了這篇文章。react

DNS劫持(DNS Hijacking):又被稱爲域名劫持,DNS重定向(DNS direaction),是一種DNS攻擊方式。便是DNS查詢沒有獲得正確的解析,以至引導user訪問到惡意的網站,從而竊取用戶隱私,或者進行某些惡意的操做。linux

DNS劫持 vs HTTP劫持

開始正式介紹DNS劫持以前,先與HTTP劫持作一個比較,可能有助於有些同窗對下文更容易理解更深刻一點。ios

DNS劫持現象:你輸入一個google.com網址,出來的是百度的頁面git

HTTP劫持現象:訪問着github的頁面,右下角出現了一個格格不入的廣告彈窗github

比如:web

DNS劫持是你想去機場的時候,把你給丟到火車站。 HTTP劫持是你去機場途中,有人給你塞小廣告、面試

2、什麼是DNS

理解dns劫持以前,先來回憶一下dns是如何工做的shell

DNS(Domin Name System or Domain Name Service),域名解析系統(服務) :在網絡世界中,服務器(server)是經過IP 地址標識的,網站(client)經過端口80/443 (http/https)能夠訪問,所以有些網站(沒有限制IP訪問的)直接經過ip地址也是能夠訪問的。DNS的責任就是將難以記憶的IP地址映射成對用戶友好,易於記憶的域名。有了這樣的映射表(:notes:注意,不是一對一關係,一個服務器(IP)能夠對應多個域名),這樣用戶能夠直接輸入域名就能夠經過DNS 服務器查到對應的服務器IP地址。windows

好比咱們在終端命令 dig https://www.tungee.com/(探跡科技)就能夠看到對應的服務器IP(49.99.141.230)了

1560171939541

www.tungee.com49.99.141.230的過程就叫作域名解析,域名解析須要由專門的域名解析服務器來完成

注:通常的網站會選擇放在虛擬主機,且在主機上放置了不少個網站,而每一個網站綁定1個或以上域名。雖然主機上有多個站點,但當用戶訪問某個站點時,服務器會根據http報文信息(域名),訪問對應站點的部署目錄,從而實現一臺服務器上配置多個站點,即便有多個網站,也不會相互干擾。但使用IP訪問,主機不知道用戶訪問的具體目錄,請求便會出現異常狀況。)

3、DNS解析原理

1.查詢步驟

img

從上圖(圖片來源網絡,如侵權請聯繫刪)能夠大概看出大致的步驟:

  1. 客戶端(瀏覽器)發送一個域名(例如www.tungee.com)解析請求,先檢查瀏覽器緩存中有沒有對應域名解析的IP地址,若是有直接返回。

  2. 若是用戶瀏覽器緩存沒有查到的話,會先到操做系統的hosts文件中查找(據說ios設備沒有該步驟,待驗證),有對應的域名IP地址的話直接返回。

  3. 若是本地hosts文件沒有查到,會向外網的本地區域名服務器(Local DNS)發起查詢請求,本地服務器收到請求以後,會先查詢本地緩存,若是有的話會直接返回。

    本地區域名服務器一般性能都會很好,它們通常都會緩存域名解析結果,固然緩存時間是受域名的失效時間控制的,通常緩存空間不是影響域名失效的主要因素。大約90%的域名解析都到這裏就已經完成了,因此LDNS主要承擔了域名的解析工做。

  4. 若是LDNS緩存沒有結果的話,會向跟域名服務器發起請求,根域名(Root Server)返回來的是一個所查詢域(根的子域,例如.com)的主域名服務器(gTLD Server)的地址,gTLD是國際頂級域名服務器,如.com,.cn、.org等。據說全球只有13臺左右。

  5. 接着,本地服務器再向上一步返回來的域名服務器下發送請求。

  6. 接受請求的gTLD服務器查找並返回此域名對應的Name Server域名服務器的地址,這個Name Server一般就是你註冊的域名服務器,例如你在某個域名服務提供商申請的域名,那麼這個域名解析任務就由這個域名提供商的服務器來完成。

  7. 獲得了Name Server 服務器地址以後,Local DNS 再次向Name server 服務器發送請求,Name Server提供商是你申請的域名提供商,所以Name Server域名服務器會查詢存儲的域名和IP的映射關係表,正常狀況下都根據域名獲得目標IP記錄。

  8. Local DNS 獲得了www.tungee.com對應的ip地址與TTL值(Time to live 的縮寫,也就是上面的588這個值)以後,會根據這TTL值緩存這個域名與ip的對應關係。

  9. 最終把該ip地址返回給瀏覽器

2.dig+域名 命令的輸出解讀

雖然最終只返回了一個ip地址,可是查詢的過程仍是很是複雜的,分多個步驟,利用dig命令(windows 下須要額外裝dig工具)能夠大概知道這個查詢過程。

dig tungee.com 
複製代碼

隨後會出現如下幾節信息

1560173202968

  • 第一段是dig工具版本,查詢參數和統計信息

    1560173887079

  • 第二段是查詢內容

    1560174303420

  • 第三段是DNS服務器的答覆

    1560174346252

    上面結果顯示,tungee有1個A記錄,即1個IP地址。 588是TTL值(Time to live 的縮寫),表示緩存時間,即588秒以內不用從新查詢。

  • 第四段顯示 tungee.com的NS記錄(Name Server的縮寫),即哪些服務器負責管理tungee.com的DNS記錄

    1560174469165

    上面結果顯示 tungee.com共有2條NS記錄,即2個域名服務器,向其中任一臺查詢就能知道 tungee.com的IP地址是什麼。

  • 第五段是上面2個域名服務器的IP地址,這是隨着前一段一塊兒返回的

    1560174876546

  • 第六段是DNS服務器的一些傳輸信息

    1560174932404

    上面結果顯示,本機的DNS服務器是192.168.1.253,查詢端口是53(DNS服務器的默認端口),以及迴應長度是418字節。

更多關於dig命令與解讀,請能夠看參考列表連接或者自行谷歌,百度。

3.DNS服務器

上面第六段截圖中

;; SERVER: 202.96.128.86#53
複製代碼

上面這個就是當前電腦的DNS服務器ip地址,這個DNS服務器的ip地址是自動分配(固然也能夠自定義)的,當用戶聯網時,寬帶運營商會分配一個DNS服務器,這個服務器一般狀況下時最快,距離最近的服務器。

1560231821680

上圖就是window電腦的當前電腦分配的DNS服務器,Mac,Linux系統DNS服務器IP地址保存在/etc/resolv.conf文件中

若是用戶由於某些網絡問題,安全問題須要手動設置DNS服務器也是能夠的

1560236586648

上圖就是window設置DNS服務器頁面,關於手動設置公共DNS服務器IP地址能夠閱讀公共DNS哪家強?

4.域名的層級

從查詢的步驟來看,域名是有層級的。

舉個例子來講,www.tungee.com 真正的域名是www.tungee.com.root

由於全部的域名的根域名都是.root 因此默認都是省掉的

根域名的下一級叫作‘頂級域名’(top-level domain),好比.com .net

再下一級則是"次級域名"(second-level domain),好比www.tungee.com裏面的tungee,這級域名用戶是能夠註冊的。

再下一級是主機名(host),好比www.tungee.com裏面的www,又稱爲"三級域名",這是用戶在本身的域裏面爲服務器分配的名稱,是用戶能夠任意分配的。

主機名.次級域名.頂級域名.根域名

www.tungee.com.root

5.分級查詢的實例演示

咱們已經介紹過了域名的層級,那是具體怎麼樣分級查詢的呢

咱們能夠利用dig命令來顯示每一級的域名記錄查詢過程。

dig +trace www.tungee.com
複製代碼

每一級域名都有本身的NS記錄,NS記錄指向(後面跟着)就是該級的域名服務器,這些服務器知道下一級域名的各類記錄(類比電話簿,記錄着域名與ip地址映射關係)。

大體分級查詢的過程以下:

  • 首先本地DNS服務器向根域名發起請求,
  • "根域名服務器"查到"頂級域名服務器"的NS記錄和A記錄(IP地址)
  • 從"頂級域名服務器"查到"次級域名服務器"的NS記錄和A記錄(IP地址)
  • 從"次級域名服務器"查出"主機名"的IP地址

仔細琢磨,你就會發現本地DNS服務器怎麼知道根域名的ip地址呢?

回答是根域名服務器目前全球一共只有十三臺,從下面截圖能夠看出從a.root-servers.net.m.root-servers.net.,它們對應的ip地址,已經內置在本地DNS服務器中了

1560238945877

上面的截圖大概分紅4段

1.第一段

1560241035661

根據內置的根域名服務器IP地址,DNS服務器向全部這些IP地址發出查詢請求,詢問www.tungee.com的頂級域名服務器com的NS記錄。

2.第二段

1560241453237

接着向j.root-server.net返回來的13條.com域名的NS記錄,同時也返回來每一條的IP地址(這裏並非每一條都顯示),而後DNS再向這些頂級域名服務器發出查詢請求。查詢tungee.com次級域名的NS記錄

3.第三段

1560242314260

一樣,最早返回來的結果的是i.gtld-server.net域名服務器查詢的結果,分別有2條NS記錄,同時返回來每一條NS記錄對應的IP地址,DNS服務器再向以上兩臺NS服務器查詢tungee.com的主機ip地址

4.第四段

1560242780840

最早返回來的dns10.hichina.com這個NS域名服務器的查詢結果(A,Address,返回來的ip地址記錄),獲得ip地址以後,DNS服務器緩存起來,返回來瀏覽器

4、DNS劫持的方法以及防範

從上面能夠知道DNS解析原理,解析步驟,在dns解析過程當中,有哪一環節出現問題的話,均可能會致使DNS解析錯誤,致使客戶端(瀏覽器)獲得一個假的ip地址,從而引導用戶訪問到這個冒名頂替,惡意的網站。

DNS劫持帶來的危害:

1.釣魚詐騙

2.網上購物支付安全

3.泄露我的隱私

4.輕則影響網速,重則不能上網

1.DNS劫持的方法

img

下面大概說幾種DNS劫持方法

1.本機DNS劫持

攻擊者經過某些手段使用戶的計算機感染上木馬病毒,或者惡意軟件以後,惡意修改本地DNS配置,好比修改本地hosts文件,緩存等

2. 路由DNS劫持

不少用戶默認路由器的默認密碼,攻擊者能夠侵入到路由管理員帳號中,修改路由器的默認配置

3.攻擊DNS服務器

直接攻擊DNS服務器,例如對DNS服務器進行DDOS攻擊,能夠是DNS服務器宕機,出現異常請求,還能夠利用某些手段感染dns服務器的緩存,使給用戶返回來的是惡意的ip地址

4.......

2.DNS的防範

就這上面的劫持方法,說幾種方法手段

1.增強本地計算機病毒檢查,開啓防火牆等,防止惡意軟件,木馬病毒感染計算機

2.改變路由器默認密碼,防止攻擊者修改路由器的DNS配置指向惡意的DNS服務器

3.企業的話能夠準備兩個以上的域名,一旦一個域名掛掉,還可使用另外一個

4.用HTTP DNS 代替 Local DNS

對於DNS劫持,每每單靠我的設置很難解決,若是已經出現了劫持現象的話,對電腦進去殺毒,清理,檢查hosts文件,覈查網絡設置的DNS配置(可使用寫公共的DNS服務器)

最後,查了不少資料才寫了這篇文章,補充本身這方面的知識點,後面考慮繼續寫關於web安全--ddos攻擊,xss,csrf等

Reference

下面是參考,補充文章,感謝如下文章做者提供的思路

相關文章
相關標籤/搜索