碳基体

奋斗在产品安全第一线的安全妹子

九、TCP/IP协议分析-SSH协议


SSH的工作过程:

一、版本号协商阶段(明文)

确认SSH版本

客户端-服务端:

# SSH-<主协议版本号>.<次协议版本号>-<软件版本号>
# SSH-2.0-paramiko_2.1.2

服务端-客户端:

# 版本号协商
# SSH-<主协议版本号>.<次协议版本号>-<软件版本号>
# SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.8

  

数据包格式:明文传输,\r\n结束


二、密钥和算法协商阶段(二进制)


客户端-服务端:key Exchange Init

 

服务端-客户端:key Exchange Init

 客户端-服务端:Diffie-Hellman Key Exchange Init

 

服务端-客户端:Diffie-Hellman Key Exchange Reply, New keys

 

客户端-服务端:New keys

 

数据包组成

packet length: 4个字节

+padding length: 1个字节

+Message Code: 1个字节,0x14表示Key Exchange Init;0x1e表示Diffie-Hellman Key Exchange Init

0x15表示New keys

+其他 长度为 packet length - 4 - 1 -1


三、认证阶段 (加密)

客户端向服务端发起认证请求,服务端对客户端进行认证

password认证:客户端向服务器发出 password认证请求,将用户名和密码加密后发送给服务器;服务器将该信息解密后得到用户名和密码的明文,与设备上保存的用户名和密码进行比较,并返回认证成功或失败的消息。

publickey认证:采用数字签名的方法来认证客户端。目前,设备上可以利用RSA和 DSA两种公共密钥算法实现数字签名。客户端生成密钥对,将公钥放在服务器上。客户端向服务端发起认证请求时,客户端将使用私钥产生的签名发送给服务端,服务端利公钥对客户端进行签名认证,并返回认证成功或失败的消息

password-publickey 认证:指定该用户的认证方式为 password 和 publickey认证同时满足。客户端版本为 SSH1的用户只要通过其中一种认证即可登录;客户端版本为 SSH2的用户必须两种认证都通过才能登录

any认证:指定该用户的认证方式可以是 password,也可以是 publickey。


四、会话请求阶段(加密)

认证通过后,客户端向服务端发起会话请求。请求被成功处理后, 服务器会向客户端回应 SSH_SMSG_SUCCESS包,SSH进入交互会话阶段;否则回应 SSH_SMSG_FAILURE包,表示服务器处理请求失败或者不能识别请求。


五、交互会话阶段(加密)

会话请求通过后,客户端与服务端进行信息的交互

 

加密阶段的数据包组成 (加密)

packet length:4个字节

Encrypted packet:变长

MAC:32个字节


采用password认证的SSH登陆数据包

 


采用publickey认证的SSH登陆数据包


由于数据包加密,通过数据包无法知道用户名,但可以通过发包频率与包的大小来判断是否是爆破行为及爆破是否成功


参考:

http://www.cnblogs.com/zmlctt/p/3946860.html


预告:十、TCP/IP协议分析-RDP协议

来源:碳基体

评论

热度(1)