一、“闲人请入”
先来看一幅截图,图(1)是在用免费网络扫描工具Languard对Internet上某一地址段进行扫描后的Snapshot,该地址段(210.53.42.1——210.53.42.254)是本地某ISP提供给它的拨号上网用户使用的。从截图上可以看出这里充斥了大量足以让任何人感兴趣的信息:上网用户的IP地址、计算机名、域(工作组)名、操作系统类型、共享资源、开放的端口,甚至还可以匿名访问共享资源(磁盘驱动器、打印机)。图(2)是在本人计算机上用Languard破解共享密码后打开的某上网用户计算机C盘目录。
情况是够严重的了。更严重的问题在于,这些用户还根本不知道自己的计算机如此暴露于Internet之上。也许,你会疑惑是否这些计算机中了Back Orifice之类的病毒,或者是否安装了FTP server?其实,这里的信息泄露与病毒无关,也不关FTP server的事,真正的“罪魁祸首”是Windows系统本身的一个漏洞—NBT(NetBIOS over TCP/IP)。
二、NBT的由来以及如何导致泄密
NetBIOS是由IBM于1983年开发的应用于局域网的网络编程接口(API)。因为NetBIOS与传输协议的无关性,通过调用NetBIOS函数,程序员不必了解下层的传输协议及路由、物理帧等细节就可以容易地编写出局域网应用程序。微软在其早期的局域网系统MS-Net中采用网络编程接口的就是NetBIOS。在后来出现的几种流行网络操作系统如LanManager、OS2、Windows for Workgroups中都使用了这一技术。同样,在目前大多数用户使用的Windows 98/Me/NT/2000中也使用了NetBIOS,以保持兼容。我们熟知的“MS网络用户”就是基于NetBIOS的网络服务程序。
不可否认,基于NetBIOS及在其基础上扩展的NetBEUI协议的局域网具有简单高效的优点,但它的致命弱点是其网络地址的不可路由。NetBIOS采用了单一、无层次的节点命名方式,其网络中每台计算机的地址就是由一个长度为16个字符(最后一个字符为系统保留)的字符串构成的计算机名。因为路由器不会在另一个网段上广播NetBIOS名以查找目标计算机,所以NetBIOS应用程序无法通过路由器访问其他网络中的计算机,这就注定了NetBIOS无法搭上Internet而“走向世界”。一方面Internet在蓬勃发展,另一方面微软自己的网络操作系统由于采用了NetBIOS而被局限于局域网中,为了解决这一矛盾,NBT便应运而生了。简单地说,NBT就是一个转换接口,实现从NetBIOS地址到TCP/IP地址的转换。通过NBT,不可路由的NetBIOS可以封装到可路由的TCP/IP协议之中,从而以TCP/IP为载体访问本网外的计算机。
启用NBT之后,根据用户使用的系统及安装的服务,以下一些端口可能将会被打开。WinNT/2000:TCP/ 135(RPC服务)、TCP/139(NetBIOS会话)、UDP/53(DNS服务)、UDP/67(DHCP服务)、UDP/137(WINS服务)、UDP/138(NetBIOS数据报),Win98/Me:TCP/139(NetBIOS会话)、UDP/137(名字服务)、UDP/138(NetBIOS数据报)。用户可以在DOS提示符下输入“NETSTAT /a”命令来查看本机上有哪些系统端口已打开并处于侦听状态,见图3。
我们这里仅讨论其中的137、139端口,因为一般基于NBT的网络攻击都是通过这两个端口发动的。在Windows系统中,导致137、139端口如此脆弱的“幕后黑手”就是“MS网络用户”。提示:如果你的桌面上有“网上邻居”,则说明你的计算机上已经安装了“MS网络用户”;反之则说明未安装。“MS网络用户”是Windows系统之间进行互联的基础,其核心是一个重定向程序(redirector),用以区分本机或网络访问请求。因此可以说,要组建Windows对等网或NT网,就必须在每台计算机上安装“MS网络用户”。
尽管如此重要,但它却有一个大漏洞,那就是允许匿名连接,即无需访问者提交任何身份证明就响应访问者的查询请求,泄露有关本机的重要信息,甚至允许对方访问本机上的共享资源(NT/2000除外)。Languard利用这一漏洞,先是对目标计算机的137端口发送名字查询,如得到回应,则利用得到的目标机名字与目标机139端口之间建立NetBIOS会话,通过该会话可以取得目标机上的共享资源列表,并访问共享资源。当然,在使用Languard的计算机上也得启用NBT。顺便提一下,Win98/Me用于保护共享资源的密码系统也是不堪一击的,Languard用逐个字符破解的方法可以轻易获取密码,成功率是100%。NT/2000则不同,只能用字典攻击的方法进行破解,成功率非常低。
三、最好的防卫手段就是获取知识
讲到这里,有必要介绍一点有关Windows系统的网络组件、层次及相互关系。在此不准备宏篇大论地讲解TCP/IP网络模型,只是从Windows 98的控制面板中的“网络”配置程序出发,介绍一下与本文相关的内容。
图4是在本机上打开的网络配置对话框。从中可以看出本机上安装了以下网络组件:①以标识的网络服务,本机中只有一项: MS网络用户;②以标识的网卡,本机中有2项:局域网卡RTL8139和拨号网络适配器;③以标识的网络协议,本机安装了NetBEUI协议和TCP/IP协议,因为有2个网卡,所以系统默认安装了2个NetBEUI实例和2个TCP/IP实例,与网卡一一对应。按调用的先后次序,这3类组件之间的层次关系如图5。图中的每一条红线都表示上一层服务可以调用红线连接的下一层服务,这种相邻上下层服务间的可调用关系被称为“绑定”。从图5可以看到,Windows默认的设置是启用所有可能的绑定。看了上面的介绍,不难了解到有问题的绑定是:“MS网络用户→TCP/IP协议→拨号网络适配器”。原因是:基于NetBIOS的“MS网络用户”绑定到TCP/IP协议时便启用了NBT,而TCP/IP协议绑定到拨号网络适配器(或与Internet直接相联的网卡)便使NBT能够联入Internet,从而发生了本文开头的那一幕。
四、 堵住“后门”,实现“隐形”
通过以上介绍,不难了解到只要关闭137~139端口,或者说停止使用NBT,就能达到“隐形”的目的。或者,用户也可以安装个人防火墙,如ZoneAlarm,压制那些危险的端口。但安装个人防火墙并没有根本解决问题,NBT依然是启用的,当防火墙失效时,137~139端口就会再次暴露;另外,配置防火墙有点难度,一般用户难于掌握,因此,这里不介绍这种方法。其实,通过对系统的少许设置,就可以关闭137~139端口,彻底解决问题。以下分几种情况进行介绍。
1. 单机。用户计算机没有联入局域网,通过拨号上网。
①Windows 98/Me。应该删除已经安装了的MS网络用户。方法是在如图4所示的网络配置对话框中点击“MS网络用户”,然后点击“删除”,随后,“Microsoft网络用户”以及与其相关的“MS网络文件与打印机共享”(如果安装了的话)就会消失,重新启动计算机后就可以了。大家应该记住这一点:“MS网络用户”只是用在需要与其他运行Windows系统的计算机相联的场合,对于Internet应用,它是毫无用处的。因此,完全可以放心大胆地将其删除。另外,只安装必要的TCP/IP协议,其它像IPX、NetBEUI只用于局域网,安装它们只会白白浪费内存空间,也增加了系统启动时间,应该将其删除。总而言之,对于单机上网用户而言,最安全、最有效率的网络配置如图6所示。
②Windows NT。可不能像在Win98/Me下一样采取删除“MS网络用户”(在NT中叫做“NetBIOS接口”)的方法,否则你会发现重新启动后就再也无法正常使用NT了。因此,我们得要用稍微复杂一点的方法。
a.添加一个Loopback网卡(该网卡是用于内部测试的软件模拟网卡)。添加方法如下:首先右单击“网络邻居”图标,选择“属性”,打开网络配置窗口,点击“适配器”选项卡,点击“添加”,随后在清单中选中“MS Loopback卡”,点击两次“确定”后会出现如图8所示的窗口,这时应在此窗口中输入该卡的IP地址及网络掩码(如10.0.0.1及255.255.255.0)。
b.点击“绑定”选项卡,在下拉列表中选中“所有协议”,随后禁用“WINS客户(TCP/IP)”项下的“远程访问WAN Wrapper”,正确的设置如图9所示。最后重新启动计算机就可以了。
2. 用户计算机位于局域网上。计算机上除了拨号适配器外,还另外安装了一块网卡,以联入公司局域网。
① Windows 98/Me。从图4可以看到,系统中安装了几块网卡,就默认有几个TCP/IP实例,本例中有2个:“TCP/IP→拨号网络适配器”、“TCP/IP→Realtek 8139”。双击以上任意一个TCP/IP实例,都将打开一个如图10所示的TCP/IP协议配置窗口。注意图7中的“绑定”选项卡,在这里就指定了是否将“MS网络用户”绑定到本TCP/IP实例上,系统默认是绑定。根据上面的介绍,大家可能会推断出这样一个解决方案:将“TCP/IP→拨号网络适配器”中的“MS网络用户”禁用,只启用“TCP/IP→Realtek 8139”中的“MS网络用户”以用于与局域网计算机互联,这样的话,系统的网络组件层次就如图11所示。如此表面看来似乎是无懈可击了,但是与Windows NT/2000不同,Windows 98/Me系统有这样一个漏洞:只要系统中存在任何一个绑定了“MS网络用户”的TCP/IP实例(这里是“MS网络用户→TCP/IP协议→Realtek 8139”),那么“MS网络用户”对其它TCP/IP实例都是启用的。也就是说,在Windows 98/Me系统中,在任一网卡上启用了NBT,便同时在其它网卡上也启用了NBT。因此,正确的解决方案如下:
a.如果没有的话,添加NetBEUI协议。在图4中点击“添加”,然后选择“协议”,之后选择“Microsoft”的“NetBEUI”,最后点击“确定”便回到图4所示的窗口。在图4中点击“NetBEUI→拨号网络适配器”,然后点击“删除”。
b.在图4中双击“TCP/IP→Realtek 8139”,在“绑定”选项卡下禁用“MS网络用户”,然后点击“确定”回到图4所示窗口。
c.在图4中双击“TCP/IP→拨号网络适配器”,在“绑定”选项卡下禁用“MS网络用户”,然后点击“确定”回到图4所示窗口。
d.在图4中点击“确定”,重新启动计算机。
e.重新启动后,双击图4中的“TCP/IP→Realtek 8139”或“TCP/IP→拨号网络适配器”,点击“NetBIOS”选项卡,这时应该可以看到“要通过TCP/IP启用NetBIOS”前的复选框是空白的(以前是灰色不可选的),见图12,这表示已经大功告成,该计算机上的137~139端口已经永久性地关闭了。
做完以上5步以后,此时系统网络组件层次如图13所示。这样一来,本机将通过NetBEUI协议访问局域网计算机上的共享资源,同样,局域网计算机也只能通过NetBEUI协议访问本机上的共享资源。另外,保留“TCP/IP→Realtek 8139”是因为局域网内存在Intranet应用,比如本机充当局域网的代理服务器,或本机需要访问内部的FTP、Web服务器等。
②Windows NT。见图14,只需禁用“WINS客户(TCP/IP)”项下的“远程访问WAN Wrapper”即可,只不过此时的“MS Loopback卡”换成了真正的局域网卡“Realtek 8139”。
3.以上两种情况都没有讨论在Win2000系统中如何进行设置,是因为Win2000比Win9x和WinNT都“聪明”得多,在用户添加拨号网络时,它自动撤消“MS网络用户”对该拨号网络适配器的绑定,无需用户另行设置就已经将“后门”关闭了。
4.以上讨论的都是通过拨号上网时的设置方法,也适用于ISDN。另外,现在很多用户是通过ADSL或有线电视上网,也就是说除了局域网卡外,还有一块网卡通过连接ADSL Modem或Cable Modem直接联入Internet。其实,设置这样的计算机与拨号上网时的原理是一样的,就是解除NBT同能够与Internet发生联系的那张网卡的绑定关系。限于篇幅的关系,这里就不作介绍了,相信读者仔细看了前文后可以举一反三。
五、真的“隐形”了吗?
这里为大家介绍一个网络安全网站www.grc.com。该网站安装了远程NBT测试软件,从黑客的角度攻击用户计算机的137、139端口,如果入侵成功的话,用户会在网页上看到自己计算机的相关信息(计算机名、用户名、共享资源等)。
好了,现在大家按照本文介绍的方法关闭Windows后门后,那就请拨号上网,进入GRC.COM,点击“Shields up!!”,点击,查看一下自己的计算机是不是“守口如瓶”?如果还不相信的话,就请点击,让GRC.COM扫描一下你的计算机端口,怎么样,是不是已经看到了“Port 139”—“Closed”!