第5章会话安全SSH杨礼珍作业P.179,思考题1、4、95.1SSH的历史及现状SSH的提出SSH(SecureShell,安全Shell)是基于TCP的应用层协议,能对数据进行加密处理,为保障远程登录及交互式会话安全而提出。1995年,TatuYlonen首次设计并实现了SSH,该版本称为SSH1。之后TatuYlonen创立了SSH通信安全公司(htt://),提供企业级的SSH安全方案和产品。1998年,SSH通信公司推出SSH2。2005年,SSH通信公司推出SSHG3。2006年1月,SSH2正式成为IETF标准,文档为RFC4250-4256。2008年2月,SecSh工作组公布两个草案,描述了SSH如何使用ECC和UMAC。5.2SSH的功能及组成SSH为应用层协议,基于TCP,使用端口22。SSH所提供服务:机密性、完整性保护、身份认证功能(必选的服务器认证,可选的客户端认证)。SSH所包含内容:算法(包括加密、认证和压缩算法)协商、密钥交换、服务器身份认证、用户身份认证以及应用层数据封装处理等。5.2SSH的功能及组成SSH协议组成:传输层协议:协商和数据处理。位于SSH协议套件的最底层。位于SSH协议套件的最底层,为SSH其它协议和高层应用提供安全保护。(包含了服务器身份认证)用户认证协议:规定了服务器认证客户端用户身份的流程和报文内容。连接协议:将安全通道多路分解为多个逻辑通道,以便多个高层应用共享SSH提供的安全服务。SSH的组成协议关系图Telnet、FTP等高层应用SSH连接协议SSH传输层协议TCPIP22号端口SSH用户认证协议数据逐层往下封装并非必须的5.3SSH数据类型SSH规定了7中数据类型来描述协议消息格式单字节整数布尔值32比特整数64比特整数字符串大整数列表5.4SSH方法及算法描述SSH用字符串描述算法,并给出了可用算法的标准字符串表示。如“3des-cbc”表示使用CBC模式的3DES算法,”blowfish-cbc”表示使用CBC模式的blowfish算法。如果同时使用两个算法,则用“列表”数据类型表示出来。SSH规定了厂商实现中自定义名字的统一格式。5.5SSH传输协议协议流程客户端服务器使用三次握手建立TCP连接计算密钥计算密钥SSH_MSG_NEWKEYSSSH_MSG_NEWKEYSSSH_MSG_SERVICE_ACCEPT通告使用新密钥服务请求/响应版本信息字符串版本信息字符串版本协商SSH_MSG_KEXINITSSH_MSG_KEXINIT算法协商SSH_MSG_KEXDH_INITSSH_MSG_KEXDH_REPLYD-H交换SSH_MSG_SERVICE_REQUEST22端口5.2SSH传输协议(1)版本协商:协定最终使用的SSH版本(2)密钥交换:包括算法协商、D-H交换和计算密钥。D-H交换报文中包含了服务器认证信息。SSH支持两种认证方法:显式方法:报文包含数字签名。客户端必须获取服务器公钥(SSH也称为热键hotkey)隐式方法:报文包含利用预共享密钥计算的MAC。5.2SSH传输协议2-1.算法协商:通信双方交互SSH_MSG_KEXINIT消息进行算法协商。SSH_MSG_KEXINIT消息格式见p.153图5.3,它包含以下内容Cookie:为随机数,用来和其它参数共同生成密钥和会话ID,以防止重放攻击。密钥交换算法列表、服务器热键算法列表、客户端和服务器加密算法列表、客户端和服务器MAC算法列表、客户端和服务器压缩算法列表、客户端和服务器语言列表、标志。5.2SSH传输协议2-2.D-H交换SSH_MSG_KEXDH_INIT和SSH_MSG_KEXDH_REPLY消息格式见p.155图5.4。SSH_MSG_KEXDH_INITSSH_MSG_KEXDH_REPLYD-H交换消息类型(31)证书...D-H公开值...对散列值H的签名...SSH_MSG_KEXDH_REPLY消息格式SSH_MSG_KEXDH_REPLY消息完成以下功能:密钥交换:双方交换D-H公开值服务器身份认证:对散列值H的签名握手消息完整性:散列值H的输入包含了:客户端和服务器的版本信息、SSH_MSG_KEXINIT消息(包含了Cookie字段)、热键、双方的D-H公开值以及共享密钥。散列值H同时用于计算会话ID,可用来防止重放攻击。5.2SSH传输协议2-3.计算密钥:SSH使用4个密钥:通信双方用来加密和认证的密钥(Ecs,Esc,Mcs,Msc),以及分组加密中使用的IV(IVcs,IVsc)。计算方法如下:IVcs=HASH(K|H|”A”|会话ID)IVsc=HASH(K|H|”B”|会话ID)Ecs=HASH(K|H|”C”|会话ID)Esc=HASH(K|H|”D”|会话ID)Mcs=HASH(K|H|”E”|会话ID)Esc=HASH(K|H|”F”|会话ID)其中K为双方的共享密钥,由双方的D-H公开值计算得到。H为消息完整性中计算的散列值。5.2SSH传输协议2-4.密钥再交换:通信双方都可以发起密钥再交换协商,与首次协商过程相同。2-5.密钥交换完成后,通信双方交互SSH_MSG_NEWKEYS消息以通告对等端随后的通信流使用新的算法和密钥保护。5.2SSH传输协议(3)服务请求/响应。客户端发送:SSH_MSG_SERVICE_REQUEST消息,其中包含了所请求的服务名称。服务器发送:如果同意提供客户端提出服务,则返回SSH_MSG_SERVICE_ACCEPT否则返回SSH_MSG_DISCONNECTSSH定义了两种服务:ssh-userauth(用户认证)和ssh-connection(连接请求)5.2SSH传输协议2.报文格式Mac=MAC(Mcs(或Msc),序号|未加密的报文)MAC:消息验证码算法未加密的报文:除mac以外的所有报文数据加密算法应用于除mac外的其他部分。压缩算法应用于数据部分。注:如未协商压缩算法则数据不需要压缩;如未协商加密算法则不需要填充和加密;如未协商MAC算法则不需要计算mac。序号不包含在SSH报文中。长度...数据填充长度填充...mac...压缩范围加密和mac计算范围SSH传输协议报文格式另一图示5.6SSH身份认证协议客户利用传输层协议向服务器提出用户身份认证服务请求,若服务器接受请求,则双方开始执行SSH身份认证协议。身份认证协议在传输层协议提供的安全通道上运行。(即身份认证协议的消息封装在传输层报文的数据区中)一次身份认证失败,客户端可再次提出认证请求,但重试的时间间隔和次数是有限制的。5.6.1身份认证过程身份认证过程主要由三种消息完成:客户端所发出的认证请求,格式见p.159图5.7SSH_MSG_USERAUTH_REQUEST服务器应答,格式见p.160图5.8服务器接受认证的应答:SSH_MSG_USERAUTH_SUCCESS服务器拒绝认证的应答:SSH_MSG_USERAUTH_FAILURE5.6.1身份认证过程SSH支持4种用户身份认证方法:publickey(公钥认证):客户端向服务器提供签名password(口令认证):客户端向服务器提供口令hostbased(基于主机的认证):由用户宿主机代理用户完成身份认证,用于主机有多个客户的情形。none(不使用认证):用于客户端身份不敏感和查询服务器支持的认证方法的情形下。5.6.2公钥认证方法第一轮交互用以通告签名算法和证书SSH_MSG_USERAUTH_REQUEST消息:“认证方法”名字段被设置为“publickey”,“与认证方法相关的字段”的格式见P.161图5.10(包含了标志(设置为FLASE)签名算法名、证书)第二轮进行身份认证SSH_MSG_USERAUTH_REQUEST消息:“认证方法”名字段被设置为“publickey”,“与认证方法相关的字段”的格式见P.161图5.11(包含了标志(设置为TRUE)签名算法名、公钥和签名)5.6.2公钥认证方法服务器SSH_MSG_USERAUTH_REQUEST复制客户端请求的签名算法名和证书SSH_MSG_USERAUTH_REQUESTSSH_MSG_USERAUTH_SUCCESSSSH_MSG_USERAUTH_FAILURESSH_MSG_USERAUTH_PK_OKSSH_MSG_USERAUTH_FAILURE签名算法名、公钥、签名若同意使用公钥认证若不同意使用公钥认证若通过签名验证若不通过签名验证,或者需要进一步认证客户端签名算法名、证书5.6.3口令认证方法认证过程:1.客户端发送的请求消息包含:“password”认证方法、标志字段设置为FALSE、口令字符串。2.服务器的响应可能为:成功失败若口令过期:发送SSH_MSG_USERAUTH_PASSWD_CHANGEREQ客户端再次发出请求消息:其中标志字段设置为TRUE,包含原口令和新口令服务器响应5.6.4基于主机认证方法使用数字签名验证身份流程与公钥认证相似和公钥认证的方法的不同之处:用客户端主机的私钥(公钥认证使用用户的私钥)进行签名,服务器用客户端主机的公钥(公钥认证使用用户的公钥)验证签名。前提:主机已通过用户身份验证,客户端主机充当用户身份认证代理。使用场合:主机有多个客户5.6.4基于主机认证方法认证过程:1.客户端的请求消息包含:“认证方法名”字段设置为hostbased、签名算法、证书、用户端主机的FQDN、用户名、签名(具体格式见P.1625.12)。2.服务器根据以下内容验证客户端身份:证书是否合法给出的用户是否允许在这台主机登录签名是否正确客户端主机的合格域名FQDN是否与报文的源地址一致。3.服务器给出成功或者失败的应答5.7SSH连接协议连接协议如何运行:在传输层提供的安全通道上进行客户端通过SSH传输层协议发出连接协议服务请求后,即可开始连接协议流程。隧道:传输层协议建立的安全通道称为“隧道”通道:所有的终端会话和被转发的连接称为“通道”隧道和通道的关系:一个隧道可以包含多条隧道,即SSH的安全通道可以同时为多个不同的应用提供安全服务。SSH连接协议规定了四种通道类型:session(运行远程程序)、x11(X视窗系统,远程服务器运行,在本地显示)、forwarded-tcpip(远程端口转发)和direct-tcpip(本地端口转发)。5.7.1基本通道操作所有通道操作都包含以下过程建立通道数据传输关闭通道不同通道存在细节差异下图是基本通道操作流程SSH连接协议基本通道操作若同意若不同意SSH_MSG_CHANNEL_OPENSSH_MSG_CHANNEL_OPEN_CONFIRMATIONSSH_MSG_CHANNEL_OPEN_FAILURESSH_MSG_CHANNEL_DATASSH_MSG_CHANNEL_EXTENDED_DATASSH_MSG_CHANNEL_WINDOW_ADJUSTSSH_MSG_CHANNEL_DATASSH_MSG_CHANNEL_EXTENDED_DATASSH_MSG_CHANNEL_WINDOW_ADJUSTSSH_MSG_CHANNEL_EOFSSH_MSG_CHANNEL_DATASSH_MSG_CHANNEL_EOFSSH_MSG_CHANNEL_CLOSESSH_MSG_CHANNEL_CLOSE客户端服务器端请求建立通道传输数据传输数据,用于交互特定含义的数据如要扩大接受窗口通知对方不再发送数据,但可接收数据关闭通道5.7.2交互式会话通道操作如利用通道交互式会话操作:1.SSH_MSG_CHANNEL_OPEN中指定通道类型为“session”2.通道建立后,发