Internet是当今广泛使用的计算机网络,TCP/IP协议则是Internet采用的核心网络通信协议。由于TCP/IP协议本身缺乏可靠的安全机制以及Internet的开放性,其安全性就显得更加脆弱。目前有多种网络安全的解决方案,分别实现在TCP/IP协议栈的不同层次上:在物理层上使用机械或电器方法防止信息被非法窃取,如电磁泄漏保护;在数据链路层上使用硬件加密设备直接加/解密链路两端的数据或采用用于组建远程访问VPN的安全协议PPTP和L2TP创建安全通道;在网络层上通过基于IPSec规范的安全协议实现各种方式的VPN;在传输层使用SSL,TLS等安全协议提供端对端的安全通讯;在应用层则可以实现对某些特殊服务进行单独保护,如S-HTTP等。在众多的网络安全解决方案中,当然可以采用VPN和防火墙来保护自己的信息安全。然而,除了这些措施以外,很多公司实际上遗漏了一种不起眼但却很健壮有效的解决方案---(SSH(SecureShell)。
1SSH协议
1.1SSH协议介绍
SSH,即SecureShell,是一种介于传输层和应用层之间的加密隧道协议,具有C/S的体系结构。SSH可以在本地主机和远程服务器之间设置“加密隧道”,并且这样设置的“加密隧道”可以跟常见的FTP,SMTP,POP应用程序,X应用程序相结和。目的是要在非安全的网络上提供安全的远程登陆和相应的网络安全服务。既然SSH是以提供安全服务为目标的协议,其中必不可少的是一套完备的密匙机制。由于SSH协议是面向互联网中主机之间的互访与信息交换,所以主机密匙成为基本的密匙机制。即SSH要求每一个使用本协议的主机都必须至少有一个自己的主机密匙对,服务器方通过对客户方主机密匙的认证之后,才允许其连接请求。一个主机可以使用多个密匙,针对不同的密匙算法而拥有不同的密匙。
SSH在运行方式上,不像其他TCP/IP应用,被设计为工作于自己的基础之上,而不是利用包装(Wrappers)或通过Internet守护进程inetd运行。
1.2SSH协议工作机制
根据IETF关于SSH草案的定义,SSH协议包含3个组成部分(层次)。
(1)传输层协议(SSH-TRANS)
SSH的传输层协议负责进行服务器认证,数据加密和完整性保护,并可以提供数据压缩的功能。SSH传输层协议是建立在提供“底层”可靠的TCP连接之上的,当然,也可以用在其他可靠的数据流协议中。传输层的认证是基于主机的(并非面向用户的认证),目的就在于为真正的上层应用提供安全保证。当SSH用在TCP/IP协议上时,SSH服务器一端一般会监听TCP22端口,一旦客户端和服务器端的TCP连接建立起来,SSH传输层协议就开始发挥作用了。在这个阶段,客户端和服务器要约定使用的SSH协议版本,要协商选定双方都支持的认证算法、加密算法、哈希算法和数据压缩算法。协商好认证算法和密匙交换方法后,服务器端会向客户端发送自己的主机密匙(HostKey),即服务器的公匙(PublicKey),以验证服务器的身份。双方还要依据协商好的加密算法生成一次性加密密匙,用于对整个商变更加密密匙。此外,传输层协议需要生成一个会话ID(SessionIdentifier),用于惟一标识本次会话连接。等所有这些过程结束后,客户端就可以向服务器发送服务请求了,服务器接受2类请求:用户认证服务(SSH-USERAUTH)和连接服务(SSH-COMMECTION)。
SSH支持的公匙算法有DSA和RSA,支持的对称密匙算法包括DES,3DES,Blowfish,Twofish,IDEA,ARCFOUR和CAST-128,支持的哈希算法有SHA-1,MD5等,支持Diffie-Hellman密匙交换方法。
(2)用户认证协议(SSH-UXERAUTH)
用户认证协议是建立在传输层协议之上的,当用户进行认证时,假定底层(传输层)协议已经提供了数据完整性和机密性保护。用户认证协议接受传输层协议确定的会话ID,作为本次会话过程的惟一标识。服务器首先会发起用户认证,他他会告诉客户端服务器所支持的认证方式,客户端可以从中选择。一旦用户认证成功,根据客户端的请求,服务器将会启动相应的服务(在连接协议建立的逻辑通道中进行数据传输)。SSH支持的用户认证方法包括:公匙认证方法、口令认证方法、基于主机的认证和PAM认证等。
(3)连接协议(SSH-CONNECT)
连接协议可以提供交互的Shell会话,支持远程命令执行,提供TCP端口以及X11连接转发功能。通过将惟一一个加密隧道(tunnel)多路复用成若干个逻辑通道,提供给更高层的应用协议使用。逻辑通道是由两端的通道号来惟一标识的。要启动某个应用服务,首先要建立一个新的逻辑通道,这期间,先要分配两端的通道号,协商缓存窗口的大小,然后是建立正式的会话,启动应用程序。各种高层应用协议可以相对独立于SSH基本体系之外,并依靠这个基本框架,通过连接协议使用SSH的安全机制。
1.3核心算法
以SSH协议2.0为例,其常用公匙算法RSA或DSA进行身份认证,用对称密匙算法3DES进行传输数据加密,用Diffie-Hellman密匙协议算法交换密匙,用散列函数SHA-1或MD5进行完整性检测,用zlib进行数据压缩。
2具体应用及安全模型
具体应用时,SSH可以提供3类服务:
2.1安全远程登录和安全远程命令执行:替代传统的telnet和rlogin,rsh命令
网络遭受攻击,很多情况是由于服务器提供了Telnet服务引起的。对于UNIX系统,如果要远程管理他,必定要使用远程终端,而要使用远程终端,自然要在服务器上启动Telnet服务。但是Telnet服务有一个致命的弱点他以明文的方式传输用户名及口令,所以,很容易被第三者窃取口令。一种有效代替Telnet服务的工具就是SSH。用户要登录到远程计算机用户账号中,可以使用命令:
#sshusername@remotecomputer
整个登录会话在客户端和服务器之间传输时都是经过加密的,从而实现了安全远程登录。
对系统管理员来说,如果要查看局域网中4台计算机(A,B,C,D)上的每个用户启动的进程,按传统方法,可以使用rsh:
#!/bin/sh
formachineinABCDdo
rsh¥machine/usr/ucb/w
done
虽然这种方法可以达到目的,却不安全。/usr/ucb/w的结果在网络上是明文传输的。可以利用SSH代替RSH,实现安全远程命令执行。
2.2安全文件传输:替代传统的rcp,ftp命令
传统的文件传输程序(ftp.rcp或E-mail)都不能提供一种安全的解决方案。当文件在网络上传输时,第三方总可以将其截获并读取其中的数据包。要防止这种问题,可以采取很多措施,例如,在源计算机上使用PGP(PrettyGoodPrivacy)之类的程序对文件进行加密,然后使用传统的方法把文件传输到目的计算机,并在此处解密文件。然而,这个过程比较复杂,而且对用户不是透明的。利用SSH,用户只需使用一个拷贝命令scp就可以在两台计算机之间安全的传输文件:#scpname-of-sourcename-of-destination,文件在离开源计算机时加密,到达目的计算机时自动解密。虽然scp命令十分有效,但用户可能更熟悉ftp的命令。sftp是在SSH之上的一个基于SFTP协议的独立的文件传输工具:
#sftpusername@remotecomputersftp>
sftp>
在一个sftp会话中可以调用多个命令进行文件拷贝和处理,而scp每次调用时都要打开一个新会话。
其实,SSH并不执行文件传输。在SSH协议中没有任何传输文件的内容,SSH通信者不能请求对方通过SSH协议来发送或接收文件。scp,sftp程序并没有真正实现SSH协议,也根本没有融合什么安全特性。实际上,他们只是在一个子进程中调用SSH进行远程登录,然后传输文件,最后调用SSH关闭本次连接而已。
2.3转发:包括对各种TCP应用的端口转发以及X11连接转发
SSH可以增加基于TCP/IP的应用程序的安全性。这是通过一种称为转发(forwarding)或隧道(tunneling)的技术来实现的。该技术通过对TCP/IP连接进行重新路由,使其通过SSH连接传输,并且透明地进行端到端的加密(实际上,这已经算是基本的VPN功能了)。
2.3.1端口转发(portforwarding)
SSH使用的传输机制是TCP/IP,通常使用的都是服务器的TCP端口22,并对经过连接传输的数据进行加解密操作。用SSH对其他应用程序在别的TCP端口上建立的TCP/IP传输进行加密和解密,这一过程称为端口转发。端口转发可以使telnet,pop3,smtp,nntp和imap等基于TCP/IP的不安全协议变得安全。
假设用户要在家里的主机H上运行一个Email阅读程序,访问位于企业局域网内部的一台IMAP服务器S。要使IMAP连接通过SSH隧道,就得在主机H上选择一个本地端口(1024~65535),将其发送至远程套接字(S,143)。假设随机选取本地端口2003,则创建隧道的命令为:#sshL2003:localhost:143S,其中,-L表明是本地转发,此时TCP客户端与SSH客户端同在本地主机上。现在,Email阅读程序连接本地套接字(localhost,2003)即可安全的阅读IMAP服务器上的邮件。
远程转发与本地转发几乎完全相同,只是方向相反,此时TCP客户端在远程,服务器在本地,转发连接由远程主机发起(其创建隧道的命令为#ssh-R2003:localhost:143H)。
一般意义上讲,SSH端口转发是TCP使用的一种通用代理机制,而且只能用于TCP/IP协议,如果协议不是基于TCP的,比如基于UDP的DNS,DHCP,NFS和NetBIOS或者非IP类协议,如AppleTalk或Novell的SPX/IPX,就不能使用端口转发机制。
2.3.2X转发
XWindow是Unix工作站上很流行的窗口系统,其中一项重要功能就是他的透明性。用户可以运行远程X应用程序,并将其显示在本地机器上。但是机器间的通讯不安全,他完全暴露在窥探器之下。利用SSH,可以将X协议连接导入SSH连接,以保障其安全性,并提供更强的认证,此项功能称为X转发。X转发是端口转发的一个特例,SSH对此提供特别支持。
以SSH2.0协议的实现为例,在客户端配置文件中将关键字ForwardX11设置成yes或no来启用或禁用X转发。服务器范围配置关键字X11Forwarding及其同义词ForwardX11和AllowX11Forwarding可以在服务器端启用/禁用X转发。
在以上SSH所提供的3种服务的基础上,可以建构基于SSH的网络安全模型,如图1所示。
企业实际部署时可将防火墙与SSH服务器实现于同一台计算机,即企业局域网的网关主机中。SSH可采用免费的OpenSSH或商业产品F-SecureSSH,而防火墙则采用普通的软件防火墙产品,例如东大阿尔派NetEye2.0。
3安全性分析
SSH解决了许多和网络有关的安全漏洞,有效地防止了网络窃听(Sniffer)、IP欺骗、DNS欺骗、连接劫持(ConnectionHijacking)、插入攻击(CompensationAttack)和中间人攻击(man-in-the-middle)等,但并没有解决全部问题,尤其是他仍然容易受到针对底层TCP/IP缺陷而发起的服务器拒绝攻击(DoS);他也不能解决一些考虑环境因素而产生的攻击方法,例如流量分析和隐秘通道;也不能防止出现病毒,Trojin木马和咖啡豆(coffeespill)。对于TCP/IP的缺陷引起的问题,只能通过更低级的网络层技术才能很好的解决,例如硬件链路加密或IPSec;对于流量分析攻击,SSH可以在空闲时发送一些随机的,非操作性的信息来干扰活动状态的分析(目前的SSH产品还没有实现这种特性);对于病毒等则需要病毒防火墙来解决。
4结语
SSH协议既可以提供主机认证,又提供用户认证,同时还提供数据压缩,数据机密性和完整性保护。SSH的不足之处在于他使用的是手工分发并预配置的公匙而非基于证书的密匙管理。与SSL和TLS相比,这是SSH的主要缺陷。但从SSH2.0协议开始允许一同使用PKI证书和密匙,将来在SSH产品中把这种特性和通用的PKI一起实现,这样可以降低密匙管理的负担并提供更强大的安全保障。虽然SSH还有其不足之处,但相对于VPN和专业防火墙的复杂性和费用来说,也不失为一种可行的网络安全解决方案,尤其适合中小企业部署应用。