近日,一種被稱爲NAT Slipstreaming的攻擊破滅了人們對防火牆和路由器的安全性幻想。
安全研究員Samy Kamkar開發了一種基於JavaScript的攻擊——NAT Slipstreaming,允許攻擊者繞過受害人的網絡地址轉換(NAT,即內網訪問外網時會將內網IP轉爲外網的合法IP)或防火牆安全控制,遠程訪問綁定到受害者計算機的任何TCP/UDP服務-如果首先誘騙了受害人,訪問可能受到黑客控制的網站。
NAT爲通過網絡設備的流量重新映射IP地址空間,該技術在節省IPv4地址空間方面非常有效,此外安全人士還廣泛認爲NAT還有助於提高安全性,例如可以減少資產暴露(編者按:「萬物直聯」也是人們對5G安全性的最大擔憂),但是NAT的安全光環被NAT Slipstreaming給徹底毀掉了。
NAT Slipstreaming的開發者Samy Kamkar指出,該攻擊僅對支持應用程序級別網關(ALG)的NAT/防火牆有效,ALG是支持需要多個端口(控制通道和數據通道)協議才能工作的技術,例如VoIP協議、SIP和H323、文件傳輸協議(FTP)等。
NAT Slipstreaming是一種全新的數據包注入技術,可攻擊所有主流瀏覽器。Kamkar在技術博客中詳細介紹道:
NAT Slipstreaming通過定時攻擊或WebRTC連接內部IP提取、自動遠程MTU和IP碎片發現、TCP數據包massaging、TURN身份驗證濫用、精確的數據包邊界控制以及瀏覽器濫用造成的協議混亂等方式的組合,實現對瀏覽器與路由器防火牆NAT中內置的ALG鏈接追蹤機制鏈接的利用。
由於是通過NAT或防火牆打開的目標端口,因此繞過了任何基於瀏覽器的端口限制。
簡而言之,NAT Slipstreaming利用了某些路由器中的ALG部署方式,從而繞過了NAT。
Kamkar指出,解決NAT Slipstreaming暴露的安全缺陷對於廠商們來說可能是一個困難的挑戰。
可以在路由器上禁用ALG,但這會帶來不便(VoIP電話無法工作)。可以改進SIP ALG,但是SIP只是一部分,其他ALG同樣會暴露問題。
可以在瀏覽器上阻止端口5060,但這並不能解決根本問題:「這事有些鬧心。」
事實上,NAT Slipstreaming並不是嚴格意義上的「漏洞」,也「安全缺陷」是一個更準確的定義。
正如Kamkar所言:「一切協議和功能都符合標準,但是當它們組合在一起進行復雜交互的時候,糟心的問題產生了。」
參考資料
Kamkar技術博客地址:
https://samy.pl/slipstream/
最新研究證明了一項名爲NAT Slipstreaming的技術,攻擊者利用該技術可以繞過防火牆的保護,並遠程訪問受害者機器上的任意TCP/UDP 服務。
NAT Slipstreaming 通過發送一個到惡意站點的鏈接給目標用戶(或加載惡意公告的合法站點),當目標用戶訪問該鏈接時,就會觸發網關打開受害者設備上的任意 TCP/UDP 端口,繞過基於瀏覽器的端口限制。
NAT Slipstreaming 利用了用戶瀏覽器和NAT、路由器、防火牆中內置的Application Level Gateway (ALG) 連接追蹤機制,通過時序攻擊、webRTC、自動遠程MTU和IP 分段發現、TCP 包大小消息、TURN 認證濫用、精確的包邊界控制、通過瀏覽器濫用的協議混淆等實現內部IP 提取。
研究人員在運行Linux kernel v2.6.36.4 版本的NetGear Nighthawk R7000 路由器上對該技術進行了測試。
NAT(Network address translation,網絡地址轉化)是網絡設備在傳輸消息過程中對包的IP header部分的網絡地址信息進行修改實現IP地址空間的映射。NAT 的主要優勢是可以減少組織內部網絡中公網IP 地址的使用和改善安全性。
NAT Slipstreaming利用了TCP和IP 包的分段來遠程調整包的邊界,並用它來創建一個以SIP 方法開頭的TCP/UDP 包,比如REGISTER或INVITE。
SIP (Session Initiation Protocol,會話發起協議)是用來爲聲音、視頻和消息應用發起、維護和終止實時多媒體會話的通信協議。HTTP中的包分段和僞造的SIP 請求的混合可以用來誘使 NAT ALG 打開任意到客戶端的內部連接的端口。
爲實現這一目的,需要發送大量含有ID和隱藏了web表單的HTTP POST請求,隱藏的web表單指向一個運行包嗅探器的攻擊服務器,用來獲取MTU 大小、數據包大小、TCP和IP header大小,然後將這些大小數據通過POST 消息發送回給受害者客戶端。
此外,攻擊者還濫用了TURN (Traversal Using Relays around NAT,使用中繼穿越NAT) 中的認證函數。TURN 協議允許一臺主機使用中繼服務與對端進行報文傳輸。攻擊者濫用 TURN 協議中的認證函數來引發包溢出,使得IP 包分段。即通過 padding 填充來溢出 TCP或 UDP 包,使得其分割成2部分,因此SIP 數據包就會在第二個包邊界的開始部分。
在攻擊的第二階段,攻擊者會通過瀏覽器上的WebRTC ICE 或通過在網關(192.168.*.1或10.0.0.1) 上轉型時序攻擊來提取受害者的內部IP 地址。
一旦客戶端獲取了包大小和內部IP 地址,就會構造一個web表單來填充POST 數據直到包被分段,此時加上包含內部IP 地址的SIP REGISTER。然後該表單會通過JS 在受害者不知情的情況下提交。
當包到達攻擊者服務器後,如果SIP 包沒有用公網IP 地址覆寫,就會自動發送消息給客戶端,要求調整包大小爲新的邊界。
如果包邊界正確,NAT會認爲這是一個合法的SIP 註冊,並且來自受害者機器的SIP 客戶端,最終NAT 會打開受害者發送的原始包的端口。
然後,路由器會轉發攻擊者選擇的端口給內部受害者。NAT Slipstreaming的完整PoC 代碼參見:https://github.com/samyk/slipstream
更多參見NAT Slipstreaming攻擊主頁:https://samy.pl/slipstream/