第5章 会话安全SSH
杨礼珍
作业
,思考题1、4、9
SSH的历史及现状
SSH的功能及组成
SSH为应用层协议,基于TCP,使用端口22。
SSH所提供服务:机密性、完整性保护、身份
认证功能(必选的服务器认证,可选的客户端
认证)。
SSH所包含内容:算法(包括加密、认证和压
缩算法)协商、密钥交换、服务器身份认证、
用户身份认证以及应用层数据封装处理等。
SSH的功能及组成
SSH协议组成:
传输层协议:协商和数据处理。位于SSH协议套件
的最底层。位于SSH协议套件的最底层,为SSH其
它协议和高层应用提供安全保护。(包含了服务器身
份认证)
用户认证协议:规定了服务器认证客户端用户身份
的流程和报文内容。
连接协议:将安全通道多路分解为多个逻辑通道,
以便多个高层应用共享SSH提供的安全服务。
SSH的组成协议关系图
SSH数据类型
SSH规定了7中数据类型来描述协议消息格式
单字节整数
布尔值
32比特整数
64比特整数
字符串
大整数
列表
SSH方法及算法描述
SSH用字符串描述算法,并给出了可用算法的
标准字符串表示。如“3des-cbc”表示使用
CBC模式的3DES算法,”blowfish-cbc”表示
使用CBC模式的blowfish算法。如果同时使用
两个算法,则用“列表”数据类型表示出来。
SSH规定了厂商实现中自定义名字的统一格式。
SSH传输协议
协议流程
SSH传输协议
(1)版本协商:协定最终使用的SSH版本
(2)密钥交换:包括算法协商、D-H交换和计
算密钥。D-H交换报文中包含了服务器认证信
息。
SSH支持两种认证方法:
显式方法:报文包含数字签名。客户端必须获取
服务器公钥(SSH也称为热键hot key)
隐式方法:报文包含利用预共享密钥计算的
MAC。
SSH传输协议
2-1. 算法协商:通信双方交互
SSH_MSG_KEXINIT消息进行算法协商。
SSH_MSG_KEXINIT消息格式见图,
它包含以下内容
Cookie:为随机数,用来和其它参数共同生成密钥
和会话ID,以防止重放攻击。
密钥交换算法列表、服务器热键算法列表、客户端
和服务器加密算法列表、客户端和服务器MAC算法
列表、客户端和服务器压缩算法列表、客户端和服
务器语言列表、标志。
SSH传输协议
2-2. D-H交换
SSH_MSG_KEXDH_INIT和
SSH_MSG_KEXDH_REPLY消息格式见图。
SSH_MSG_KEXDH_REPLY消息完成以下功能:
密钥交换:双方交换D-H公开值
服务器身份认证:对散列值H的签名
握手消息完整性:散列值H的输入包含了:客户端和服务器
的版本信息、SSH_MSG_KEXINIT消息(包含了Cookie字
段)、热键、双方的D-H公开值以及共享密钥。
散列值H同时用于计算会话ID,可用来防止重放攻击。
SSH传输协议
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为消息完整性中计算的散列值。
SSH传输协议
2-4. 密钥再交换:通信双方都可以发起密钥再交
换协商,与首次协商过程相同。
2-5. 密钥交换完成后,通信双方交互
SSH_MSG_NEWKEYS消息以通告对等端随
后的通信流使用新的算法和密钥保护。
SSH传输协议
(3)服务请求/响应。
客户端发送:
SSH_MSG_SERVICE_REQUEST消息,其中
包含了所请求的服务名称。
服务器发送:
如果同意提供客户端提出服务,则返回
SSH_MSG_SERVICE_ACCEPT
否则返回SSH_MSG_DISCONNECT
SSH定义了两种服务:ssh-userauth(用户认
证)和ssh-connection(连接请求)
SSH传输协议
2. 报文格式
Mac=MAC(Mcs(或Msc),序号|未加密的报文)
MAC:消息验证码算法
未加密的报文:除mac以外的所有报文数据
加密算法应用于除mac外的其他部分。
压缩算法应用于数据部分。
注:如未协商压缩算法则数据不需要压缩;如未协商加密算法
则不需要填充和加密;如未协商MAC算法则不需要计算mac。
序号不包含在SSH报文中。
SSH传输协议报文格式另一图示
SSH身份认证协议
客户利用传输层协议向服务器提出用户身份认
证服务请求,若服务器接受请求,则双方开始
执行SSH身份认证协议。
身份认证协议在传输层协议提供的安全通道上
运行。(即身份认证协议的消息封装在传输层报
文的数据区中)
一次身份认证失败,客户端可再次提出认证请
求,但重试的时间间隔和次数是有限制的。
身份认证过程
身份认证过程主要由三种消息完成:
客户端所发出的认证请求,格式见图
SSH_MSG_USERAUTH_REQUEST
服务器应答,格式见 图
服务器接受认证的应答:
SSH_MSG_USERAUTH_SUCCESS
服务器拒绝认证的应答:
SSH_MSG_USERAUTH_FAILURE
身份认证过程
SSH支持4种用户身份认证方法:
publickey(公钥认证):客户端向服务器提供签名
password(口令认证):客户端向服务器提供口令
hostbased(基于主机的认证):由用户宿主机代理
用户完成身份认证,用于主机有多个客户的情形。
none(不使用认证):用于客户端身份不敏感和查询
服务器支持的认证方法的情形下。
公钥认证方法
第一轮交互用以通告签名算法和证书
SSH_MSG_USERAUTH_REQUEST消息:“认证
方法”名字段被设置为“publickey”,“与认证
方法相关的字段”的格式见图(包含了
标志(设置为FLASE)签名算法名、证书)
第二轮进行身份认证
SSH_MSG_USERAUTH_REQUEST消息:“认证
方法”名字段被设置为“publickey”,“与认证
方法相关的字段”的格式见图(包含了
标志(设置为TRUE)签名算法名、公钥和签名)
公钥认证方法
口令认证方法
认证过程:
1. 客户端发送的请求消息包含:“password”认证方
法、标志字段设置为FALSE、口令字符串。
2. 服务器的响应可能为:
成功
失败
若口令过期:发送
SSH_MSG_USERAUTH_PASSWD_CHANGEREQ
客户端再次发出请求消息:其中标志字段设置为TRUE,包含
原口令和新口令
服务器响应
基于主机认证方法
使用数字签名验证身份
流程与公钥认证相似
和公钥认证的方法的不同之处:用客户端主机
的私钥(公钥认证使用用户的私钥)进行签名,
服务器用客户端主机的公钥(公钥认证使用用
户的公钥)验证签名。
前提:主机已通过用户身份验证,客户端主机
充当用户身份认证代理。
使用场合:主机有多个客户
基于主机认证方法
认证过程:
1. 客户端的请求消息包含:“认证方法名”字段设置
为hostbased、签名算法、证书、用户端主机的
FQDN、用户名、签名(具体格式见 )。
2. 服务器根据以下内容验证客户端身份:
证书是否合法
给出的用户是否允许在这台主机登录
签名是否正确
客户端主机的合格域名FQDN是否与报文的源地址一致。
3. 服务器给出成功或者失败的应答
SSH连接协议
连接协议如何运行:
在传输层提供的安全通道上进行
客户端通过SSH传输层协议发出连接协议服务请求后,即可
开始连接协议流程。
隧道:传输层协议建立的安全通道称为“隧道”
通道:所有的终端会话和被转发的连接称为“通道”
隧道和通道的关系:一个隧道可以包含多条隧道,即
SSH的安全通道可以同时为多个不同的应用提供安全
服务。
SSH连接协议规定了四种通道类型:session(运行远
程程序)、x11(X 视窗系统,远程服务器运行,在本地
显示)、forwarded-tcpip(远程端口转发)和direct-tcpip
(本地端口转发)。
基本通道操作
所有通道操作都包含以下过程
建立通道
数据传输
关闭通道
不同通道存在细节差异
下图是基本通道操作流程
SSH连接协议基本通道操作
交互式会话通道操作
如利用通道交互式会话操作:
1. SSH_MSG_CHANNEL_OPEN中指定通道类
型为“session”
2. 通道建立后,发送
SSH_MSG_CHANNEL_REQUEST消息进行
各种交互式操作,该消息格式见 图
。如该消息的标志为”TRUE”时需要对
方应答,对方应返回以下消息之一:
SSH_MSG_CHANNEL_SUCCESS
SSH_MSG_CHANNEL_FAILUE
交互式会话通道操作
SSH_MSG_CHANNEL_REQUEST消息格式中的“
请求类型”有以下11种:
1. 伪终端请求:
2. X11请求
3. 发送环境变量
4. 启动shell
5. 启动可执行命令
6. 启动子系统
7. 窗口更改
8. 数据流控制
9. 信号
10. 退出状态
11. 退出信号
转发TCP/IP连接通道操作
1. TCP/IP端口转发原理,用于保护SMTP、IMAP等应用安全
转发TCP/IP连接通道操作
如何使用TCP/IP端口转发功能:
若SSH客户端向服务器转发连接,不必提出请求
若SSH客户端需要服务器将到达其某个端口的连接
转发到本地,则必须使用“全局”请求消息
SSH_MSG_GLOBAL_REQUEST明确提出请求(格
式见 图),以通告对方接受的IP地址和端
口号;同时使用该消息取消端口转发功能。
SSH应用
SSH的两类应用:
安全的交互式会话或远程执行命令:SSH连接协议已有详
细定义,典型应用有:
SSH文件传输协议SFTP:基于SSH2,是SSH的子系统,启
动过程:
使用SSH_MSG_CHANNEL_OPEN建立通道
使用SSH_MSG_CHANNEL_REQUEST消息请求启动SFTP子
系统
SFTP报文作为SSH传输层报文的数据区进行传输
另两个安全文件传输协议
FTPS:基于SSL的FTP
SSH上的FTP:使用SSH1的TCP/IP端口转发
保护各类应用安全,典型应用:
构建VPN
基于SSH的VPN:使用SSH的TCP/IP端口转发功能构建
VPN,使用该机制,防火墙的访问控制列表ACL可配置成仅
允许目前端口为22的通信量通过。
图 基于SSH的VPN