通过WireShark对SSH协议进行分析

简介: 该实验探讨了SSH的基于口令安全认证,主要关注SSH2的传输层协议和用户认证协议。实验中,客户端使用Termius,服务器端为运行Ubuntu的ECS,均基于SSH2。连接过程包括建立加密通道、用户密码加密传输及认证。通过抓包分析了SSH连接步骤,如版本协商、加密算法选择、公钥确认和Diffie-Hellman密钥交换。实验强调了基于口令认证的SSH在遭遇中间人攻击时的安全风险,提示用户需警惕服务器指纹的变化,防止MITM攻击。

实验基础

SSH有两种级别的安全认证

  • 基于口令的安全认证
  • 基于密匙的安全认证

SSH2的三个子协议

  • 传输层协议
  • 用户认证协议
  • 连接协议

这里主要对基于口令的安全认证的传输层协议和用户认证协议进行分析

实验环境

client端是使用的是基于ssh2的Termius

1

server端是一台运行ubuntu的ecs,同样是基于ssh2的openssh

2

实验过程

我们建立ssh连接的时候到底发生了什么?

  1. 当你尝试与服务器建立ssh连接,首先会在c-s两端之间建立一个加密通道,用于包的传输
  2. 建立加密通道之后,你输入的用户密码就会通过整个通道加密传输到服务器进行认证

  3. 认证完成之后就在c-s之间成功建立了连接,而包的传输还是基于在第一步的trans-layer建立的加密通道进行传输

接下来通过抓包来对ssh协议进行分析

对抓到的包一步一步进行分析

3

  1. 首先,在第一个包中,client会告诉server它使用的ssh版本

    4

  2. 同样的,server会返回一个包给client,告诉client它用的是什么版本的ssh协议。这两部其实是双方协商ssh协议,不过现在基本用的都是ssh-v2,这两部就相当于互相响应一下版本罢了。

    5

  3. 这一步,两端开始建立连接,首先client会发给server一个包,告诉server自己支持什么加密算法

    6

  4. 同样的,server也会返回一个包,告诉client自己支持什么加密算法,至此,两者协商出一个算法

    7

  5. 下一步会发生一个很有意思的东西,client会确认server的公钥,就是我们所知道的指纹,如果是第一次连接,client会将这个指纹保存到本地,供下一次ssh连接确认使用。

  6. 接下来两个包用于是client和server之间发送Diffie-Hellman密钥交换算法的公钥,这一部之后,client和server确认了用于会话的密钥。//对这个算法这里不做详细说明,有兴趣的可以自行去知乎看看。

  7. 下一步client会发给server一个包: new keys,说明两端的加密通道已经建立。至此,SSH-TRANS的工作已经完成。

    8

  8. 接下来就轮到SSH-AUTH,在这一步,其实就是我们输入密码并回车之后的阶段。接下来的包都是c-s之间用于认证的,没有什么好说的了。

    9

实验总结

基于口令认证的ssh到底安不安全,记得前面说过的指纹吗,在第一次进行ssh连接的时候,client会将指纹保存在本地,第二次进行连接时候,client会将本地保存的指纹与server发送的进行对比。那么这里就是关键的地方了,如果一个黑客劫持了client与server的通信,伪装成server与client进行通信,问题就来了,如果客户不知道指纹发生了更改,选择继续通信,那么接下来相当于,客户的PC就与黑客的PC建立了连接,这就是中间人攻击。

10

在这里,我尝试进行了一次MITM攻击,可以看到,如果客户稀里糊涂点了个repalce就完蛋了。其次对于ssh2以下的ssh协议,被arp到密码的可能性更大。

目录
相关文章
|
1月前
|
网络安全
检查使用IP协议远程维护的设备是否配置SSH协议,禁用telnet协议
检查使用IP协议远程维护的设备是否配置SSH协议,禁用telnet协议
50 0
|
1月前
|
移动开发 监控 安全
通过SSH协议实现的屏幕局域网电脑监控:屏幕安全访问代码
随着科技的不断发展,网络安全问题愈发突出。为了确保屏幕数据的安全,我们需要一种高效可靠的监控方法。本文介绍了一种基于SSH协议的屏幕局域网电脑监控方案,同时提供了相关代码示例,确保屏幕数据的安全传输和访问。
260 0
|
1月前
|
算法 安全 Shell
SSH:加密安全访问网络的革命性协议
SSH:加密安全访问网络的革命性协议
82 9
|
28天前
|
安全 算法 Shell
ssh远程登录协议
ssh远程登录协议
|
1月前
|
监控 前端开发 安全
【专栏】介绍了前端工程师如何掌握SSH命令,包括SSH协议的基础知识、命令行操作如登录、文件传输、目录管理和进程管理
【4月更文挑战第29天】本文介绍了前端工程师如何掌握SSH命令,包括SSH协议的基础知识、命令行操作如登录、文件传输、目录管理和进程管理。在前端开发中,SSH用于部署项目、协同后端开发及服务器监控。文章还强调了使用密钥认证、配置别名及安全注意事项,并提醒开发者面对问题时如何解决。学习和熟练运用SSH是前端工程师适应复杂项目需求的关键。
|
1月前
|
存储 弹性计算 算法
SSH学习(三)- SSH协议中的Public Key Algorithm
在SSH协议中,有两个地方涉及到公钥算法,分别是: 1. 服务端认证:服务端在进行密钥协商的时候证明自己身份,防止中间人攻击,此时为SSH-TRANS协议发生的事情; 2. 客户端认证:客户端通过PublicKey方式证明自己身份,完成SSH登录认证,此时SSH-USERAUTH发生的事情; 这两种情况下的公钥算法使用的是同一个概念,接下来本文将主要基于PublicKey公钥认证方式,学习对应的内容。
120 1
SSH学习(三)- SSH协议中的Public Key Algorithm
|
1月前
|
安全 算法 Linux
SSH协议的原理和使用:深入剖析SSH协议的原理和使用方法
SSH协议的原理和使用:深入剖析SSH协议的原理和使用方法
879 0
|
1月前
|
安全 Shell 网络安全
远程登录安全连接协议SSH(Secure Shell)
SSH(Secure Shell)协议是一种用于在不安全网络上提供安全远程登录、命令执行和数据传输的加密网络协议,通过公钥加密和身份验证技术确保通信的安全性和隐私性。
125 0
|
6月前
|
Shell 网络安全 开发工具
git02->gui图形化界面使用,ssh协议,idea集成GIT
git02->gui图形化界面使用,ssh协议,idea集成GIT
58 0
git02->gui图形化界面使用,ssh协议,idea集成GIT
|
1月前
|
存储 网络安全 开发工具
Git的GUI图形化工具&ssh协议&IDEA集成Git
Git的GUI图形化工具&ssh协议&IDEA集成Git
146 0