如果滿足條件,處于優勢位置的攻擊者可以利用SSH協議中的一個漏洞,削弱人們連接的安全性。
SSH協議是一種遠程連接計算機的標準。該協議在互聯網中扮演了極其重要的角色,它是數百萬組織內部應用程序安全的基石,保護了谷歌、亞馬遜、Facebook和其他大公司至關重要的云環境。
Terrapin攻擊概述
通過中間人攻擊,攻擊者可能迫使SSH客戶端采用較弱的身份驗證方式,并停用一些防御機制。目前很難準確評估這個漏洞的真正影響,因為它完全取決于各個客戶端-服務器的配置、協議實現及其他因素。SSH軟件的主要用途是通過命令行界面連接遠程系統,從而使用或管理這些系統。
德國波鴻魯爾大學的計算機科學家Fabian B?umer、Marcus Brinkmann和J?rg Schwenk發表合著的技術論文,描述了Terrapin攻擊技術。他們于今年10月發現這一漏洞,私下向SSH客戶端和服務器的開發人員披露了細節。目前所有的補丁和信息都已經公開。
如果各位讀者對底層細節感興趣的話,三位研究人員在GitHub上發布了相關的概念驗證腳本和其他材料。此外,他們還提供了一個開源工具,可用于檢測用戶SSH客戶端或服務器是否容易受到Terrapin攻擊。
基于這項研究成果,SSH軟件更新應該正在逐步向用戶發布,并同時提供一些臨時的緩解措施。這并不是一個需要恐慌的問題,因為攻擊者是針對您脆弱的連接發動中間人攻擊,而不是直接攻擊您的服務器。這本質上是一種降級攻擊,而非解密或命令注入問題。而且有很多方法,可以立即保護自己免受Terrapin攻擊。
Terrapin攻擊包括三個漏洞:CVE-2023-48795,這是通用的可利用的協議級SSH漏洞;CVE-2023-46445和CVE-2023-46446,這些是針對Python SSH客戶端AsyncSSH的特定漏洞,該客戶端每日下載量高達6萬次。
AsyncSSH客戶端的開源代碼存在特定于該客戶端的實現錯誤。這些錯誤可以被利用發動Terrapin風格的攻擊,例如讓受害者不知情地登錄到攻擊者控制的shell帳戶,而不是他們自己的帳戶。這說明不同客戶端和服務器可能以不同方式容易受到Terrapin攻擊。AsyncSSH已經發布修補版本,以解決版本2.14.1中的CVE-2023-46445和CVE-2023-46446問題,以及版本2.14.2中的通用CVE-2023-48795問題。
Terrapin攻擊原理
Terrapin(CVE-2023-48795)是一種前綴截斷攻擊,攻擊者使用中間人攻擊,能在SSHv2連接的擴展協商期間降低其安全性。這與2015年Cédric Fournet在TLS 1.3協議中發現并于草案階段修復的漏洞類似。
正如三位研究人員所述,一次成功的Terrapin攻擊可能會“導致使用不夠安全的客戶端身份驗證算法,并禁用OpenSSH 9.5中針對擊鍵定時攻擊的特定防御措施。”在某些非常特定的情況下,這種攻擊手段可以用來解密一些機密信息,例如部分或全部破解用戶登錄密碼。但這并不簡單,在實際操作中很可能失敗。
讓我們更加深入地了解Terrapin攻擊原理。SSH客戶端連接到SSH服務器時,在建立安全加密通道之前,它們會進行一次握手。通過握手,它們以明文形式互相交換信息。每一方都擁有兩個序列計數器:一個針對接收消息,另一個針對發送消息。每發送或接收一條消息,相應的序列計數器的計數就會增加。這樣,這些計數器記錄了每一方已發送和已接收消息的總數。
作為中間人攻擊,Terrapin會在安全通道建立之前的握手階段注入一條明文的“忽略”消息,使客戶端誤以為消息來自服務器,讓接收消息序列計數器增加計數。消息本身將被忽略。此后,一旦建立了安全通道,中間人攻擊者會阻止服務器向客戶端發送有關額外防御措施的消息。消息是否加密并不重要:攻擊者只是阻止其到達,客戶端既看不到也不會對其做出反應。
由于之前插入了一條明文的“忽略”消息,客戶端最終仍然會收到預期數量的接收消息,而服務器則認為它已發送了正確數量的消息。
即使在初始化過程中,消息被中間人攻擊者攔截和阻止,雙方的發送和接收的序列計數器都顯示正確。這一點至關重要,因為這些計數器隨后用于驗證握手過程是否完整。只要計數正確,將被允許繼續連接。這就是為什么要插入“忽略”消息。目的是在安全通道中阻塞擴展消息時,客戶端和服務器都不知情。
這篇關于Terrapin攻擊的論文提供了攻擊流程圖。其中,正被驗證的序列號以粗體顯示。如需了解所有細節,請參閱論文。
可以在建立連接過程中插入任意數量的“忽略”消息,從而阻止來自服務器發送到客戶端的消息。就像這篇技術論文展示的那樣,您可以巧妙地調整注入和阻止消息的順序,以進行更復雜的攻擊。通過這種方式,可以干擾連接的設置,降低所使用的安全性,禁用擴展,并可能利用特定客戶端或服務器實現中更深層次的漏洞。
以上說明,能否成功攻擊SSH連接,安全通道所采用的加密算法起到決定性作用。
據稱,由于序列號在密鑰派生中的使用方式,ChaCha20-Poly1305容易受到Terrapin攻擊并可以完全被利用。這個算法本身并沒有加密弱點,只是在SSH中的使用方式存在問題。
我們了解到,CBC-Encrypt-then-MAC(CBC-EtM)也容易受到攻擊,并且“有概率”可以被利用。當然,根據具體的實現情況,攻擊可能會失敗。CTR-Encrypt-then-MAC算法容易受到攻擊,但實際上無法被利用。
超過77%的面向公眾的SSH服務器支持“至少一種在實踐中可以被利用的模式”。三位研究人員表示,其中57%將可被利用的算法設置為首選。
打補丁還是采取緩解措施?
研究人員很快得出結論,這個漏洞并不需要立即停止工作并優先處理。
他們說:“這種攻擊需要主動的中間人攻擊者有能力攔截并修改連接在TCP/IP層的流量。此外,需要協商使用ChaCha20-Poly1305或任何密碼分組鏈接(CBC)模式與Encrypt-then-MAC結合作為連接的加密模式。”
留意補丁或軟件更新是一個不錯的選擇。這樣,在有需要時可以快速安裝。如果您使用Linux系統,通過常規的發行版更新應該可以獲取補丁或軟件更新。
本周一發布的OpenSSH 9.6包含了對Terrapin的嚴格密鑰交換協議的修復。如果服務器和客戶端都支持的話,這就足以挫敗Terrapin攻擊。
研究人員指出,“將一個容易受攻擊的客戶端連接到已修復的服務器上,或將容易受攻擊的服務器連接到已修復的客戶端上,仍然會導致連接易受攻擊。”
與此同時,Putty 0.8于本周發布,以解決Terrapin問題。libssh 0.10.6和libssh 0.9.8也已發布,以抵御Terrapin攻擊。我們預計還會有其他解決方案。
除了安裝軟件更新之外,管理員還可以通過在SSH服務器配置中禁用受影響的加密模式并使用無漏洞算法(如AES-GCM)來緩解攻擊。
研究人員警告說,如果服務器配置不當或客戶端不支持配置,可能會導致服務器訪問失敗。舊版本的OpenSSH(6.2和6.3)在使用AES-GCM時也容易受到緩沖區溢出的攻擊,需要特別注意。
三位研究人員總結道:“Terrapin不是一個可以通過更新單個庫或組件來修復的簡單軟件漏洞。相反,客戶端和服務器都需要更新,保護連接免受前綴截斷攻擊。這意味著我們需要加強對所有SSH客戶端和服務器實現問題的認識,這需要相當大的工作量。”
參考資料:https://www.theregister.com/2023/12/20/terrapin_attack_ssh/
來源:安全內參