網際網路跟人類社會一樣,都透過特定的規則和法律來確保社會的正常執行。BGP協議就是網際網路中的“規則”之一。BGP用於在不同的自治系統(AS)之間交換路由資訊,當兩個AS需要交換路由資訊時,每個AS都必須指定一個執行BGP的節點,來代表AS與其他的AS交換路由資訊。
但這些規則可能會被人為或意外打破。破壞 Internet 規則的最常見方式之一是 BGP 路由器通告不屬於其自己的 AS 的字首,也就是說,BGP路由器非法宣佈特定字首,從而將流量從其預期目的地重定向到它自己的 AS。這稱為 BGP 路由劫持,也稱為字首劫持、路由劫持和 IP 劫持。
2018 年 4 月,惡意駭客公佈了一些屬於 Amazon Web Services 的 IP 字首,一些試圖登入加密貨幣網站的使用者被重定向到駭客所創造的虛假網頁之中,導致了超過 160,000 美元的損失。
除了惡意攻擊,BGP 劫持的意外例項也可能產生嚴重後果。2008 年,巴基斯坦的一家 ISP 試圖透過更新其 BGP 路由來審查 YouTube,由於在審查過程中配置錯誤,整個網際網路中的YouTube 流量路全都輸送到了巴基斯坦 ISP,導致了全球 YouTube 長達數小時的中斷。
在瞭解 BGP 劫持之前,我們需要先掌握一些BGP的基礎知識 。
BGP劫持之所以非常常見,很大一部分原因是因為BGP的設計者並未考慮到BGP劫持的可能性,並且預設所有 BGP “說話者”都在說真話。如果想要瞭解如何減輕這種風險,首先要了解 BGP 字首通告和 BGP 劫持的工作原理。
BGP 如何通告字首?
AS 由多個路由器組成,並在其邊界內包含特定的字首或路由,向相鄰的 AS 通告。BGP 路由器在整個 Internet 中傳播這些字首,並透過各種 AS 維護到該目的地的路徑,每個 AS 負責向其鄰居宣佈它擁有幷包含在其中的字首,BGP 路由器中維護的 BGP 表,其中包含為到達該特定字首必須經過的 AS 路徑。
例如下圖:
當AS 100需要與AS170建立聯絡時,首先需要將自己的字首 195.25.0.0/23 通告給相鄰的 AS。這樣,當該資訊到達 AS 170 時,路由表中的資訊將包括:
字首:195.25.0.0/23
AS_PATH: AS100 AS190
在這個過程中,如果AS 170 收到來自具有不同路徑的此字首,則會優先選擇最短路徑,即綠色虛線建立聯絡。(如紅色虛線路徑更長,穿越的 AS 數量更多,假設之前所有的 BGP 屬性都保持不變,會透過最短路徑,也就是綠色路徑進行傳播。)
在 AS 邊緣與其他 AS 中的 BGP 路由器形成對等互連的是外部 BGP 或 eBGP 路由器,eBGP 路由器負責向其他 AS 通告字首。
當“敵對”AS 宣佈它實際上不受控制的IP字首的路由時,就會發生 BGP 路由劫持。例如,在下圖中,AS 140 非法通告與 AS 100 相同的字首:
AS 140 中的惡意劫持者正在宣傳不屬於自己的 AS 的字首,所有其他 AS 將收到兩個具有相同字首的不同通告,後續的選擇將取決於 BGP 屬性。
所以,AS_PATH 長度屬性在 BGP 劫持中的具有非常重要的作用,假設所有先前的屬性保持不變,將安裝最短 AS_PATH 的路由。如果 AS_PATH 相等,則由其他屬性決定,例如最舊的路徑或路由器 ID,這會導致路由的結果難以預測。在上圖中,只有 AS 190 可以確保正確路由到 195.25.0.0/23 字首。
此外,劫持者可以執行所謂的 AS_PATH 偽造,其中對目的地的通告 AS_PATH 進行修改,以便發往相關路由的流量將透過本地 AS。在這些情況下,合法 AS 包含在 AS_PATH 中,以便在將流量引導至非法 AS 時更難檢測到此類劫持。
那麼BGP劫持會造成什麼後果,劫機者又為什麼要劫持呢?
BGP劫持可能導致網際網路流量出錯,被監控或攔截,被“黑洞”,或者作為中間人攻擊的一部分將流量導向虛假網站。此外,垃圾郵件傳送者可以使用BGP劫持或實施BGP劫持的AS網路,以欺騙合法IP以進行垃圾郵件。
另外,攻擊者可能執行 BGP 路由劫持的原因包括:
l 拒絕對特定線上服務的服務。
l 將流量重定向到偽造網頁,以實現憑據、信用卡號和其他機密資訊的網路釣魚。
l 重定向流量以壓倒某些服務。
l 為了破壞而破壞,進行無差別攻擊。
BGP劫持是對 Internet 上正確路由操作的一個非常真實的潛在威脅。因此,採用適當的機制和配置來防止此類攻擊和事故非常重要。然而,我們並不能直接避免BGP劫持的發生,除了持續監控網際網路流量如何路由之外,使用者和網路可以做很少的事情來防止BGP劫持。
IP段字首過濾
大多數網路應該只在必要時接受IP段字首宣告,並且只應將其IP字首宣告到某些網路,而不是整個Internet。這樣做有助於防止意外的路由劫持,並可能使AS不接受偽造的IP字首宣告; 但是,這在實踐中很難實施。
BGP劫持檢測
劫持檢測可以採取多種形式。基線效能的變化,例如更大的延遲、錯誤的流量或效能的普遍下降是可能表明某種形式的劫持的初步跡象。此外,監控廣告以及記錄路線的可用性和停機時間是發現劫持的重要方面。
更復雜的系統還可以分析來自鄰居的公告 AS 以檢視被劫持的字首是否包含在公告中,可以識別字首不匹配,並使用路徑分析來確保正確的路由。
保護 BGP
從 1989 年BGP首次面世以來,就在不斷的發展和改進。但直到在 2017 年引入 BGPsec 時,才進行了一些安全性的嘗試,但尚未得到任何實質性採用。所以,就目前而言,這個 30 多年的協議本質上仍然很脆弱,需要一些複雜的監控機制來控制它。
有可能有助於打擊 BGP 路由劫持的一個方面是使用路由源授權 (ROA)。ROA 是加密簽名的物件,可用於驗證特定字首是否源自合法 AS。ROA 由每個 AS 所有者與區域網際網路序號產生器構 (RIR) 合作建立,RIR 提供生成它們所需的 RPKI 基礎設施。