如何對抗 DNS 劫持?

07.25.2019  - 作者  在 域名

2018 年 4 月 24 日,當時流行的以太幣錢包服務(與比特幣類似的一種流行加密貨幣)的用戶在連結至網站登錄時收到了一條不尋常的消息:網站上的 SSL 安全憑證顯示無效。進一步檢查後,他們發現該憑證是自主簽名的。
 
有些用戶在該階段就馬上停止了。因為,不要在網頁上憑證出現錯誤時登入是個常識,完全停止任何操作。
 
然而,並非每個人都會停止動作。由於憑證錯誤之外其他一切看起來還是完全正常,所以有些用戶仍然會憑著其直覺繼續登入的動作。接者用戶只看到一個 10 免倒數的計時器,然後他們的加密貨幣就被轉走了。
 
換句話說,他們上鉤了。
 
但這整件事是如何發生的呢?沒有人點擊電子郵件中偽裝的連結,他們是直接連結到網站或直接使用網頁儲存的書籤。

所以到底發生了什麼事呢?

我們會解釋這一點,但先讓我們稍微回顧一下, 首先,我們必須了解網路運作的一些細節,一開始就會遇到 DNS
 
作為一個域名註冊商,我們從事域註冊業務,這也代表著我們允許您將域名(例如example.com)分配給您的伺服器的 IP 位址,像是您的網站或電子郵件等等。
 
DNS 是您設定網域名稱連結至哪個 IP 位址的方式。您使用 DNS 伺服器管理網域名稱的指向,這些 DNS 伺服器會設定 example.com 與哪些 IP 位址相連,如 www.example.com 等等,和哪些 IP 位址會包含您的電子郵件等等。
 
然後,當有人打開瀏覽器並輸入 “example.com” 時,他們的電腦會詢問 DNS 解析器 您網站的 IP 位址。如果網路上的其他人最近有造訪過您的網站,那麼 DNS 解析器可能會將該資訊儲存在其快取中,進而將答案提供給您的電腦。如果它不知道的話,它將向上一層並詢問下一個 DNS 伺服器。
 
然後 DNS 解析器將儲存快取以供後續使用,持續一段時間 (稱為生存時間或TTL)。這樣一來,下次網路上有人詢問相同位址時,就不必從頭請求答案。
 
今日,越來越少域名持有人親自操作 DNS 伺服器。 他們通常會使用註冊商或第三方供應商的 DNS 伺服器,像是 Cloudflare 或 Amazon 網站服務。
 
因為 DNS 是一分佈式的強大系統。 但是它卻有一個弱點:它的系統是建立在信任的基礎上。 分佈出來的每個 DNS 伺服器都會信任其上方的 DNS 伺服器,以便提供它正確的答案。
 
以太幣錢包網路釣魚事件的情況是,某個人讓所有人的 DNS 解析器錯認假答案為真答案。

您要如何偽造 DNS 的答覆呢?

DNS 請求及回覆是未被加密的,也就是說任何人都能夠讀取。
 
如果攻擊者可以擷取您的 DNS 請求,那他們就可以欺騙回覆並將您的電腦指向錯誤的 IP 位址。要做到這一點,攻擊者必須破解目標網路服務供應商,他們的 DNS 或他們的 DNS 供應商。
 
在 2018 年 4 月以太幣錢包攻擊事件中,所有受到攻擊之網站的 DNS 請求都收到了錯誤的答案。不知道什麼原因,有人劫持了網站的 DNS 伺服器。

劫持 DNS 伺服器

有問題的網站是使用一流行網站服務的 DNS 伺服器作為其域名的 DNS 伺服器。如果攻擊者想要竊取以太幣,其中一個方法就是破解該網站的伺服器並更改其密碼。但是如果攻擊者可以將網站的 DNS 指向新的惡意網站,那將會更容易。如果他們能夠破解 DNS 供應商,他們將可以全面掌控網站的 DNS 並且將其指向任何網站。
 
