DNS 黑魔法傳送門

目錄

  1. 前言
  2. 第一步:瀏覽器對 DNS 解析
  3. 第二步:本地 hosts文件 DNS解析
  4. 第三步:本地域名解析服務器 DNS 解析
  5. 第四步:根域名解析服務器 DNS 解析
  6. 第五步:gTLD服務器 DNS 解析
  7. 第六步:權威域名服務器 DNS 解析
  8. 第七步:返回緩存
  9. DNS 解析原理
  10. DNS 解析優化
  11. DNS 劫持
  12. DNS 劫持應對策略
  13. 結束語
  14. 題外話
  15. 參考

前言

在上一篇文章中,介紹瀏覽器解析 URL 的黑魔法,這篇文章來介紹一下 DNS 黑魔法。html

概念

DNS 的全稱是 Domain Name System 或者 Domain Name Service,它主要的做用就是將人們所熟悉的網址 (域名) 「翻譯」成電腦能夠理解的 IP 地址,這個過程叫作 DNS 域名解析。面試

爲何須要 DNS 解析

網絡通信大部分是基於TCP/IP的,而TCP/IP是基於IP地址的,因此計算機在網絡上進行通信時只能識別如「192.168.0.0.1」之類的IP地址,而不能認識域名。而對於人類的心智模型來講,很難記住10個以上IP地址的網站,因此咱們訪問網站時,更多的是在瀏覽器地址欄中輸入域名,就能看到所須要的頁面,這是由於有一個叫「DNS服務器」的計算機自動把咱們的域名「翻譯」成了相應的IP地址,而後調出IP地址所對應的網頁。chrome

大廠常常問

DNS 解析在面試中是一個常見的問題。常常會存在這樣的題目「在瀏覽器輸入一個 URL 以後發生了什麼?」,這個問題擴展開來就囊括了 DNS 的解析過程。固然還有的面試官會把 DNS 的解析過程單獨拿出來問。這篇文章就詳細來說講 DNS 怎麼解析的。segmentfault

第一步:瀏覽器 DNS 解析

檢查瀏覽器緩存中是否緩存過該域名對應的IP地址

用戶經過瀏覽器瀏覽過某網站以後,瀏覽器就會自動緩存該網站域名對應的地址,當用戶再次訪問的時候,瀏覽器就會從緩存中查找該域名對應的IP地址,由於緩存不只是有大小限制,並且還有時間限制(域名被緩存的時間經過屬性來設置),因此存在域名對應的找不到的狀況。windows

當瀏覽器從緩存中找到了該網站域名對應的地址,那麼整個解析過程結束,若是沒有找到,將進行下一步驟。對於的緩存時間問題,不宜設置太長的緩存時間,時間太長,若是域名對應的發生變化,那麼用戶將在一段時間內沒法正常訪問到網站,若是過短,那麼又形成頻繁解析域名。瀏覽器

瀏覽器緩存 DNS 時間

瀏覽器爲了提升響應的時間,會對 DNS 記錄緩存,可是不一樣的瀏覽器緩存的時間不同。緩存

chrome

chrome://net-internals/#dns 這裏能夠看各域名的DNS 緩存時間。Chrome對每一個域名會默認緩存60s。可是有可能chrome://net-internals顯示不出來dns緩存。只有一個清除緩存的按鈕。安全

image.png
當遇到這樣的狀況時,你能夠按照以下的流程操做來查看 DNS 緩存,這個不能查看 DNS 緩存是由於 chrome://net-internals/ 的一些功能已經在Chrome 71以後被移除了。服務器

  1. chrome://net-export 導出日誌
  2. https://netlog-viewer.appspot... 下導入日誌查看

DNS解析1.gif

Firefox

Firefox有DNS緩存功能,默認緩存時間只有1分鐘。微信

IE

IE將DNS緩存30min。

Safari

Safari DNS緩存時間約爲10s

瀏覽器對 DNS 解析結果的處理

若是一個域名的DNS解析結果會有多個的話,瀏覽器是如何處理的呢?Chrome瀏覽器會優先向第一個IP發起HTTP請求,若是不通,再向後面的IP發起HTTP請求。DNS 域名查詢網址

image.png

第二步:本地 hosts文件 DNS解析

若是第一個步驟沒有完成對域名的解析過程,那麼瀏覽器會去系統緩存中查找系統是否緩存過這個域名對應的地址,也能夠理解爲系統本身也具有域名解析的基本能力。在系統中,能夠經過設置文件來將域名手動的綁定到 某個 IP 上。若是使用過代理軟件(如 fiddler )的同窗可能對這個比較清楚一點,在系統的 hosts 文件,能夠用來設置域名和 IP 的對於關係。對於普通用戶,並不推薦本身手動綁定域名和,對於開發者來講,經過綁定域名和,能夠輕鬆切換環境,能夠從測試環境切換到開發環境,方便開發和測試。

hosts文件

