SSH协议分析

写在前面

在此只是对ssh协议的报文进行了一次简单的分析,对于平常经常使用到ssh协议却不明白其中的缘由的人,看完之后可能会恍然大悟,这是有助于在平常生活和工作中更好的使用ssh协议的

1. SSH协议介绍

SSH (Security Shell)为建立在应用层基础上的安全协议。SSH 是 较可靠,专为 远程登录会话 和其他 网络服务提供安全性 的协议SSH,为建立在应用层基础上的安全协议。

SSH只是一种协议,它有很多的实现方法。Linux基本都会预装SSH功能,现在Windows也有对SSH功能的扩展。SSH协议是C/S模式所以会分客户端程序和服务端程序(一般是 sshd进程 ),Windows10有的SSH客户端和服务端功能,也可以下载putty,xshell,xftp等远程客户端软件,进行远程连接。

利用SSH协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。
它有两个不兼容的版本分别为:1.x 和 2.x。

1.1 功能

  • 远程登陆(替代Telnet,ssh提供更安全可靠的服务且支持压缩,telnet端口23,ssh端口22)
  • 为其他网络服务提供一个 安全的“通道” ,消息会以密文的方式传输
  • 支持 压缩 传输的数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gaFDHl22-1574595602131)(./resources/image/01/01-1.gif)]

1.2 SSH协议基本架构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QQmucKvz-1574595602134)(./resources/image/01/01-2.jpg)]

可以看到SSH基本分为三层,先不考虑建立在SSH协议上的高层网络应用协议

  1. 传输层协议(SSH-TRANS):提供服务器认证、完整性和保密性功能,会进行密钥交换,建立在TCP/IP协议基础上
  2. 验证协议(SSH-USERAUTH):服务器验证客户端用户,有两种验证方式,由客户端选择即client-driven。方式一:口令(密码);方式二:证书(公钥)。建立在传输层协议(SSH-TRANS)基础之上
  3. 连接协议(SSH-CONNECT):构建加密通道(这个过程比较复杂,在这儿不讨论),从而提供给其他应用层协议使用。建立在验证协议(SSH-USERAUTH)基础之上

2. SSH协议抓包分析

几个概念:

  • 会话密钥:是由客户端和服务端通过D-H算法生成的,每次连接的会话密钥都是不通过,用户在传输数据时加密
  • MAC:一种哈希加密算法,在此用于保证数据的完整性和安全性
  • rsa:一种非对称加密算法
  • 公钥私钥:用于认证,在这并没有用于数据传输过程中加密,非对称密钥的加解密较慢

先整体看一眼

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KjuBhdbm-1574595602136)(./resources/image/01/01-3.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B6uWgwu5-1574595602139)(./resources/image/01/01-00.png)]

在这之前会有3个TCP连接建立的包(不做具体分析,可看详情)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SxMcOQkv-1574595602140)(./resources/image/01/01-4.png)]

2.1 第一阶段(SSH-TRANS)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nH54XAF3-1574595602141)(./resources/image/01/01-5.png)]

  • 1、客户端告知服务器自己的SSH协议版本
格式:
SSH-protoversion(版本号)-softwareversion(自定义) SP(空格一个,可选) comments(注释,可选) CR(回车符) LF(换行符)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y29G8opT-1574595602143)(./resources/image/01/01-6.png)]

  • 2、服务器将自己的SSH协议发送给客户端

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i0VhmoyC-1574595602145)(./resources/image/01/01-7.png)]

  • 3、客户端初始化连接,进行加密算法交换

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XrSzx3AG-1574595602146)(./resources/image/01/01-8.png)]

交换的算法和其它信息列表