但是相反地,去年四月以太幣錢包網站攻擊事件中的攻擊者是選擇向以太幣錢包網站的域名伺服器提供 DNS 查詢的假回覆。
 
他們是如何做到這一點並得到關於網路如何運作的細節呢?

路由表

網路不僅僅是一個大網路,而是一個網路中的網路。
 
意思是說,當您從家中連結至網路時,您正在向 ISP 網路傳送和接收數據,包括 DNS 請求。接著您 ISP 網路的路由器就會解析如何將您傳輸的內容傳送到正確的位置。
 
這些路由器與某些網路直接連結,但是為了將數據傳送至某些網絡,它們首先必須要通過另一個網路發送它,然後將其傳送到正確的網路。
 
基本上,路由器的作用是將一張如何到達每個網路的地圖拼湊在一起,也就是我們說的路由表。 接著,路由器會與它直接連接的所有網路共享所有信息,因此這些路由表就可以在所有網絡上交叉傳播。 
 
您或許已經知道網路是藉由使用 IP 位址來定位網路上的電腦位置。每個 IP 位址都有一個 “前綴”,有點像是郵政編碼。網路上的每條網路都會向網路上的所有其它網路通告它能夠將數據傳送到該前綴中的 IP 位址。
 
當數據傳送至終點時,網路路由器會使用其路由表 – 也就是它的網路地圖 – 將數據傳送到正確的網路以獲取終點的 IP 位址及其目的地。這就是網路上的溝通,其中也包含了 DNS 請求,因為 DNS 伺服器也有 IP 位址。
 
就像 DNS 一樣,因為系統是建立在信息可靠性的基礎上,當網路惡意甚至意外地發送錯誤的路由信息時,這些信息就會在網路上的路由表中被結束。
 
去年春天在以太網站上的攻擊便是涉及到這一點。攻擊者在網路上攻擊核心路由器,然後將流量發送到以太錢包網站的 DNS 服務的 IP 位址中,以及他們所擁有和控制的伺服器上。
 
然後,只要任何人發送 DNS 查詢至攻擊者劫持的 IP 位址所管理的域名時,攻擊者的伺服器就會傳送回覆,而不是以太錢包網站的供應商回覆。如果有人向攻擊者發送以太幣網站域名的 DNS 查詢,攻擊者的伺服器將使用假網站的 IP 位址進行回覆,然後在受害者登入假網站時竊取他們的資料。
 
當天結束時,價值超過 1700 萬美元的加密貨幣就這樣被竊取了。
 
雖然有些人可能會說所有這些與加密貨幣有關的東西在本質上就是一種冒險,但無論是受攻擊的用戶,DNS 供應商或是以太幣錢包服務商,都更應該了解在某種程度上用戶是無法完全被保護的,而這些因素都與主要問題無關:即使每次攻擊都為未來的改進提供了經驗教訓,但重要的是要記住,在最基本的情況下,網絡釣魚主要是利用用戶的信任
 
一方面要注意的是:您不能相信任何東西,甚至是 DNS。 但另一方面,它帶出了一個問題:我們要如何才能提高系統的可信度?
 
答案是:DNSSEC。

DNSSEC

在 DNS 創立時,無從得知您獲得的 DNS 回覆實際上是否來自他們所聲稱的來源。 隨著網路的發展,人們開始意識到這是一大疏忽,因此人們開始向 DNS 提出”擴展” 的想法,特別是一組 “DNS 安全擴展” 稱為 DNSSEC。
 
它需要進行一些實驗才能做到正確,但目前存在的 DNSSEC 包括使用公鑰加密技術簽署 DNS 記錄。 域名持有人生成他們自己的密鑰,然後將公鑰發送到他們的域名註冊商 (通常是藉由上傳它們)。 然後,域名註冊商將密鑰發送到註冊局,註冊局再簽署密鑰並發佈它們。 它類似於網站管理員生成 SSL 憑證的方式,然後將其發送給認證機構 (CA) 並由其簽名。
 
