Telnet服务攻防之新手上路
Telnet服务是最早的远程访问服务。它是在网络发展的早期,所有的操作系统还基于命令模式控制时,为了解决用户远程维护主机、远程办公等用户需求而特意开发的一个服务,被一直沿用到现在。
当终端服务这个基于图形界面访问的服务推出之后,现在已经很少有人利用Telnet服务进行远程访问和远程办公了。但是Telnet服务却摇身一变成为了黑客的最爱。据统计,被黑客利用得最多的一个系统服务,就是Telnet服务。
黑客为什么不喜欢使用同样基于远程访问,并且更加方便直观的终端服务,而偏爱Telnet服务呢?难道因为黑客就喜欢在黑乎乎的命令窗口中操作吗?NO,当然不是这样。因为使用Telnet服务进行远程控制更加隐蔽,对系统的资源消耗也非常小,并且只需要一个命令即可开启和关闭它。所以对于网络安全来讲Telnet服务是一个非常危险的服务。
Telnet服务使用Telnet协议传输,在系统中使用的默认端口为TCP23端口。由于Telnet协议是集成在TCP/IP协议中的,所以我们无法使用删除协议的办法来禁止Telnet服务。在我们讲防御Telnet服务之前,首先来看看黑客是如何利用Telnet服务的(笔者系统为Windows2000)。
攻:利用Telnet服务入侵
1.开启Telnet服务
要想利用系统当中的Telnet服务必须先开启Telnet服务,因为在默认情况下Telnet服务是被系统所禁止的。所以当黑客使用缓冲溢出,IPC$等方法拿到远程主机的Shell之后,必须开启Telnet服务。
在命令行方式下开启Telnet服务的方法非常简单,只要在命令行当中键入“net start telnet”命令,即可开启系统中的Telnet服务。这是黑客使用得最多的一种开启Telnet服务的手法(图1)。
图1
2.利用Telnet服务
那么是不是启动了Telnet服务,黑客就可以利用Telnet服务连接到远程主机中去了呢?在命令行窗口中键入“telnet IP”命令,如telnet 192.168.0.3,这时命令行窗口会出现如图2所示的情况。
图2
在这个窗口中,无论用户选择“Y”还是“N”都会出现“失去了跟主机的连接”提示。
这是因为用户没有通过远程主机的NTLM验证。正是利用NTLM这个基于WorkGroup网络当中的身份验证协议,使得黑客不能轻易地利用到Telnet服务,这时即使黑客知道了Telnet服务器的管理员用户名和密码,他仍然通不过NTLM验证,这无疑给系统带给了一定的安全性。
3.突破NTLM验证
既然入侵者无法通过NTLM验证,那么Telnet服务就安全了?其实黑客有非常多的方法可以突破NTLM验证。
比如黑客知道了Telnet服务器上的一个管理员组的用户名和密码(如用户名为xiewei,密码为12345),那么黑客可以在自己的系统中建立一个用户名和密码与之相同的管理员组用户。然后按住“Shift”键不放,找到“开始→程序→附件”中的“命令提示符”,右击“命令提示符”选项,可以在右键菜单中看到一个“运行方式”选项,打开它就可以看到一个选择用户打开程序的选项,勾上“下列用户”,黑客就可以在选项中填入刚刚建立的与Telnet服务器上等同的管理员组用户(图3), 确定之后在打开的命令行窗口中,连接Telnet服务器,就可以非常顺利地通过NTLM验证。
图3
这只是突破NTLM验证方法中的一种,黑客如果拿到了远程系统的CmdShell,可以上传一些第三方的工具,如Ntlm.exe,然后执行这一工具也可以删除NTLM验证。
在系统中用户其实也可以手动地更改NTLM验证的设置,在“Telnet服务管理器”中就提供了修改NTLM验证的选项。用户可以在“程序→控制面板→管理工具”中找到“Telnet服务管理”选项,单击就可以打开。或者用在命令行窗口下键入“tlntadmn.exe”也可以打开“Telnet服务管理器”。用户可以看到“Telnet服务管理器”是以命令行的方式出现的。选择当中的选项3“显示 / 更改注册表设置” (图4),用户可以看到会出现一个选项的列表,总共有八个选项。
图4
大家可以发现,选项7是针对NTLM验证的,它的默认值是“2”,其中还有两个值可以选择,分别是“0”和“1”。“0”的意思是不使用 NTLM 身份验证;“1”则表示先尝试 NTLM 身份验证,如果失败,再使用用户名和密码;“2”的意思是只使用 NTLM 身份验证。
如果把NTLM的值改为“0”或者“1”,在Telnet连接的时候,我们都可以顺利地通过NTLM验证。所以接下来的步骤,选择列表中的“(7)NTML”,并且选择“Y”更改默认值,最后把NTLM验证的值改为“0”或者“1”即可(图5)。从图5中可以看到“Telnet服务管理器”提示,只有当Telnet服务重新启动之后配置才能够生效。用户可以在命令行窗口下键入“net stop telnet”和“net start telnet”即可重新启动Telnet服务。
图5
接下来远程用户就可以使用“telnet IP”连接到Telnet服务器上了,虽然没有了NTLM验证的限制,但是访问用户必须键入Telnet服务器的管理员组用户名和密码方能访问到。当访问到时,用户就可以执行Windows SHELL命令来管理远程主机了。
防:全面封锁Telnet服务
知道了黑客利用Telnet服务的手法,那么针对Telnet服务的防御办法自然也就有了。根据黑客利用Telnet服务的思路,笔者总结了防御Telnet服务四种方法。
1.管理好用户的密码
最简单的方法,管理好本机系统当中的用户名和密码,如果用户名和密码无法被黑客取得,那么黑客将很难利用到Telnet服务。
2.修改服务端口
从前面的内容中大家可以了解到Telnet服务使用的是系统的23端口,如果我们修改了Telnet服务的默认端口,无疑隐藏了Telnet服务的入口点,给系统带来了一定的安全保障。修改方法非常简单,首先打开“Telnet服务管理器”,同样选择当中的选项3“显示 / 更改注册表设置”,打开Telnet服务管理列表,选择当中的选项8“TelnetPort”,选择“Y”更改Telnet服务的默认端口23,把Telnet服务的端口改为1024或1024以上的端口,确定即可。接着重新启动Telnet服务,配置即可生效。以后用户只要键入“telnet IP 1024”即可访问到Telnet服务器。
3.禁用Telnet服务
大家知道要想使用Telnet服务必须开启Telnet服务,假如黑客利用缓冲溢出或者其它方法拿到了用户的CmdShell,那么他只要在中CmdShell下键入“net start telnet”即可启动Telnet服务,并且可以利用Telnet服务作为用户系统中的后门使用。有什么办法才能够阻止黑客开启Telnet服务呢?其实办法非常简单,禁用Telnet服务即可实现。用户打开“控制面板→管理工具→服务”在当中找到Telnet服务选项,双击就可以进入“Telnet服务属性”对话框,在“启动类型”中选择“已禁用”,单击“确定”按钮即可。
4.终极Telnet服务
禁用服务并不是防御Telnet服务的终极办法,针对这一限制,黑客专门有一些第三方工具,只要拿到了远程主机的CmdShell,他只须上传该工具到远程主机并运行它就可以突破禁用服务这一限制,开启Telnet服务。
所以针对这个问题,笔者最后给大家介绍一种最完美的防御方法。
首先打开“Telnet服务管理器”,同样选择选项3“显示 / 更改注册表设置”,进入Telnet服务管理列表,大家可以看到其中的选项4“DefaultShell”,前面我们已经介绍过这个选项的具体含义,“显示Telnet服务所对应的程序。默认值是: %Systemroot%\System32\Cmd.exe /q /k”,这个含义的具体意思是什么呢?为什么当我们通过Telnet验证的时候能够取得远程主机的命令控制权限呢?
因为我们可以看到Telnet服务对应的默认程序是“%Systemroot%\System32\Cmd.exe /q /k”也就是系统根目录WinNT(或Windows)下System32目录下的Cmd.exe,我们都知道Cmd.exe是系统中的命令行窗口,那么当远程用户通过了Telnet验证的话,远程系统就会把自己的Cmd.exe调给远程用户使用,这就是为什么使用Telnet能够拿到远程主机命令控制权限的最根本原因。
讲到这里似乎防御方法也出来了,其实思路很简单,我们把Telnet服务所对应的默认程序改为一个未知的程序,这样即使黑客知道了远程主机的管理员用户和密码,突破了NTLM验证对方仍然无法拿到对主机的命令控制权,因为Telnet服务对应的默认程序已经不在是Cmd.exe中。有了好思路我们就来具体使用这个方法。
选择Telnet服务管理列表中的选项4“DefaultShell”,就会提示我们是否更改Telnet服务的默认设置,选择“Y”,并且把Telnet服务对应的默认程序改为一个未知的文件,如:%SystemRoot%\system32\xiewei.exe,我的系统中根目录下根本不存在xiewei.exe文件,设置好之后重新启动服务。
设置好之后,我们来看一下它的效果。假如现在黑客知道这台系统的管理员用户Administrator,密码为12345,并且这台系统开启了Telnet服务,NTLM验证也被突破,那么使用 “Telnet IP”连接到这台系统,这时会提示键入远程系统的用户名和密码,证明已经通过了NTLM验证,在正确地输入用户名密码之后,系统仍然提示“失去了跟主机的连接”。
通过对这种方法,用户可以全面禁止系统中的Telnet服务。
|