Google DNS劫持背後的技術分析

wyzsk發表於2020-08-19
作者: insight-labs · 2014/03/18 15:58

0x00 背景


最近世界真是越來越不太平了,尤其是對於大部分普通人而言。昨天又傳來噩耗,根據網路監測公司BGPMon,Google的公開DNS伺服器 IP 8.8.8.8被劫持到了委內瑞拉和巴西超過22分鐘。

Google DNS 伺服器平均每天處理超過1500億個查詢,在被劫持的22分鐘裡起碼幾百萬個查詢包括金融系統,政府和個大商業網站的DNS查詢流量都被劫持走了。

enter image description here

根據磚家們的推測,這次劫持可能是駭客利用了Border Gateway Protocol(BGP) 協議中一個眾所周知的漏洞來實現的,BGP協議為ISP級的路由協議,一般用來協調大型ISP之間的路由走向。這次劫持可以讓駭客把網上的部分流量劫持從而經過他們所控制的路由。

enter image description here

這已經不是Google DNS伺服器被第一次劫持了,在2010年也Google DNS的流量也曾經被劫持到了羅馬尼亞和奧地利境內。

BGP劫持攻擊是一種大規模的中間人攻擊,並且較難發現,因為資料包的最終目的地並沒有變,只是繞了下路而已。

0x01 BGP劫持詳解


本部分來源於Tony Kapela 和 Alex Pilosov在2008年 Defcon會議上的演講。

什麼是BGP

首先網際網路整體上來說是一個分散式的網路,並沒有整個網路的中心。但是整個網際網路實際上是由成百上千個不同的ISP的子網路組成的。

這些子網路互相連線,透過BGP協議告訴對方自己子網路裡都包括哪些IP地址段,自己的AS編號(AS Number)以及一些其他的資訊。

這裡又要扯到網際網路的IP地址分配方式。網際網路的IP地址分配是中心化的,ICANN這個機構把IP地址大段分給Regional Internet Registries(RIR),區域網際網路註冊管理機構。RIR再把IP地址段細分後分給ISP們。

大部分情況下,AS Number和分給該AS什麼IP段是沒有任何關係的。

下面問題來了,BGP協議裡雖然有一些簡單的安全認證的部分,但是對於兩個已經成功建立BGP連線的AS來說,基本會無條件的相信對方AS所傳來的資訊,包括對方聲稱所擁有的IP地址範圍。

對於ISP分配給大公司客戶的地址段,ISP往往會對BGP做一些有限的過濾。但是對於大型ISP來說,因為對方所擁有的IP地址段可能過於分散,所以一般是按最大範圍設定BGP prefix 地址過濾。比如假設ISP A擁有地址段20.1.0.0/16和20.200.0.0/16,那麼ISP B可能會設定過濾對方傳來的20.0.0.0/8以外的路由。

當然這種情況比較極端,一般ISP分配到的IP地址段都是連續的,但是基本也都有可操作的空間,可以把數百到幾萬個不屬於自己的IP合法加到自己的BGP資訊裡。

多數ISP甚至都沒有把自己本身的IP段過濾掉,也就是說如果其他AS聲稱擁有該ISP自己的IP段,這個ISP的BGP路由也會相信。

為了解決這個問題,有人發明了一個叫Internet Routing Registry (IRR)的東西,相當於一個開放式的資料庫,像DNS 根伺服器一樣採用分散式映象伺服器放在世界各地。

ISP可以向IRR註冊自己的IP地址段和路由策略,其他ISP就可以查詢IRR從而對自己的BGP路由器做過濾。這樣做的確防止了一些由於無意而導致的路由劫持。

但是IRR這個東西本身也是不靠譜的。IRR裡存了大約10萬條記錄,如果全部載入進路由器的話是個不小的負擔。另外IRR基本沒人管,任何人可以可以往裡面註冊任何路由記錄。

