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