hosts文件是一個用於儲存計算機網絡中各節點信息的計算機文件。這個文件負責將主機域名映射到相應的IP地址。hosts文件一般用於補充或取代網絡中DNS的功能。和DNS不一樣的是,計算機的用戶能夠直接對hosts文件進行控制。hosts文件的做用很是大,能夠自由解析域名。

hosts文件位置

  • Windows NT/2000/XP/Vista/win7(即微軟NT系列操做系統):默認位置爲 %SystemRoot%\system32\drivers\etc\,但也能夠改變。
  • 典型的XP系統hosts文件位置:C:\windows\system32\drivers\etc
  • Windows 95/98/Me:%WinDir%\Linux及其餘類Unix操做系統:/etc蘋果系:
  • Mac OS 9及更早的系統:System Folder: Preferences或System folder(文件格式可能與Windows和Linux所對應的文件不一樣)
  • Mac OS X:/private/etc(使用BSD風格的hosts文件)
  • iPhone OS:/etc
  • iPad OS:/private/etcSymbian第1/2版手機:C:\system\data\hosts
  • Symbian第3版手機:C:\private\10000882\hosts,只能使用兼容AllFiles的文件瀏覽器訪問,大部分都不行。

位置若是有問題請告知,謝謝!

hosts文件的一些用途

  • 將廣告域名重定向到本地IP地址:127.0.0.1上來過濾廣告。
  • hosts文件可用於攔截一些惡意網站的請求,從而防止訪問欺詐網站或感染一些病毒或惡意軟件。
  • 使用hosts文件來強制將網站指定到正確的IP上。

第三步:本地域名解析服務器 DNS 解析

若是在本機上沒法完成域名的解析,那麼系統只能請求本地域名解析服務系統進行解析,本地域名系統通常都是本地區的域名服務器,好比你鏈接的校園網,那麼域名解析系統就在你的校園機房裏,若是你鏈接的是電信、移動或者聯通的網絡,那麼本地域名解析服務器就在本地區,由各自的運營商來提供服務。對於本地服務器地址,系統使用命令就能夠查看,在和系統下,直接使用命令來查看服務地址。通常都緩存了大部分的域名解析的結果,固然緩存時間也受域名失效時間控制,大部分的解析工做到這裏就差很少已經結束了,負責了大部分的解析工做。

第四步:根域名解析服務器 DNS 解析

本地域名解析器尚未完成解析的話,那麼本地域名解析服務器將向根域名服務器發起解析請求。本地域名解析向根域名服務器發起解析請求,根域名服務器返回的是所查域的通用頂級域xxx地址。

根域名解析服務器

因爲早期的 DNS 查詢結果是一個512字節的 UDP 數據包。這個包最多能夠容納13個服務器的地址,所以就規定全世界有13個根域名服務器,編號從a.root-servers.net一直到m.root-servers.net。
這13臺根域名服務器由12個組織獨立運營。其中,Verisign 公司管理兩臺根域名服務器:A 和 J。每家公司爲了保證根域名服務器的可用性,會部署多個節點,好比單單 Verisign 一家公司就部署了104臺根域名服務器(2016年1月數據)。
因此,根域名服務器其實不止13臺。據統計,截止2016年1月,全世界共有 517 臺根域名服務器。你能夠在 http://root-servers.org 這個網站查到全部根域名服務器的信息。

第五步:gTLD服務器 DNS 解析

本地域名解析服務器向gTLD服務器發起請求。gLTD服務器查詢並返回域名對應的Name Server域名服務器的地址,一般是你註冊的域名服務器,例如你在某個域名服務器提供商申請的域名,那麼這個域名解析任務就由這個域名服務提供商來完成。

第六步:權威域名服務器 DNS 解析

權威域名服務器會查詢存儲的域名和ip的映射關係表,將 ip 連同一個 TTL 值返回給DNS 本地域名服務器。

第七步:返回,而後緩存

本地域名服務器拿到 ip 和 TTL 會緩存起來。返回給瀏覽器。

DNS 解析原理

image.png

  • 本地DNS解析是遞歸過程。
  • 其餘服務器DNS解析是迭代過程。

每一次DNS解析須要20~120ms ,第一次解析完成後,會把解析信息緩存到本地 下一次再次發送這個域名請求,直接從本地緩存中進行解析了
一個頁面中域名不少那麼須要解析的就不少服務器。減小域名解析(頁面中儘量少用不一樣的服務器),可是真實狀況要作一個取捨: 爲了節約服務器資源,大型網站通常都是服務器分佈式 或者 服務器分離 WEB資源服務器 圖片服務器 數據服務器 .....

DNS 解析優化

DNS解析會有20ms~120ms的耗時,哪減小這個耗時是有必要的,一般是作飯是減小 DNS 的請求次數,儘量不要請求太多的服務器解析。可是如今不少的公司爲了作負載均衡或者服務器的分離獨立部署,都是更可能多請求服務器。哪還有一種作法就是 DNS 預解析,DNS預解析其實就是減小域名解析成IP的時間。