所以在大部分ISP都無條件相信IRR的時代,IRR也帶來了不少的麻煩。

最簡單的方式就是透過Whois找到目標IP段的 管理員郵箱,如果該郵箱或者郵箱所在的域名已經過期,那麼就自己註冊一個,然後就可以隨便透過郵件向IRR修改記錄了。

或者直接透過BGP路由向ISP傳送,反正大家都不care……

實際案例

現在我們來看一個Youtube被劫持的案例:

youtube有5個網段,其中一個是

208.65.152.0/22  

因為覺得Youtube不和諧,於是巴基斯坦政府決定封鎖Youtube。

巴基斯坦電信在路由器上加了條static route把

208.65.153.0/24

弄到了null0介面(GFW之黑洞路由大法)

巴電信的工程師手抖把static route redistribute到BGP了(Cisco路由器上同步不同協議路由表的方法),也就是說把該路由器上的靜態路由表新增到BGP的路由表了,靜態路由同步到其他路由表裡的優先值最高。

BGP把這條路由向其他AS的路由器同步了,最先中槍的是香港的電訊盈科(PCCW),然後接著被逐漸同步到了全世界。

這時網際網路的大部分使用者想上Youtube的時候資料包都跑到巴基斯坦了,結果當然是打不開了(因為進來就被弄到null0了)。

Youtube發現後重新用BGP宣告瞭對該IP段和其他IP段的所有權,成功重新整理了部分ISP路由器的路由表。

兩小時後PCCW斷開了和巴基斯坦電信路由器的BGP連線。3-5分鐘後,一切恢復正常,除了苦逼的巴基斯坦使用者們。

這意味著只要控制了任何一個ISP的任何一個BGP路由,都將具備影響全世界網際網路的能力。

BGP劫持很難被發現,如果不是因為巴基斯坦電信把youtube的IP段轉發到了null0介面,資料包就只會在巴基斯坦網路裡繞一圈然後再到達Youtube。

如果攻擊者的路由器具備篡改TTL的功能,那麼即使透過traceroute也很難發現資料包被劫持,唯一的方法就是像前面所說的BGPmon那樣檢測全世界範圍內的AS路由表和BGP資訊。

BGP劫持理論

當我們控制了ISP的BGP路由後,像平常一樣傳送路由資訊。透過修改AS Path等BGP資訊,讓其他AS認為你到目標網路的距離最短。

為了讓回來的資料包也經過你的路由器,你需要記錄trace route到目標網路的時候都會經過哪些AS。

使用AS-PATH prepend list包括這些AS Number

設定static route到traceroute出現的第一個ASN

詳解:

目標IP段

10.10.220.0/22

在AS 200中
ASN 200向相鄰的AS 20和30傳送BGP通告。
此時為正常的狀態。

2014031815415353677.png

攻擊者控制了AS 100的BGP路由。

AS 100的路由表和BGP表顯示到達

10.10.200.0/22

需要經過 AS 10.

於是我們把AS10,20和200加入我們的AS PATH prepend list

2014031815423285580.png

透過route-map把目標IP段加入BGP路由表

10.10.220.0/24 is announced with a route-map:  
route-map hijacked permit 10  
match ip address prefix-list jacked  
set as-path prepend 10 20 200  

然後在AS100的路由器中加入static route,把流向目標IP段的資料包指向AS10

ip route 10.10.220.0 255.255.255.0 4.3.2.1 

2014031815431276804.png

完成後可以看出,AS30 40 50 60的資料包如果想要到AS 200去,都會先經過AS 100.

到了這裡我們已經可以分析出,BGP劫持的本質再次回到安全的本質既是信任這一點,因為BGP直接無條件信任對方AS發來的路由資訊,並且缺乏有效的認證和過濾手段,導致BGP劫持屢次得手。

本文章來源於烏雲知識庫,此映象為了方便大家學習研究,文章版權歸烏雲知識庫!

相關文章