应用层协议分析-通过openssh进行SSH协议分析

协议分析

SSH协议出现之前,在网络设备管理上广泛应用的一种方式是Telnet。
Telnet协议的优势在于通过它可以远程地登录到网络设备上,对网络设备进行配置,为网络管理员异地管理网络设备提供了极大的方便。
但是,Telnet协议存在三个致命的弱点:
数据传输采用明文方式,传输的数据没有任何机密性可言。
认证机制脆弱。用户的认证信息在网络上以明文方式传输,很容易被窃听;Telnet只支持传统的密码认证方式,很容易被攻击。
客户端无法真正识别服务器的身份,攻击者很容易进行“伪服务器欺骗”。
SSH协议是一种在不安全的网络环境中,通过加密和认证机制,实现安全的远程访问以及文件传输等业务的网络安全协议。
SSH协议具有以下一些优点:
数据传输采用密文的方式,保证信息交互的机密性;
用户的认证信息以密文的方式传输,可以有效地防止用户信息被窃听;
除了传统的密码认证,SSH服务器还可以采用多种方式对用户进行认证(如安全性级别更高的公钥认证),提高了用户认证的强度;
客户端和服务器端之间通信使用的加解密密钥,都是通过密钥交互过程动态生成的,可以防止对加解密密钥的暴力猜测,安全性级别比手工配置密钥的方式高;
为客户端提供了认证服务器的功能,可以防止“伪服务器欺骗”。
在这里插入图片描述SSH协议采用客户端/服务器架构,分为传输层、认证层和连接层。
传输层协议主要用来在客户端和服务器之间建立一条安全的加密通道,为用户认证、数据交互等对数据传输安全性要求较高的阶段提供足够的机密性保护。
传输层提供了如下功能:
数据真实性检查
数据完整性检查
为客户端提供了对服务器进行认证的功能
传输层协议通常运行在TCP/IP连接之上(服务器端使用的知名端口号为22),也可以运行在其他任何可以信赖的数据连接之上。
认证层协议运行在传输层协议之上,完成服务器对登录用户的认证。
连接层协议负责在加密通道上划分出若干逻辑通道,以运行不同的应用。它运行在认证层协议之上,提供交互会话、远程命令执行等服务。
SSH的报文交互主要有以下几个阶段:
连接建立
版本协商
算法协商
密钥交换
用户认证
服务请求
数据传输和连接关闭
连接建立
SSH服务器端在22端口侦听客户端的连接请求,接收到客户端的连接建立请求后,与客户端进行三次握手,建立起一条TCP连接,后续的所有报文交互都在这个TCP连接之上进行。
版本协商
TCP连接建立之后,服务器和客户端都会向对端发送自己支持的版本号。服务器端和客户端收到对端发送过来的版本后,与本端的版本号进行比较,双方都支持的最高版本号即为协商出的版本号。
版本协商成功后,进入下一个阶段,即算法协商阶段。否则,中断连接。
算法协商
SSH协议报文交互需要使用多种算法:
用于产生会话密钥的密钥交换算法,包括diffie-hellman-group-exchangesha1、diffie-hellman-group1-sha1 和diffie-hellman-group14-sha1 算法等。
用于数据信息加密的加密算法,包括 3des-cbc、aes128-cbc 和des-cbc 加密算法等。
用于进行数字签名和认证的主机公钥算法,包括 RSA 和DSA 公钥算法等。
用于数据完整性保护的 MAC 算法,包括hmac-md5、hmac-md5-96、hmacsha1和hmac-sha1-96 算法等。
由于各种客户端和服务器对这些算法的支持情况不一样,因此需要通过算法协商阶段,使客户端和服务器协商出双方都支持的算法。
SSH协议的算法协商过程为:
(1) 客户端和服务器端都将自己支持的算法列表发送给对方;
(2) 双方依次协商每一种算法(密钥交换算法、加密算法等)。每种算法的协商过程均为:从客户端的算法列表中取出第一个算法,在服务器端的列表中查找相应的算法,如果匹配上相同的算法,则该算法协商成功;否则继续从客户端算法列表中取出下一个算法,在服务器端的算法列表中匹配,直到匹配成功。如果客户端支持的算法全部匹配失败,则该算法协商失败。
(3) 某一种算法协商成功后,继续按照上述方法协商其他的算法,直到所有算法都协商成功;如果某一种算法协商失败,则客户端和服务器之间的算法协商失败,服务器断开与客户端的连接。
密钥交换
加密算法协商成功后,为了保证加解密密钥的安全性,SSH利用密钥交换算法在通信双方安全动态地生成和交互数据的加解密密钥,并能够有效防止第三方窃听加解密密钥。
用户认证
密钥交换完成之后,进入用户认证阶段。
在这里插入图片描述用户认证过程为:
(1) 客户端向服务器端发送认证请求报文,其中携带的认证方式为“none”。
(2) 服务器收到none 方式认证请求,回复认证挑战报文,其中携带服务器支持、且需要该用户完成的认证方式列表。
(3) 客户端从服务器发送给自己的认证方式列表中选择某种认证方式,向服务器发起认证请求,认证请求中包含用户名、认证方法、与该认证方法相关的内容:
密码认证方式中,内容为用户的密码;
公钥认证方式中,内容为用户本地密钥对的公钥部分(公钥验证阶段)或者数字签名(数字签名验证阶段)。
(4) 服务器接收到客户端的认证请求,验证客户端的认证信息:
密码认证方式:服务器将客户端发送的用户名和密码信息,与设备上或者远程认证服务器上保存的用户名和密码进行比较,从而判断认证成功或失败。
公钥认证方式:服务器对公钥进行合法性检查,如果不合法,则认证失败;否则,服务器利用数字签名对客户端进行认证,从而判断认证成功或失败。
(5) 服务器根据本端上该用户的配置,以及用户认证的完成情况,决定是否需要
客户端继续认证,分为以下几种情况:
如果该种认证方式认证成功,且该用户不需要继续完成其他认证,则服务器回复认证成功消息,认证过程顺利完成。
如果该种认证方式认证成功,但该用户还需要继续完成其他认证,则回复认证失败消息,继续向客户端发出认证挑战,在报文中携带服务器需要客户端
继续完成的认证方式列表;
如果该种认证方式认证失败,用户的认证次数尚未到达认证次数的最大值,服务器继续向客户端发送认证挑战;
如果该种认证方式认证失败,且用户的认证次数达到认证次数的最大值,用户认证失败,服务器断开和客户端之间的连接。
服务请求
SSH协议支持多种应用服务。用户成功完成认证后,SSH客户端向服务器端发起服务请求,请求服务器提供某种应用。
服务请求的过程为:
(1) 客户端发送SSH_MSG_CHANNEL_OPEN 消息,请求与服务器建立会话通道,即session;
(2) 服务器端收到SSH_MSG_CHANNEL_OPEN 消息后,如果支持该通道类型,则回复SSH_MSG_CHANNEL_OPEN_CONFIRMATION 消息,从而建立会话通道;
(3) 会话通道建立之后,客户端可以申请在通道上进行shell 或subsystem 类型的会话,分别对应SSH 和SFTP 两种类型的服务。
数据传输和连接关闭
服务请求成功,建立会话后,服务器和客户端可以在该会话上进行数据的传输。客户端将要执行的命令加密后传给服务器,服务器接收到报文,解密后执行该命令,将执行的结果加密发送给客户端,客户端将接收到的结果解密后显示到终端上。通信结束或用户空闲时间超时后,关闭会话,断开连接。

服务搭建

在centos7自带ssh服务,一般是启动的,如果没有,可以手动启动 systemctl start ssh
在这里插入图片描述

ssh目录

在这里插入图片描述

配置静态ip

在这里插入图片描述

在这里插入图片描述

抓包分析

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

发布了70 篇原创文章 · 获赞 17 · 访问量 6691

猜你喜欢

转载自blog.csdn.net/qq_38626043/article/details/104359221