跨網域路由與 BGP

BGP 劫持(BGP hijacking)

BGP 在很大程度上靠信任運作:當一個網路宣告「我能抵達前綴 P」時,它的鄰居大多會相信。BGP 劫持(BGP hijacking)正是濫用這份信任。它發生在某個自治系統宣告了它其實並不擁有的 IP 前綴(或別人前綴中更具體的一小段),而其他網路接受了這條假路由、開始把受害者的流量送往攻擊者。可以想像有人為你家小鎮的地址立了一塊假路標——而駕駛人乖乖照著開進死路或埋伏之中。

它之所以行得通,源於兩個事實。第一,BGP 沒有內建的所有權證明:路由器在歷史上就是照單全收前綴宣告。第二,路由器偏好更具體的路由。所以若受害者擁有 203.0.113.0/24,而攻擊者宣告 203.0.113.0/25(更小、更具體的一半),最長前綴匹配(longest-prefix match)就意味著許多路由器會改把那段流量送往攻擊者——即使受害者自己正確的宣告仍然存在。被劫持的流量接著可能被吞掉(丟棄,造成斷線)、被竊聽或竄改(中間人攻擊),或被用來假冒服務。著名事件曾在全球把網站打到離線,也曾改道加密貨幣流量以竊取資金。

劫持有時是惡意的;但同樣常見的是意外——一次手滑的設定,或一次逸出網路邊界的路由洩漏。主要的防禦是後來才加裝在這個原本毫無安全機制之協定上的鑑別系統:資源公開金鑰基礎建設(RPKI)讓前綴擁有者以密碼學方式宣告「哪個 AS 被允許起源它」(一份路由起源授權,ROA),而路由起源驗證(ROV)讓路由器拒絕不相符的宣告。這些有助於對抗起源劫持,但 BGP 的安全性仍在進行中——RPKI 並不驗證整條 AS 路徑,而其採用率雖在上升,卻遠未普及。

受害者正確地宣告 203.0.113.0/24。攻擊者的 AS 卻宣告 203.0.113.0/25 與 203.0.113.128/25——兩段更具體的半段。因為路由器偏好最長前綴匹配,全世界送往那些位址的流量都會流向攻擊者,即使受害者的 /24 仍在被宣告。若部署了 RPKI/ROV,鄰居會發現攻擊者的 AS 並非被授權的起源,便丟棄那些偽造的宣告。

宣告一段你並不擁有、更具體的前綴,會透過最長前綴匹配把流量導走;RPKI/ROV 是主要的防禦手段。

劫持往往是意外(路由洩漏、打錯字),而非攻擊——而且 RPKI 只驗證路由的「起源」,不驗證整條 AS 路徑,所以它是針對 BGP 信任問題的部分修補,而非完整解方。

又称
prefix hijackingroute hijackingBGP 劫持前綴劫持