當使用 DNSSEC 對 DNS 區域進行簽名時,每次查找該區域中的 DNS 記錄時,都可以驗證收到的記錄是否為實際來源。
 
這表示當在區域上使用 DNSSEC 時,能夠檢測到所有中間人、緩存中毒,甚至是 DNS 伺服器的危害。
 
重要的是,DNSSEC 讓您能夠信任由 DNS 伺服器回覆出來的答案是正確的。以太網站的例子來說,假的 DNS 伺服器無法偽造已簽名的 DNS 記錄並將用戶指向假的網站。
 
更重要的是,如果沒有 DNSSEC,攻擊者可以利用控制被攻擊網站的 DNS 伺服器去創建一個真正的 SSL 憑證,該憑證看起來將與其他任何有效憑證一樣,使瀏覽器看起來有效,讓用戶無法從那個假的頁面得到任何警告。但如果使用 DNSSEC,這種情況就不可能發生。

風險和信任

值得注意的是,以太幣錢包網站發生的事情並非加密貨幣固有的風險。 DNS 劫持不止會發生在加密貨幣上。2016 年底,一家巴西銀行的域名與以太幣錢包網站遭受到同樣的攻擊持,這不僅僅影響了他們的網站,更影響了全國各地、美國和維爾京群島的 ATM,使數百萬人暴露於資訊被盜竊的風險下。
 
但這些攻擊都不只是針對某種貨幣或頻道,而是針對各種網站。 任何網站都可能在這種方式下受到損害,而不僅限於加密貨幣網站或是金融網站。
 
風險隨時存在,利用技術上的漏洞可以導致潛在的攻擊者竊取高額款項。
 
但是貨幣的另一的面向是信任問題。人們很容易被許多網路攻擊和看似明顯的漏洞所矇騙。 而以太幣錢包網站的用戶所遭受的攻擊類型與日常生活中典型的詐騙並沒有那麼大的差異。
 
人們轉帳給奈及利亞王子,因為他們認為他們所收到的電子郵件是誠實可靠的信息。 他們因而點擊網絡釣魚郵件中的連結,他們相信他們在連結中所看到的域名就是真實的域名。 因此,他們無視憑證發出的警告並登錄他們的加密貨幣錢包,因為他們對網路的核心服務,像是 DNS 和路由器深信不疑。
 
DNSSEC 是一項非常有用的技術,因為它使用加密技術來增加對其中一個核心服務的信任,因此我們強烈地建議每個人都去使用它,這不只是為了避免這類型的攻擊,而是因為它使我們在有疑慮時能更加有信心。然而,它並不完美。

其它考量

一個考量因素是以太幣網站的域名並沒有啟用 HSTS。 這種保護會繞過自簽名證書的警告使之變得更加困難,因為沒有任何選項會被提交給用戶,導致用戶忽略警告並繼續進行操作。
 
另一方面,當用戶收到警告時是幸運的。 因為攻擊者將以太幣錢包網站之域名的所有 DNS 流量指向至他們自己的伺服器,使得攻擊者也可以使用 DNS 驗證去取得 “有效的” SSL 憑證。
 
另一個考慮因素是,如果攻擊者選擇將流量重新路由到 DNS 解析器,那麼使用該解析器的每個人都可以將其流量重新路由到他們建立的釣魚網站,DNSSEC 將無力阻止它。 這是因為 DNSSEC 驗證是由 DNS 解析器自己完成的,因此如果 DNS 在您的瀏覽器與 DNS 解析器之間的任何地方被劫持,DNSSEC 將無法保護您。
 
最後,沒有任何一種安全技術足夠抵擋各種類型的攻擊。攻擊總是能夠被多種方式防禦,但是 DNSSEC 絕非阻止所有攻擊的唯一防禦。