最近世界真是愈來愈不太平了,尤爲是對於大部分普通人而言。昨天又傳來噩耗,根據網絡監測公司BGPMon,Google的公開DNS服務器 IP 8.8.8.8被劫持到了委內瑞拉和巴西超過22分鐘。git
Google DNS 服務器平均天天處理超過1500億個查詢,在被劫持的22分鐘裏起碼幾百萬個查詢包括金融系統,政府和個大商業網站的DNS查詢流量都被劫持走了。github
根據磚家們的推測,此次劫持多是黑客利用了Border Gateway Protocol(BGP) 協議中一個衆所周知的漏洞來實現的,BGP協議爲ISP級的路由協議,通常用來協調大型ISP之間的路由走向。此次劫持可讓黑客把網上的部分流量劫持從 而通過他們所控制的路由。redis
這已經不是Google DNS服務器被第一次劫持了,在2010年也Google DNS的流量也曾經被劫持到了羅馬尼亞和奧地利境內。數據庫
BGP劫持攻擊是一種大規模的中間人攻擊,而且較難發現,由於數據包的最終目的地並無變,只是繞了下路而已。安全
本部分來源於Tony Kapela 和 Alex Pilosov在2008年 Defcon會議上的演講。服務器
首先互聯網總體上來講是一個分佈式的網絡,並無整個網絡的中心。可是整個互聯網其實是由成百上千個不一樣的ISP的子網絡組成的。網絡
這些子網絡互相鏈接,經過BGP協議告訴對方本身子網絡裏都包括哪些IP地址段,本身的AS編號(AS Number)以及一些其餘的信息。分佈式
這裏又要扯到互聯網的IP地址分配方式。互聯網的IP地址分配是中心化的,ICANN這個機構把IP地址大段分給Regional Internet Registries(RIR),區域互聯網註冊管理機構。RIR再把IP地址段細分後分給ISP們。網站
大部分狀況下,AS Number和分給該AS什麼IP段是沒有任何關係的。spa
下面問題來了,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個網段,其中一個是
由於以爲Youtube不和諧,因而巴基斯坦政府決定封鎖Youtube。
巴基斯坦電信在路由器上加了條static route把
弄到了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信息。
當咱們控制了ISP的BGP路由後,像日常同樣發送路由信息。經過修改AS Path等BGP信息,讓其餘AS認爲你到目標網絡的距離最短。
爲了讓回來的數據包也通過你的路由器,你須要記錄trace route到目標網絡的時候都會通過哪些AS。
使用AS-PATH prepend list包括這些AS Number
設置static route到traceroute出現的第一個ASN
目標IP段
在AS 200中
ASN 200向相鄰的AS 20和30發送BGP通告。
此時爲正常的狀態。
攻擊者控制了AS 100的BGP路由。
AS 100的路由表和BGP表顯示到達
須要通過 AS 10.
因而咱們把AS10,20和200加入咱們的AS PATH prepend list
經過route-map把目標IP段加入BGP路由表
而後在AS100的路由器中加入static route,把流向目標IP段的數據包指向AS10
完成後能夠看出,AS30 40 50 60的數據包若是想要到AS 200去,都會先通過AS 100.
到了這裏咱們已經能夠分析出,BGP劫持的本質再次回到安全的本質既是信任這一點,由於BGP直接無條件信任對方AS發來的路由信息,而且缺少有效的認證和過濾手段,致使BGP劫持多次得手。