NO.名称说明
1kex_algorithms密钥交换算法,包含D-H算法,用户生成会话密钥
2server_host_key_algorithms服务器主机密钥算法,如ssh-rsa
3encryption_algorithms_client_to_server对称加密算法
4encryption_algorithms_server_to_client对称加密算法
5mac_algorithms_client_to_serverMAC算法,用于保证数据完整性
6mac_algorithms_server_to_clientMAC算法,用于保证数据完整性
7compression_algorithms_client_to_server压缩算法
8compression_algorithms_server_to_client压缩算法
9languages_client_to_server语言
10languages_server_to_client语言

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TTQWaB8m-1574595602148)(./resources/image/01/01-9.png)]

  • 4、服务端初始化连接,进行加密算法交换

与上一个报文是相似的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TOawp0Ax-1574595602150)(./resources/image/01/01-10.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oWkJdG6s-1574595602152)(./resources/image/01/01-11.png)]

  • 5、客户端发送D-H公钥,服务端与客户端使用D-H算法生成会话密钥key

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oDna8fRb-1574595602153)(./resources/image/01/01-12.png)]

  • 6、服务端回复,服务端与客户端使用D-H算法生成会话密码key

服务端回复的内容:

DH回复包:

  • 一个服务端的公钥,即证书,客户端会将该公钥与本地公钥对比,看是否是被信任的服务器,如过是第一次访问则会询问用户是否信任这样的公钥。
  • 服务端回复的D-H公钥
  • 签名
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hvHjthfi-1574595602154)(./resources/image/01/01-17.png)]

服务端端还会回复一个new Key包 用于表明服务端可以使用会话密码key加密消息了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PwIzNLfN-1574595602156)(./resources/image/01/01-18.png)]

一个加密消息包:服务器已经有了会话密码,可以使用会话密码加密了
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RTTlgXsb-1574595602158)(./resources/image/01/01-19.png)]

这三个包我在两种不通的情景下也看到了两种不同的情况

在windwos10中使用口令远程连接
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fl9qNlrY-1574595602158)(./resources/image/01/01-13.png)]

用git通过公私钥的方式获取github创库中的资源
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aukWhFuz-1574595602160)(./resources/image/01/01-14.png)]

表现的不同可能是由于两者的实现方式具有一些差别,因为这两者情况使用的客户端和服务端协议都是稍有不同的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vxMcjsCx-1574595602161)(./resources/image/01/01-15.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MHsF6MGi-1574595602162)(./resources/image/01/01-16.png)]

  • 7、客户端回复new key包

客户端要回复服务端的new key包以表明双方构建了一个加密通道,可以使用会话密码key加密来传输信息了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gEG2BpVB-1574595602164)(./resources/image/01/01-20.png)]

接下来就是加密后的数据了,我们无法从中看出任何有用信息,只能知道其组成,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TX8UHn8u-1574595602164)(./resources/image/01/01-21.png)]

2.2 第二阶段(认证)

  • 第一种方式:基于口令的验证

客户端将口令用会话密钥加密后传送到服务端,由服务端解密认证

  • 第二种方式:基于公钥私钥的验证方式

也称为免登陆的方式,需要客户端自己生成公钥和私钥,然后将公钥添加保存到服务器中。之后,客户端会发送经过加密后的公钥,由服务端解密和公钥对比(这是网络中的一般说法,具体的验证我并没有找到,也是符合《信息安全原理与实践(第2版)》书的,但加密的消息应该不仅仅只有客户端的公钥。在该书中描述是还包含,会话密钥和签名数据)。

检验自己理解的方式是回到第一次整体图中能将每个报文的作用说出来就OK了 快速跳转

写在最后

ssh协议的复杂度也是远超于此的,对信息安全的工作人员和ssh协议的编程实现相关人员可能会更进一步的学习。(信息安全领域和业务开发领域两者关注点是不同的,业务开发是为了提供服务,信息安全则是为了提供安全的服务。为了更好的提供服务,业务开发人员需要了解信息安全的知识,这对工作和自己的学习发展都是有好处的[额~ 属于个人观点,知识广度],这也是我愿意花时间做ssh协议分析工作的原因)

  • 11
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值