<link rel="dns-prefetch" href="xxx"></link>
<meta http-equiv="x-dns-prefetch-control" content="on"/>

DNS 劫持

概念

DNS劫持即經過某種技術手段,篡改正確域名和IP地址的映射關係,使得域名映射到了錯誤的IP地址,所以能夠認爲DNS劫持是一種DNS重定向攻擊。DNS劫持一般可被用做域名欺詐,如在用戶訪問網頁時顯示額外的信息來賺取收入等;也可被用做網絡釣魚,如顯示用戶訪問的虛假網站版本並不是法竊取用戶的我的信息。

DNS 劫持大事記

《AWS route53 BGP路由泄漏事件》

事件發生在2018年4月24日。黑客針對四段分配給AWS,本應做爲AWS route53 DNS服務器服務地址的IP空間(205.251.192.0/23, 205.251.194.0/23, 205.251.196.0/23, 205.251.198.0/23)發佈了虛假的BGP路由,致使在BGP泄漏的兩個小時期間,本應該AWS route53 DNS服務器的DNS查詢都被重定向到了黑客的惡意DNS服務器。且黑客DNS劫持的目標十分明確,惡意DNS服務器只響應對http://myetherwallet.com 的查詢,其餘域名的查詢均返回SERVFAIL。一旦用戶沒有注意「網站不安全」的提示而訪問http://myetherwallet.com 登陸本身的以太坊錢包,黑客就能夠輕易獲取用戶的私鑰進而竊取用戶的數字貨幣資產。
據不徹底統計,DNS劫持致使兩個小時內有多個用戶的以太坊錢包被轉帳清空,共計至少13000美圓的資產被黑客盜取。

《巴西銀行釣魚事件》

事件發生在2018年。黑客利用D-Link路由器的漏洞,入侵了至少500個家用路由器。黑客入侵後更改受害者路由器上的DNS配置,將受害者的DNS請求重定向到黑客本身搭建的惡意DNS服務器上。黑客入侵後更改受害者路由器上的DNS配置,將受害者的DNS請求重定向到黑客本身搭建的惡意DNS服務器上,最終誘導本來想訪問正常銀行網站的受害者訪問到釣魚網站,並惡意竊取受害者的銀行帳目密碼信息。
黑客誘導本來想訪問正常銀行網站的受害者訪問到釣魚網站,並惡意竊取受害者的銀行帳目密碼信息。

DNS 劫持分類

本地DNS劫持

  • 篡改本地的 hosts文件。黑客經過木馬病毒或者惡意程序入侵PC,篡改DNS配置(hosts文件,DNS服務器地址,DNS緩存等)。
  • 攻擊路由器或者利用路由器的漏洞篡改 DNS 配置。

    DNS解析路徑劫持

  • 經過技術手段(中間盒子,軟件等)將DNS流量重定向到其餘DNS服務器。
  • 利用分光等設備將DNS查詢複製到網絡設備,並先於正常應答返回DNS劫持的結果。
  • 網絡設備或者軟件直接代替DNS服務器對DNS查詢進行應答。

    篡改DNS權威記錄

  • 篡改DNS權威記錄 咱們這裏指的黑客非法入侵DNS權威記錄管理帳號,直接修改DNS記錄的行爲。

DNS 劫持應對策略

DNS劫持在互聯網中彷佛已經變成了屢見不鮮,那麼該如何應對各類層出不窮的DNS劫持呢?若是懷疑本身遇到了DNS劫持,首先要作的事情就是要確認問題。

如何確認DNS劫持

阿里雲的能夠檢測域名是否被劫持(注意我不是阿里雲的拖,哈哈哈哈),地址

image.png

DNS劫持防範

  • 安裝殺毒軟件,防護木馬病毒和惡意軟件;按期修改路由器管理帳號密碼和更新固件。
  • 選擇安全技術實力過硬的域名註冊商,而且給本身的域名權威數據上鎖,防止域名權威數據被篡改。
  • 選擇支持DNSSEC的域名解析服務商,而且給本身的域名實施DNSSEC。DNSSEC可以保證遞歸DNS服務器和權威DNS服務器之間的通訊不被篡改。阿里雲DNS做爲一家專業的DNS解析服務廠商,一直在不斷完善打磨產品功能,DNSSEC功能已經在開發中,不日就會上線發佈。
  • 在客戶端和遞歸DNS服務器通訊的最後一英里使用DNS加密技術,如DNS-over-TLS,DNS-over-HTTPS等。

結束語

若是文章中什麼不對或者寫的很差的地方,請你們多多指正,謝謝!碼字不易,點個贊加個關注吧!

image.png

題外話

筆者在「深圳蝦皮」,一家口碑還不錯的東南亞電商公司,2021大量招人,機會多多!快來加入咱們吧!

如今有想法,仍是之後有想法的同窗,均可以加我微信[stone---999]!內推你加入咱們的你們庭!

參考

相關文章
相關標籤/搜索