0


红队ssh协议通信全流程以及安全研究

serverhostkey缓存阶段

需要:

  • 服务端host密钥对

流程:

  • 服务端发送public server host key 公钥,和其他信息
  • 客户端不提示警告,说明之前访问过服务,已经获取到了服务的公钥和服务器相关信息并缓存到了/.ssh/known_hosts,客户端只需要将信息与/.ssh/known_hosts中的公钥等信息进行比对即可
  • 客户端提示警告,就将新的host key缓存到~/.ssh/known_hosts,提示警告情况如下:- 如果是未访问的服务,说明第一次建立通信- 如果是访问过的服务可能是中间人攻击

会话建立阶段

需要:

  • 客户端临时密钥对
  • 服务端临时密钥对

流程:

  • 客户端发送ssh会话请求(协商加密算法等)
  • 服务端发送public server key给客户端(响应加密算法)
  • 客户端向服务端发送public client key给服务端,此时密钥情况:- 客户端:public client key、private client key、public server key- 服务端:public server key、private server key、public client key- 客户端和服务端具备了生成同一个key(也就是对称加密密钥)的能力
  • 生成对称加密密钥session key(也叫共享安全密钥)进行加密通信

客户端主机密钥验证阶段

需要:

  • 服务端host密钥对
  • 客户端缓存public server host key公钥
  • 主机密钥验证算法,可由参数 HostKeyAlgorithms 指定,用于客户端验证服务器信息的算法

流程:

  • 服务端生成exchange hash
  • 服务端用host 私钥签名对生成exchange hash进行签名,签名算法使用HostKeyAlgorithms 指定的算法
  • 客户端通过HostKeyAlgorithms 指定的算法,使用host公钥进行认证,host公钥从~/.ssh/known_hosts文件中获取

注:

  • 此过程客户端校验服务端信息

身份验证阶段

密码登录

需要:

  • 服务端密钥对

流程:

  • 客户端发送ssh登录请求
  • 服务端发送公钥
  • 客户端接受公钥并加密密码,发送
  • 服务端接受到密文,用私钥解密获得密码,进行验证
密钥登陆

需要:

  • 客户端有登录密钥对
  • 服务端有登录密钥对的公钥
  • 暂且称登录密钥对为login key与之前的临时密钥对和session key(共享安全密钥)做区分
  • 参数PublickeyAcceptedKeyTypes,客户端发送公钥的类型,此参数控制了 服务器 接受的公钥认证算法类型,决定了服务器公钥认证时使用的算法。

流程:

  • 客户端发送ssh登录请求
  • 服务端生成随机数A并用login key公钥加密成密文A(加密算法受PublickeyAcceptedKeyTypes影响)
  • 客户端私钥解密得到随机数A,生成摘要digest = sessionkey + 随机数Ahash(使用md5加密)
  • 服务端以相同的方式生成摘要digest = sessionkey + 随机数Ahash(使用md5加密)与客户端发过来的摘要做对比

ssh安全性理论研究

中间人攻击以及ssh防御措施

条件:

  • hostkey缓存阶段,服务端在没有发送public host key到客户端之前均可攻击,一旦客户端接收到了public host key,攻击条件丧失,原因如下:- 在接下来的完整性会话建立阶段,中间人没有private host key,因此无法对生成的exchange hash进行签名

ssh防御措施:

  • hostkey缓存阶段的提示
暴力破解密钥登陆

条件:

  • 获取某一用户的login公钥

爆破:

  • 网上下载密钥对,进行login公钥对比,查看哪个密钥对匹配
  • 读取密钥对的私钥,进行登录
标签: 安全 ssh 网络

本文转载自: https://blog.csdn.net/anddddoooo/article/details/141752781
版权归原作者 anddddoooo 所有, 如有侵权,请联系我们删除。

“红队ssh协议通信全流程以及安全研究”的评论:

还没有评论