【翻譯】卡通圖解DNS,你的資訊怎麼被洩露的?

Skandar-Ln發表於2018-06-11

原文連結:A cartoon intro to DNS over HTTPS

HTTP簡要課程

當一個人解釋瀏覽器如何下載一個網頁的時候,他們常常會這麼說:

  1. 你的瀏覽器向伺服器傳送一個GET請求。
  2. 伺服器返回一個包含HTML的檔案響應。

【翻譯】卡通圖解DNS,你的資訊怎麼被洩露的?

這個系統就叫HTTP。

但是這個圖有點過於簡化了。你的瀏覽器不直接與伺服器通訊。可能是由於他們往往相離甚遠。

一般,伺服器可能距你幾千英里以外。這之間可能沒有直連你電腦和伺服器的線路。

【翻譯】卡通圖解DNS,你的資訊怎麼被洩露的?

所以這個請求從瀏覽器到服務端,會經過許多人的手。響應返回回來的時候也會如此。

我把這個比喻為同學們在課堂上傳遞紙條。紙條的外面會寫要傳給誰,然後寫的人把它交給附近的人,然後拿到紙條的這個人又把紙條傳給他附近的人——這些人不一定是最終的接收方,而是這個傳遞路線上的經手者。

【翻譯】卡通圖解DNS,你的資訊怎麼被洩露的?

這裡的問題在於,這條路徑上的所有人都可以開啟這個紙條然後讀裡面的內容。而且你事先無法知道這個紙條會經過哪些人手中。

可能其中的某人會做一些壞事...

比如把裡面的內容公之於眾

【翻譯】卡通圖解DNS,你的資訊怎麼被洩露的?

或者改變裡面的內容

【翻譯】卡通圖解DNS,你的資訊怎麼被洩露的?

為了防止這些問題,一個新的、安全的HTTP版本出現了,叫做HTTPS。什麼是HTTPS?就好比在每張紙條外面加了個鎖。

【翻譯】卡通圖解DNS,你的資訊怎麼被洩露的?

瀏覽器和服務端都知道怎麼處理這把鎖,但是中間的那些人並不知道。

有了這個,即使資訊被多人傳遞,只有你和網站能夠看到資訊的內容。

這解決了很多的安全問題。但是仍然有很多在瀏覽器和服務端之間傳遞資訊是沒有被加密的。這意味著中間的人仍然能夠發現你在做什麼。

一個資料會被暴露的地方是在與服務端建立連線的時候。當你傳送初始資訊給服務端的時候,你也傳送了伺服器名字(某些領域叫Server Name Indication)。這使得在一臺機器上執行多個網站成為可能,因為通過這個名字它知道你請求的是哪一個。這個初始請求是建立加密連線的一環,但是這個初始請求它本身是不加密的。

另外一個資訊暴露的地方是在DNS。所以,什麼是DNS?

DNS:域名系統

在上面傳紙條的比喻中,我說了接收方的名字會被寫在紙條的外面,這在HTTP請求中也是如此...這個名字用來表明這個紙條要去哪。

但事實上你無法使用名字告訴他們紙條要去哪。這之前的路由都不知道你說的是誰。然而,你需要告訴他們的是IP地址。這中間的路由才知道你要把訊息發往哪。

【翻譯】卡通圖解DNS,你的資訊怎麼被洩露的?

這裡就有一個問題。如果你是網站的運營方,你不會想你的使用者去記住你的IP地址。你會想給你的網站取一個上口的名字...好記的名字。

這就是為什麼我們需要域名系統(DNS)。你的瀏覽器使用DNS把網站名字轉換成IP地址。這個過程——把域名轉成IP地址——叫做域名解析。

【翻譯】卡通圖解DNS,你的資訊怎麼被洩露的?

然後瀏覽器怎麼知道如何去做這件事呢?

一個選項是你可以有一個很長的列表,像瀏覽器中的電話簿。但是當一個新的網站上線,或者遷移到新的伺服器去,很難使你的列表保持更新。

所以與其用一個列表儲存所有的域名,我們有許多互相關聯的更小的列表。這使得他們能被單獨地管理。

【翻譯】卡通圖解DNS,你的資訊怎麼被洩露的?

為了得到域名對應的IP地址,你需要找到包含這個域名的列表。這個過程就像尋寶遊戲一樣。

對於維基百科的英文版本網站en.wikipedia.org的尋寶是怎麼樣的?

