ASN 劫持:為何 IP 地理位置資料會有時間差
ASN 劫持,更精確地說是 BGP 路由劫持,發生在某個網路宣告自己無權發起的 IP 前綴,或以會讓其他網路把流量送往它的方式宣告前綴時。由於 IP 地理位置與 ASN 資料集是以定期快照建置而成,通常無法在劫持發生的當下顯示出來。
BGP 劫持如何運作
網際網路上的每個網路都以自治系統編號(ASN)識別,並使用邊界閘道協定(BGP)告知鄰居自己可以到達哪些前綴。BGP 的設計建立在信任之上:預設情況下,收到宣告的鄰居沒有內建方式可以確認宣告者是否真的擁有該前綴。路由器接著依照最短 AS 路徑等規則選擇最佳路徑,其中最優先的是最長前綴匹配。
攻擊者與設定錯誤所利用的正是最後這條規則。如果合法網路宣告了一個 /22,而別人在其中宣告了更具體的 /24,接受該 /24 的路由器會優先選擇它,因為越具體的路由越優先。這 256 個位址的流量便會流向錯誤的網路。變體包括直接發起他人的前綴、偽造部分 AS 路徑,以及洩漏本應留在內部的路由。許多實際事件其實是意外,例如客戶把完整路由表洩漏給上游,但對流量的影響是相同的。
流量會發生什麼事
吸引到流量的攻擊者可以丟棄它(黑洞)、檢查它,或把它轉送到真正的目的地,讓使用者只感覺到些微延遲而毫無察覺。對於受 TLS 保護的內容,加密可以限制損害,不過劫持也曾被用來攔截網域驗證流量以取得憑證,以及攔截 DNS。持續時間從數分鐘到數小時不等,這正是偵測速度如此重要的原因。
為何地理位置與 ASN 資料集有時間差
地理位置與 ASN 對應前綴的資料集,是從註冊機構資料、路由快照及其他來源彙編而成,再以版本形式發布。它們回答的是「通常由誰持有這個範圍」,而不是「此刻是誰在宣告它」。在 ipto 上,IP 與 ASN 資料集每天更新,威脅情資來源每 6 小時更新,因此持續一小時的劫持,通常會在兩次更新之間就開始並結束。事件期間,對受影響位址的查詢多半仍會顯示合法的擁有者,而這正是該資料集所設計要回答的問題的正確答案。
還有兩個因素加劇了時間差。註冊記錄的變動很緩慢,因此位址區塊不會因為一次路由事件而更換組織。而且,從前綴推斷城市的地理位置資料庫,不會在每次路由改變時都重新推斷。反過來說,穩定的資料反而可作為基準:它告訴你誰應該發起某個前綴,而這正是你拿來與即時路由資料比對的對象。
如何檢查可疑的路由
- 掌握預期的來源。ASN 查詢會顯示某個 AS 編號的註冊擁有者、組織、國家與範圍數量,而 IP 範圍目錄讓你瀏覽特定 /8 或 /16 區塊由哪些網路持有。
- 檢查註冊資訊。IP whois 查詢透過 RDAP 回傳註冊機構記錄,包括你會通報的濫用聯絡窗口。
- 驗證路由來源。RPKI 查詢會透過 RIPEstat 即時檢查某個 IP 目前所宣告的路由,是否被有效的路由來源授權(ROA)涵蓋,並回報有效、無效或未涵蓋的結果。
解讀 RPKI 結果時請務必謹慎。「無效」代表來源 AS 或前綴長度與擁有者授權的內容不符,值得調查。「未涵蓋」僅表示不存在 ROA,這很常見,並不能證明發生了劫持。RPKI 也無法防禦所有攻擊,例如保留正確來源的偽造 AS 路徑。發布 ROA 並依其過濾的營運者可以降低暴露風險,而針對你的前綴出現非預期來源時發出警示的監控服務,其通知速度會比任何資料集更新都快。
這對應用程式意味著什麼
如果你的應用程式使用 ASN 或地理位置資料來做決策,例如詐欺評分或區域規則,請將它視為變動緩慢的脈絡資訊,而不是連線實際終止位置的證明。ipto 的 IP 查詢會回傳 asn 與 org 欄位,你可以在 API 文件中查閱回應格式。已知客戶所連線的網路突然改變是有用的訊號,但劫持只是眾多可能解釋之一,而大多數這類變化都很平常:換了新的 ISP、行動網路切換,或是使用了 VPN。