本文主要介绍了Telnet、SSH 的通信原理,分析了其通信时的工作流程。
1. Telnet
无论Telnet协议连接的是什么类型终端,都会转换为NVT(Net Virtual Terminal)格式进行通信。网络虚拟终端NVT是Telnet异构跨平台的基础。
1.1 Telnet 的工作进程
本地与远程主机建立连接,该过程实际上是建立一个TCP 连接,用户必须知道远程主机的 IP 地址或域名
将本地终端上输入的用户名和口令及以后输入的任何命令或字符以NVT格式传送到远程主机。该过程实际上是从本地主机向远程主机发送一个IP 数据报
将远程主机输出的 NVT格式的数据转化为本地所接受的格式送回本地终端,包括输入命令回显和命令执行结果
最后,本地终端对远程主机撤消TCP 连接
这里,telnet协议的客户机和服务器端的数据交互都是以明文的方式来进行的。通过抓包工具很容易获取到这些数据,对网络设备进行攻击。
1.2 常见的Telnet攻击手段
密码窃取:通过抓包等方式窃取到用户帐号和密码
中间人攻击:“中间人”冒充真正的服务器接收到客户端传给服务器的数据,然后再冒充你把数据传给真正的服务器
伪服务器:攻击者冒充服务器与客户端进行交互,骗取客户端的帐号信息
2. SSH,Secure Shell
把所有传输的数据进行加密,这样"中间人"这种攻击方式就不可能实现了,而且也能够防止 DNS 和IP 欺骗,这就是SSH。
3. SSH登录过程
版本号协商。服务器打开22端口,等待客户端连接,连接后,服务器与客户端协商协议版本。
密钥和算法协商阶段。服务端和客户端分别发送算法协商报文给对方,报文中包含支持的各种协议的算法列表。根据协商服务器端和客户端选定使用的算法。服务端和客户端利用DH交换算法、主机密钥对等参数,生成会话密钥和会话ID。
认证阶段。客户端使用密钥和算法协商阶段生成的会话密钥加密账号、认证方法、口令,将结果发送给服务器。服务端使用获得的会话密钥解密报文,得到账号和口令,进行认证。SSH提供两种认证方式(2.0版本还支持password-publickey和any认证):
- 密码认证。客户端将用户名和密码加密后发送给服务器,服务器解密后进行比对认证。
- 数字签名认证。设备上利用RSA或者DSA公共秘钥算法实现数字签名,生成public和key,然后将public上传到服务器。登录认证时,服务器端向客户端发送随机字符串,用户用自己的私钥加密后,再发回来。服务器用储存的公钥进行解密认证。