Telnet技术全景:从协议定义到流量洞察
Telnet协议定义&应用背景
Telnet(Telecommunication Network)协议是一个早期的网络协议,它用于在互联网或局域网中的一台计算机上登录另一台计算机。
Telnet协议是TCP/IP协议族中的一员,是Internet远程登录服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用Telnet程序,用它连接到服务器。终端使用者可以在Telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样,可以在本地就能控制服务器。要开始一个Telnet会话,必须输入用户名和密码来登录服务器。Telnet是常用的远程控制Web服务器的方法。
Telnet的历史可以追溯到20世纪60年代末期,当时为了满足ARPANET(高级研究项目局网络,即互联网的前身)的需求而开发。它为远程登录提供了一个简单的、无图形的界面,用户可以通过它执行命令或管理系统。
Telnet协议分析
工作过程
建立连接:首先,本地计算机会与远程主机建立一个TCP连接。用户需要知道远程主机的IP地址或域名才能进行连接。
传送信息:用户在本地终端输入的用户名、口令以及后续的命令或字符会以网络虚拟终端(NVT)的格式传送到远程主机。
数据转换:远程主机输出的信息(NVT格式)会转换为本地终端可以接受的格式,然后送回本地终端。这包括输入命令的回显和命令执行的结果。
撤消连接:最后,用户完成操作后,本地终端会关闭与远程主机的TCP连接。
Telnet命令
在Telnet通信中,IAC(Interpret As Command)是一个特殊的命令序列引导符,由字节0xff(十进制的255)表示。当Telnet需要传送数据值为255的字节时,为了避免与IAC指令冲突,它会发送两个连续的字节值为255。虽然Telnet通常遵循7位的NVT ASCII格式,其中数据值255不会直接传输,但Telnet协议支持一个二进制传输选项,允许8位数据传输,这一点在RFC 856中有定义。这样,Telnet就可以传输任意8位字节数据,包括二进制文件。
图1:Telnet命令
Telnet选项协商
Telnet选项协商是一个对称的过程,意味着连接的任一方都可以开始选项协商。在选项协商中,三个字节的序列用来确定是否激活或禁用特定的Telnet选项。这三个字节是:
IAC(Interpret As Command)字节,标志着接下来的内容是一个命令而非普通数据。
第二个字节是控制字节,它可以是WILL, DO, WONT, DONT中的一个,表明发送方希望启用还是禁用某个选项,或是对方启用还是禁用。
第三个字节是选项本身的标识(ID字节),指明了哪个特定的Telnet选项被提议激活或禁止。
选项协商的规则要求,对于激活选项的请求(WILL, DO),接收方有权同意(DO, WILL)或不同意(DONT, WONT);而对于禁用选项的请求(WONT, DONT),接收方必须同意禁用(DONT, WONT)。因此,不同的请求会产生六种可能的协商结果。
图2:Telnet选项协商选项
尽管Telnet协议本身是对称的,但远程登录的应用并不对称。客户端和服务器端可能会有不同的选项需求,某些选项可能只适用于客户端,而某些只适用于服务器端。
流量分析
初始化TCP连接时,客户端与服务器通过TCP的三次握手过程建立连接,目标端口为23,这是Telnet的标准端口。
一旦TCP连接建立,客户端与服务器开始交换协议相关的控制信息,并定期使用TCP数据包维持连接状态。
双方确认控制信息无误后,进入准备接收用户指令的状态。
图3:Telnet三次握手
客户端发起对Suppress Go Ahead(SGA)选项的协商,以告知服务器在会话中省略GO AHEAD命令。客户端发送“DO”命令,表示请求服务器激活特定的选项。
图4:Telnet选项协商请求
服务器响应客户端的SGA请求,并同意激活该选项,使用“DO”响应表示同意。
随后,服务器尝试协商“Do X Display Location”选项,并向服务器发送Do X Display Location选项,在此期间一直保持TCP连接。图4:Telnet选项协商请求
服务器响应客户端的SGA请求,并同意激活该选项,使用“DO”响应表示同意。
随后,服务器尝试协商“Do X Display Location”选项,并向服务器发送Do X Display Location选项,在此期间一直保持TCP连接。
图5:Telnet选项协商请求
但客户端以“WON'T”响应拒绝,表示不接受此项协商。
图6:Telnet选项协商请求
服务器继续发送其他选项协商请求,例如请求窗口大小协商。
图7:Telnet选项协商请求
客户端应答窗口大小协商请求,表示结束该选项协商。
图8:Telnet选项协商请求
服务器确认子选项协商结束,并发送数据包提示客户端进入子选项协商的结束阶段。
图9:Telnet选项协商请求
客户端回应以确认。
接下来,服务器尝试启用Echo功能,但客户端通过回应“WON'T Echo”拒绝了。
图10:Telnet选项协商请求
服务器可能会发送“WONT SUPPRESS GO AHEAD”或“WONT ECHO”来表示它希望禁用这两个选项。
如果有攻击尝试,客户端可能会发起新的选项协商,但正常情况下,客户端会响应“DO”以同意合适的协商请求。
图11:Telnet选项协商请求
之后,系统会提示用户输入用户名。
图12:Telnet登录用户名输入
客户端每输入一个字符,Telnet协议就会发送一个数据包,服务器随即回应。
图13:Telnet登录用户名输入
用户名输入后,服务器回送提示符要求输入密码。
图14:Telnet登录密码输入
在密码输入期间,每输入一个字符会产生两个数据包:一个是Telnet数据包,另一个是TCP数据包,且密码是以明文形式传输的。
图15:Telnet登录密码输入
用户完成密码输入并验证成功后,服务器发送欢迎消息并为客户端提供会话模式。客户端此时可以输入命令,而Telnet数据部分的$符号表示命令输入点。
图16:Telnet登录验证成功
服务器向客户端发送完说明信息后,将为客户端提供会话模式。客户端就可以在该模式下输入要执行的命令,其中数据包Telnet部分的数据信息为$,表示客户端可以在此处输入要执行的命令。
图17:Telnet执行命令
威斯尼斯人wns2299cn安全研究院
威斯尼斯人wns2299cn安全研究院专注工控协议和安全漏洞库研究,具备持续性的工业协议分析能力、漏洞挖掘能力以及病毒处理、灾后数据恢复能力,为国家多个管理机构提供漏洞上报和预警信息上报。分析过200个以上的工控漏洞,挖掘出艾默生DCS、西门子PLC、VxWorks等多款设备的0Day漏洞。成立至今,上报国家工业信息安全漏洞库(CICSVD)原创通用型漏洞百余个,国家信息安全漏洞库(CNNVD) 原创通用型漏洞百余个。威斯尼斯人wns2299cn工控漏洞库维护着数千个工控漏洞及工控漏洞利用代码和扫描指纹,近千种各工控设备厂商产品信息;威胁情报库、安全事件知识库数量110万余条;维护着数百种工控固件/软件版本识别指纹。曾获国家信息安全漏洞库(CNNVD)-二级技术支撑单位、国家信息安全漏洞库(CNNVD)年度优秀技术支撑单位、2021年度国家工业信息安全漏洞库技术支持组成员单位、工业信息安全应急服务支撑单位(NISIA)、工业信息安全监测预警网络建设-CICS-CERT支撑单位等。目前,威斯尼斯人wns2299cn提交的工业和信息化部网络安全威胁和漏洞信息共享平台通用网络产品安全漏洞库的漏洞中,有数十项漏洞已被收录,包括超危、高危、中危漏洞。