相信有不少人都曾經用過 SSH 來進行主機的管理。大多數的主機都會啟用 SSH 服務,提供給負責管理維運網路或系統的IT管理人員進行遠端登入使用。因為使用到SSH服務是很常見的,而且多半是屬於敏感重要的情況,因此當有網路犯罪者在嘗試攻擊的時候,通常會將 SSH 服務納入攻擊範圍內。因此讓我們了解一下什麼是 SSH 服務?以及要如何安全的使用SSH服務。
認識SSH服務
早期的網路環境,會利用像是 Telnet 、 rsh 等協定來進行遠端主機的登入,對於在90年代曾用過BBS站台的前輩或許有些記憶印象,這類的通訊方式是將文字訊息模式進行傳送,因此網路傳輸量很小,相對需要的網路頻寬少、傳輸速度快。不過,這些透過Telnet或rsh方式的通訊過程中是採取不加密的「明文傳輸 (或說 明碼傳輸)」,而明文傳輸也就意味著「傳送的內容能夠被看光光」的情況,因此存在著被監聽、中間人攻擊等安全性上的問題跟疑慮。
為了解決這樣的問題,因此設計了 SSH協定來取代 Telnet及rsh這類不安全的方式。SSH的全名為Secure SHell 安全加殼協定,是一種加密的安全網路傳輸協定,主要是在不安全的網路環境下為網路服務提供安全連線,常見的用途為遠端登入系統以及遠端執行指令等等。
現今,SSH已經是一種被廣泛使用的連線方式,包括眾所熟知的Linux、Unix、Windows等作業系統,還有各種網路及安全設備、雲端環境的系統以及容器化環境等等,都可見到提供 SSH 協定的功能支援。而這要歸功於 OpenSSH這個開源計畫的出現,因此目前大多都已經用 SSH 取代了之前不安全的連線方式。
該注意的SSH安全風險
雖然,不論是SSH安全通訊或OpenSSH開源軟體都是相對安全可信的方式,但仍舊會有「不安全的資安問題」需要關注!
SSH通訊方式以非對稱式加密的方式來進行身份驗證,常見有兩種登入的方式,一種是利用自動生成的公鑰和私鑰來進行加密連線,再利用密碼驗證登入。另一種方式是先產生一組金鑰,例如用 ssh-keygen 的方式產生,將產生的公鑰放在遠端的主機上,client 端上存放著私鑰,連線時直接透過金鑰進行驗證。以安全性來說,第一種密碼驗證的方式,可能會被攻擊者利用憑證填充攻擊的方式進行暴力破解,因此比較建議利用第二種金鑰驗證的方式進行連線,或是利用多因子驗證的方式進行連線。 SSH 服務安全性上比較常見的問題,例如有因為支援弱加密演算法而產生的弱點、披露的CVE漏洞等。前者可能加密內容會因此被破解,後者可能會發生攻擊者遠端執行任意程式碼的情況。想避免或是降低發生事件的風險,前者可以透過修改設定檔取消支援不安全的加密演算法,後者大多數的情況下是需要進行版本更新來修補漏洞。
安全的使用SSH服務
想要安全的使用SSH 服務,以下幾個建議提供參考:
網路存取管控
SSH主要使用的網路埠為Port 22,因此對於連線的網路防火牆做好SSH (Port 22)的通訊管制是必要的基礎工作,甚至是對應系統主機的位址(IP 及 Mac)綁定,避免不需要提供SSH服務的系統被非法利用,並且對允許提供SSH服務的系統持續監控。
使用存取管控
SSH服務的存取使用可能是來自於人或系統設備,因此應該盡量避免直接使用預設的高權限帳號登入,並且建議使用金鑰驗證的方式、或是採用多因子驗證進行連線。有2個重點更需要注意:
1. 第一是檢查『不允許提供SSH服務的系統』上是否開放了不必要的SSH服務,尤其是在Linux或UNIX的系統環境經常發生SSH服務為預設啟用,但是被IT管理者忽略。
2. 第二是檢查『允許提供SSH服務的系統』上是否有不必要的使用帳號,比如共用帳號或預設服務帳號,容易被遭到暴力破解並利用。
漏洞安全管理
任何系統及服務都存在不安全風險,尤其是漏洞問題。因此在漏洞安全的重點有2個層面:
1. 掌握有關SSH通訊協定的漏洞安全問題,針對『通訊協定』,這是存在機制的問題,只要是利用SSH通訊服務相關的安全問題都可能被攻擊。
2. 掌握有關OpenSSH開源軟體的漏洞安全問題,針對『OpenSSH開源軟體』的漏洞問題,這也涉及軟體供應安全的議題,例如某個商用系統軟體中內置了OpenSSH作為SSH服務元件的情況。
安全設定與稽核
1. 禁止使用容易被破解的弱加密演算法設定,避免SSH連線的加密訊息被攔截破解。
2. 設定存取的稽核要求,比如嘗試登入失敗的次數限制、限定登入閒置超時的自動登出、取得SSH登入跟使用的稽核紀錄等。
結論
SSH連線服務是一種使用性極為廣泛,並且多數使用情境是屬於管理操作性質,傳輸的訊息資料也相對敏感重要,因此也藉由本篇的說明來提供各位對於SSH安全有更多的認識了解。
參考連結
Comments