SSH介紹及應用
作者/鄭翔文
前言
SSH為Secure Shell的縮寫,由IETF的網路工作小組(Network Working Group)所制定;SSH為建立在應用層和傳輸層基礎上的安全協定。
使用SSH的原因
傳統的網路服務程式,如FTP、POP和Telnet其本質上都是不安全的;因為它們在網路上使用明碼傳送資料、使用者帳號和使用者密碼,很容易受到中間人(man-in-the-middle)攻擊方式的攻擊。就是存在另一個人或者一台機器冒充真正的伺服器接收使用者傳給伺服器的資料,然後再冒充使用者把資料傳給真正的伺服器。
而SSH是目前較可靠,專為遠端登入會話和其他網路服務提供安全性的協定。利用SSH協定可以有效防止遠端管理過程中的資訊洩漏問題。透過SSH可以對所有傳輸的資料進行加密,也能夠防止DNS欺騙和IP欺騙。
SSH之另一項優點為其傳輸的資料是經過壓縮的,所以可以加快傳輸的速度。SSH有很多功能,它既可以代替Telnet,又可以為FTP、POP、甚至為PPP提供一個安全的「通道」。
基本架構
SSH協定框架中最主要的部分是三個協定:
一、傳輸層協定(The Transport Layer Protocol):傳輸層協定提供伺服器認證,資料機密性,資訊完整性等的支援。
二、使用者認證協定(The User Authentication Protocol):使用者認證協定為伺服器提供用戶端的身份鑒別。
三、連線協定(The Connection Protocol):連線協定將加密的資訊通道切成若干個邏輯通道,提供給更高層的應用協定使用。
同時還有為許多高層的網路安全應用協定提供擴充功能的支援。各種高層應用協定可以相對地獨立於SSH基本體系之外,並依靠這個基本框架,透過連線協定使用SSH的安全機制。
在用戶端來看,SSH提供兩種等級的安全驗證。
一、第一種等級(基於密碼的安全驗證):
知道帳號和密碼,就可以登入到遠端主機,並且所有傳輸的資料都會被加密。但是,可能會有別的伺服器在冒充真正的伺服器,無法避免被「中間人」攻擊。
二、第二種等級(基於密匙的安全驗證):
需要依靠密匙,也就是你必須為自己建立一對密匙,並把公有密匙放在需要存取的伺服器上。用戶端軟體會向伺服器發出請求,請求用你的密匙進行安全驗證。伺服器收到請求之後,先在你在該伺服器的使用者根目錄下尋找你的公有密匙,然後把它和你發送過來的公有密匙進行比較。如果兩個密匙一致,伺服器就用公有密匙加密「質詢」(challenge)並把它發送給用戶端軟體。從而避免被「中間人」攻擊。
在伺服器端,SSH也提供安全驗證。在第一種方案中,主機將自己的公用密鑰分發給相關的客戶端,客戶端在存取主機時則使用該主機的公開密鑰來加密資料,主機則使用自己的私有密鑰來解密資料,從而實作主機密鑰認證,確定客戶端的可靠身份。 在第二種方案中,存在一個密鑰認證中心,所有提供服務的主機都將自己的公開密鑰送出給認證中心,而任何作為客戶端的主機則只要保存一份認證中心的公開密鑰就可以了。在這種模式下,客戶端必須存取認證中心然後才能存取伺服器主機。
版本比較
目前SSH有1.x及2.x兩種不相容的版本,以下針對兩種不同版本做比較:
Version 1.x
一、當每次SSH daemon (sshd) 啟動時,就會產生一支768-bit的公鑰或稱為Server key 存放在Server中。
二、若有Client 端的SSH連線需求傳送來時,那麼Server就會將這一支公鑰傳給Client,此時Client也會比對一下這支公鑰的正確性。
三、在Client接受這個768-bit的Server key之後,Client自己也會隨機產生一支256-bit的私鑰(host key),並且以加密的方式將公鑰與私鑰整合成一對完整的Key pair,並且將這對 Key pair 也傳送給Server。
四、Server與Client 在這次的連線當中,就以這一對1024-bit的Key pair來進行資料的傳遞。
Version 2.x
一、由於在1.x的連線過程中,當Server端接受Client端的private key後,就不再針對該次連線的key pair進行檢驗。此時若有惡意的cracker針對該連線給予惡意的程式碼時,主機端可能會接受該程式碼,進一步造成系統加密被破解的問題。
二、為了改正這個缺失,2.x多加了一個確認連線正確性的Diffie-Hellman機制,在每次資料的傳輸當中Server端都會以該機制檢查資料的來源是否正確。
所以SSH version 2是比SSH version 1較安全的。
結語
Secure Shell最初由芬蘭的一家公司開發,因受版權和加密算法等限制,現多轉用OpenSSH,OpenSSH是SSH的替代軟體而且是免費的。只要在Server端上安裝OpenSSH Server,或是有一台支援DD-WRT第三方韌體的Router,就可以使用SSH Client端軟體(如putty)來跟Server建立安全的加密通道。
當你在網路安全性不高的地方上網,如外面的速食店及咖啡廳等等,使用一些明碼的網路協定,如msn、http等,就可以利用與SSH Server間的加密通道來傳遞資訊,再由Server代傳資訊至目的地,否則你的資訊將會被有心人所擷取。
參考資料
http://en.wikipedia.org/wiki/Secure_Shell
http://zh.wikipedia.org/zh-tw/SSH
http://www.openssh.com/
http://www.putty.org/