我們把這個域名分成幾部分:

【翻譯】卡通圖解DNS,你的資訊怎麼被洩露的?

有了這三部分,我們可以找到包含這個IP地址的列表。然而,我們在找尋的過程中需要一些幫助。這個幫我們找尋到寶藏(IP地址)的東西叫解析器(resolver)

首先,解析器會請求根DNS。它知道一些不同的根域名伺服器,所以它會給其中的一個傳送請求。解析器詢問根DNS可以去哪找到更多關於.org頂級域名下的地址資訊。

這個根DNS會給出一個知道.org下相關地址資訊的伺服器地址。

【翻譯】卡通圖解DNS,你的資訊怎麼被洩露的?

解析器會告訴告訴作業系統en.wikipedia.org的IP地址。

這個過程叫做遞迴解析(recursive resolution),因為你從一個伺服器得到一個ip地址後,你需要回去向這個ip地址的伺服器發起另一個相似的請求。

我說過我們需要一個解析器幫我們完成這一系列請求。但是瀏覽器是如何找到這個解析器的呢?一般,瀏覽器會委託作業系統去獲得一個解析器。

【翻譯】卡通圖解DNS,你的資訊怎麼被洩露的?

那麼作業系統是如何知道該採用哪個解析器呢?這裡有兩種方式。

你可以配置你的計算機去使用一個你信任的解析器。但是基本沒多少人這麼做。

人們大多使用預設配置。預設地,作業系統會使用當前網路提供的解析器。當計算器連線到網路並獲得IP地址後,網路也會推薦一個解析器供使用。

【翻譯】卡通圖解DNS,你的資訊怎麼被洩露的?

這意味著你使用的解析器一天之內會變更好幾次。如果你下午決定去一家咖啡店上網,那麼你可能使用了一個與上午在家不同的解析器。當然如果你配置了你信任的解析器也是一樣的,因為在dns協議裡沒有安全可言。

DNS是怎麼被利用的

所以這個系統(DNS System)是如何讓使用者陷入一個弱勢地位呢?

通常解析器會告訴DNS伺服器你在查詢的域名是什麼。然而這個請求有時會包含你的整個IP地址。就算不是完整的IP地址,越多越多的請求會帶上你的大部分IP地址,這能和其他的資訊結合起來察覺出你的身份。

【翻譯】卡通圖解DNS,你的資訊怎麼被洩露的?

這意味著你詢問過的每一個伺服器都能知道你訪問的網站是什麼。不僅如此,還意味著你與伺服器之間的所有中間節點也能看到你的請求。

這裡有兩種對使用者的資料造成威脅的方式。主要是跟蹤(tracking)和欺騙(spoofing)

跟蹤(tracking)

就像我上面說的,很容易通過IP地址得知是誰在訪問這個網站。這意味著DNS伺服器和路徑上的中間人——叫做on-path routers——能夠建立一份你的畫像。他們可以記錄你訪問的所有網站。

這些資料是十分有價值的。很多人和公司會花很多錢來知道你瀏覽了些什麼。

【翻譯】卡通圖解DNS,你的資訊怎麼被洩露的?

於是你的資料就被收集和販賣了。因為網路給你的解析器可能根本靠不住。

即使你信任你的網路推薦的解析器。那也僅限於你在家的時候。如我前面提到的,當你去咖啡店或酒店等的時候,你可能使用了一個不同的解析器。誰知道它會怎麼處理你的資料。

在沒有得到你同意的情況下收集和販賣你的資料,這個系統還有一種更危險的利用方式。

欺騙(Spoofing)

說到欺騙,指的是你到DNS伺服器之前的某人改變了返回的結果。欺騙者可能會告訴你你訪問網站的假地址。這會阻止你訪問真的網站同時引導你進入了詐騙網站。

【翻譯】卡通圖解DNS,你的資訊怎麼被洩露的?

比如,你實體超市進行購物。你想要在某寶某東查詢某件商品的價格,看是否能在網上更便宜的買到。

但如果你連線的是超市的Wifi,你可能就用了他們的解析器。這個解析器可能劫持了你的電商的請求,然後欺騙你說網站不可訪問。

此篇只翻譯了文章中的教程部分,若想進一步瞭解Mozilla提出的安全解決方案Trusted Recursive Resolver (TRR) and DNS over HTTPS (DoH),請檢視原文

相關文章