原文連接html
背景:在一次CTO面試過程當中,忽然問起了我,平時開發過程當中有沒有遇到過DNS劫持的狀況,啊,啥是DNS劫持?腦子忽然蹦出全部的DNS的知識點,回憶以前工做遇到的問題,很凌亂,最終回答不知道。努力學習的我回來抓緊作功課,因而纔有了這篇文章。react
DNS劫持(DNS Hijacking):又被稱爲域名劫持,DNS重定向(DNS direaction),是一種DNS攻擊方式。便是DNS查詢沒有獲得正確的解析,以至引導user訪問到惡意的網站,從而竊取用戶隱私,或者進行某些惡意的操做。linux
開始正式介紹DNS劫持以前,先與HTTP劫持作一個比較,可能有助於有些同窗對下文更容易理解更深刻一點。ios
DNS劫持現象:你輸入一個google.com網址,出來的是百度的頁面git
HTTP劫持現象:訪問着github的頁面,右下角出現了一個格格不入的廣告彈窗github
比如:web
DNS劫持是你想去機場的時候,把你給丟到火車站。 HTTP劫持是你去機場途中,有人給你塞小廣告、面試
理解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)了
從www.tungee.com
到 49.99.141.230
的過程就叫作域名解析,域名解析須要由專門的域名解析服務器來完成
注:通常的網站會選擇放在虛擬主機,且在主機上放置了不少個網站,而每一個網站綁定1個或以上域名。雖然主機上有多個站點,但當用戶訪問某個站點時,服務器會根據http報文信息(域名),訪問對應站點的部署目錄,從而實現一臺服務器上配置多個站點,即便有多個網站,也不會相互干擾。但使用IP訪問,主機不知道用戶訪問的具體目錄,請求便會出現異常狀況。)
從上圖(圖片來源網絡,如侵權請聯繫刪)能夠大概看出大致的步驟:
客戶端(瀏覽器)發送一個域名(例如www.tungee.com
)解析請求,先檢查瀏覽器緩存中有沒有對應域名解析的IP地址,若是有直接返回。
若是用戶瀏覽器緩存沒有查到的話,會先到操做系統的hosts文件中查找(據說ios設備沒有該步驟,待驗證),有對應的域名IP地址的話直接返回。
若是本地hosts文件沒有查到,會向外網的本地區域名服務器(Local DNS)發起查詢請求,本地服務器收到請求以後,會先查詢本地緩存,若是有的話會直接返回。
本地區域名服務器一般性能都會很好,它們通常都會緩存域名解析結果,固然緩存時間是受域名的失效時間控制的,通常緩存空間不是影響域名失效的主要因素。大約90%的域名解析都到這裏就已經完成了,因此LDNS主要承擔了域名的解析工做。
若是LDNS緩存沒有結果的話,會向跟域名服務器發起請求,根域名(Root Server)返回來的是一個所查詢域(根的子域,例如.com
)的主域名服務器(gTLD Server)的地址,gTLD是國際頂級域名服務器,如.com,.cn、.org等。據說全球只有13臺左右。
接着,本地服務器再向上一步返回來的域名服務器下發送請求。
接受請求的gTLD服務器查找並返回此域名對應的Name Server域名服務器的地址,這個Name Server一般就是你註冊的域名服務器,例如你在某個域名服務提供商申請的域名,那麼這個域名解析任務就由這個域名提供商的服務器來完成。
獲得了Name Server 服務器地址以後,Local DNS 再次向Name server 服務器發送請求,Name Server提供商是你申請的域名提供商,所以Name Server域名服務器會查詢存儲的域名和IP的映射關係表,正常狀況下都根據域名獲得目標IP記錄。
Local DNS 獲得了www.tungee.com
對應的ip地址與TTL值(Time to live 的縮寫,也就是上面的588這個值)以後,會根據這TTL值緩存這個域名與ip的對應關係。
最終把該ip地址返回給瀏覽器
雖然最終只返回了一個ip地址,可是查詢的過程仍是很是複雜的,分多個步驟,利用dig命令(windows 下須要額外裝dig工具)能夠大概知道這個查詢過程。
dig tungee.com
複製代碼
隨後會出現如下幾節信息
第一段是dig工具版本,查詢參數和統計信息
第二段是查詢內容
第三段是DNS服務器的答覆
上面結果顯示,tungee有1個A記錄,即1個IP地址。 588是TTL值(Time to live 的縮寫),表示緩存時間,即588秒以內不用從新查詢。
第四段顯示 tungee.com的NS記錄(Name Server的縮寫),即哪些服務器負責管理tungee.com的DNS記錄
上面結果顯示 tungee.com共有2條NS記錄,即2個域名服務器,向其中任一臺查詢就能知道 tungee.com的IP地址是什麼。
第五段是上面2個域名服務器的IP地址,這是隨着前一段一塊兒返回的
第六段是DNS服務器的一些傳輸信息
上面結果顯示,本機的DNS服務器是192.168.1.253,查詢端口是53(DNS服務器的默認端口),以及迴應長度是418字節。
更多關於dig命令與解讀,請能夠看參考列表連接或者自行谷歌,百度。
上面第六段截圖中
;; SERVER: 202.96.128.86#53
複製代碼
上面這個就是當前電腦的DNS服務器ip地址,這個DNS服務器的ip地址是自動分配(固然也能夠自定義)的,當用戶聯網時,寬帶運營商會分配一個DNS服務器,這個服務器一般狀況下時最快,距離最近的服務器。
上圖就是window電腦的當前電腦分配的DNS服務器,Mac,Linux系統DNS服務器IP地址保存在/etc/resolv.conf文件中
若是用戶由於某些網絡問題,安全問題須要手動設置DNS服務器也是能夠的
上圖就是window設置DNS服務器頁面,關於手動設置公共DNS服務器IP地址能夠閱讀公共DNS哪家強?
從查詢的步驟來看,域名是有層級的。
舉個例子來講,
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
咱們已經介紹過了域名的層級,那是具體怎麼樣分級查詢的呢
咱們能夠利用dig命令來顯示每一級的域名記錄查詢過程。
dig +trace www.tungee.com
複製代碼
每一級域名都有本身的NS記錄,NS記錄指向(後面跟着)就是該級的域名服務器,這些服務器知道下一級域名的各類記錄(類比電話簿,記錄着域名與ip地址映射關係)。
大體分級查詢的過程以下:
仔細琢磨,你就會發現本地DNS服務器怎麼知道根域名的ip地址呢?
回答是根域名服務器目前全球一共只有十三臺,從下面截圖能夠看出從
a.root-servers.net.
到m.root-servers.net.
,它們對應的ip地址,已經內置在本地DNS服務器中了
上面的截圖大概分紅4段
1.第一段
根據內置的根域名服務器IP地址,DNS服務器向全部這些IP地址發出查詢請求,詢問
www.tungee.com
的頂級域名服務器com的NS記錄。
2.第二段
接着向
j.root-server.net
返回來的13條.com
域名的NS記錄,同時也返回來每一條的IP地址(這裏並非每一條都顯示),而後DNS再向這些頂級域名服務器發出查詢請求。查詢tungee.com次級域名的NS記錄
3.第三段
一樣,最早返回來的結果的是
i.gtld-server.net
域名服務器查詢的結果,分別有2
條NS記錄,同時返回來每一條NS記錄對應的IP地址,DNS服務器再向以上兩臺NS服務器查詢tungee.com的主機ip地址
4.第四段
最早返回來的
dns10.hichina.com
這個NS域名服務器的查詢結果(A,Address,返回來的ip地址記錄),獲得ip地址以後,DNS服務器緩存起來,返回來瀏覽器
從上面能夠知道DNS解析原理,解析步驟,在dns解析過程當中,有哪一環節出現問題的話,均可能會致使DNS解析錯誤,致使客戶端(瀏覽器)獲得一個假的ip地址,從而引導用戶訪問到這個冒名頂替,惡意的網站。
DNS劫持帶來的危害:
1.釣魚詐騙
2.網上購物支付安全
3.泄露我的隱私
4.輕則影響網速,重則不能上網
下面大概說幾種DNS劫持方法
1.本機DNS劫持
攻擊者經過某些手段使用戶的計算機感染上木馬病毒,或者惡意軟件以後,惡意修改本地DNS配置,好比修改本地hosts文件,緩存等
2. 路由DNS劫持
不少用戶默認路由器的默認密碼,攻擊者能夠侵入到路由管理員帳號中,修改路由器的默認配置
3.攻擊DNS服務器
直接攻擊DNS服務器,例如對DNS服務器進行DDOS攻擊,能夠是DNS服務器宕機,出現異常請求,還能夠利用某些手段感染dns服務器的緩存,使給用戶返回來的是惡意的ip地址
4.......
就這上面的劫持方法,說幾種方法手段
1.增強本地計算機病毒檢查,開啓防火牆等,防止惡意軟件,木馬病毒感染計算機
2.改變路由器默認密碼,防止攻擊者修改路由器的DNS配置指向惡意的DNS服務器
3.企業的話能夠準備兩個以上的域名,一旦一個域名掛掉,還可使用另外一個
4.用HTTP DNS 代替 Local DNS
對於DNS劫持,每每單靠我的設置很難解決,若是已經出現了劫持現象的話,對電腦進去殺毒,清理,檢查hosts文件,覈查網絡設置的DNS配置(可使用寫公共的DNS服務器)
最後,查了不少資料才寫了這篇文章,補充本身這方面的知識點,後面考慮繼續寫關於web安全--ddos攻擊,xss,csrf等
下面是參考,補充文章,感謝如下文章做者提供的思路