揭开Windows秘密 潜伏在默认设置中的陷井

/ns/wz/sys/data/20030221192718.htm

转自:日经BP社

在默认设置条件下直接运行Windows,很多端口就会处于开放状态。由于多种服务会自动起动,因此不需进行复杂的设置就能够使用各种服务。但如果置之不理,就可能成为攻击者的攻击对象。安全对策的基础是严格区分必要和不需要的服务,然后关闭不需要的服务。为此就必须了解Windows在默认设置中处于开放状态的具有代表性的端口的作用及其危险性,并进行适当的设置。

通过因特网,服务器硬盘中的内容全部都可以看见。而且还能够非常轻松地篡改和删除其中的数据。也许读者会想:哪里有有设置如此笨拙的服务器?!很多人觉得只要不进行极端的设置、故意对外公开硬盘中的内容,就不会出现这种情况。但实际上,在Windows中,即便管理员并非明确地起动某种服务、或者开放某个端口,也有可能发生这种情况。

net use m:\\xxx.xxx.xxx.xxx\c$
●如果使用net命令,就能够分配到共享资源。“C$”是C盘的共享名

在默认设置下,Windows会开放提供文件共享服务的TCP的139号端口。因此,在默认条件下起动文件共享服务后,系统就进入等待状态。由此,机器就会始终处于被攻击者访问共享资源的危险境地。而共享资源则可以利用net命令轻松地进行分配。尽管C盘如果没有管理员权限就无法共享,但如果不经意地将Guest帐号设置为有效以后,就能够访问C盘,这样一来就非常轻松地破坏硬盘。而且,今后也有可能发现其它利用文件共享服务发动攻击的严重安全漏洞。

安全对策的基本原则是关闭不需要的服务。如果不起动服务,即便外部发来连接请求,机器也不会作出响应。要做到这一步,电脑管理员就必须充分了解哪些服务是必须的,以及目前实际上起动了哪些服务。

  但是,在Windows中,在默认条件下会起动很多服务,而且很多时候各服务的作用也不容易搞清楚。而很多管理员不仅认识不到端口开放的危险性,而且在不了解服务的作用和必要性的情况下就会直接连接因特网.
应该注意的5个端口

  那么,实际上在Windows默认条件下所开放的端口有哪些呢?在安装了Windows系统后,对在默认条件下开放的端口进行了一次调查。调查中使用了免费端口扫描工具“Nmap”(http://www.insecure.org/nmap/)。

在几乎所有的Windows中所开放的端口包括135、137、138和139。此外,在2000、XP和.NET Server中445端口也是开放的。Windows在默认条件下开放的众所周知的端口就是这5个

这些到底是不是真正必要的服务呢?要想下结论,就必须充分了解这些端口各自的作用。虽说在默认条件下是开放的,但如果保持这种默认设置不变,就会在无意识的情况下受到非法访问。因此,应该尽可能关闭不需要的服务。无论如何也不能停止的服务必须使用过滤软件,确保能够防止外部访问.
下面对几乎所有的Windows在默认条件下开放的最具代表性的5个端口即135、137、138、139和445等各自的作用作一详细介绍。了解它们的作用后,就能够推测出开放端口后可能存在哪些危险,从而就可以方便地制定相应的对策。

  利用工具验证到的135端口的危险性

  虽说大家都说非常危险,但即难以了解其用途,又无法实际感受到其危险性的代表性端口就是135号。但是2002年7月能够让人认识到其危险性的工具亮相了,这就是“IE‘en”。

  该工具是由提供安全相关技术信息和工具类软件的“SecurityFriday.com”公司(http://www.securityfriday.com)在网上公开提供的。其目的是以简单明了的形式验证135端口的危险性,呼吁用户加强安全设置。不过,由于该工具的威力非常大,因此日本趋势科技已经将该工具的特征代码追加到了病毒定义库文件中。如果在安装了该公司的病毒扫描软件的电脑中安装IE‘en,就有可能将其视为病毒。

  可以看到SSL的内容

  IE‘en是一种远程操作IE浏览器的工具。不仅可以从连接到网络上的其他电脑上正在运行的IE浏览器中取得信息,而且还可以对浏览器本身进行操作。具体而言,就是可以得到正在运行的IE浏览器的窗口一览表、各窗口所显示的Web站点的URL及Cookie,以及在检索站点中输入的检索关键词等信息。

  该工具所展示的最恐怖的情况是,在非加密状态下可以看到本应受到SSL保护的数据。所以可以由此获取加密前或者还原后的数据。如果使用IE‘en,甚至能够直接看到比如在网络银行等输入的银行现金卡密码等信息。

  IE‘en使用的是Windows NT4.0/2000/XP标准集成的分布式对象技术DCOM(分布式组件对象模块)。使用DCOM可以远程操作其他电脑中的DCOM应用程序。该技术使用的是用于调用其他电脑所具有的函数的RPC(Remote Procedure Call,远程过程调用)功能。而这个RPC使用的就是135端口。

利用RPC功能进行通信时,就会向对方电脑的135端口询问可以使用哪个端口进行通信。这样,对方的电脑就会告知可以使用的端口号。实际的通信将使用这个端口来进行。135端口起的是动态地决定实际的RPC通信所使用的端口的端口映射作用。

  如果是利用DCOM技术开发的应用程序,都可以像IE浏览器那样进行操作。比如,连接正在利用Excel工作的其他电脑,获取单元格中输入的值,或者对这个值本身进行编辑并非不可能的事情。

  不过,要想利用该方法操纵他人的电脑,就必须知道该机的IP地址和注册名以及密码。因此,通过因特网而受到第三者的攻击的可能性非常低。而危险性最高的是公司内部环境。尤其是客户端更为危险。这是因为在大多情况下不仅可以轻而易举地得到他人的IP地址和注册名,而且密码的管理也不是很严格。学校以及网吧等多台电脑采用相同设置的场合也需加以注意。

  在公司内部环境中务必将DCOM设置为无效回避这种危险的最好办法是关闭RPC服务。在“控制面板”的“管理工具”中选择“服务”,在“服务”窗口中打开“Remote Procedure Call”属性。在属性窗口中将启动类型设置为“已禁用”,自下次起动开始RPC就将不再启动(要想将其设置为有效,在注册表编辑器中将“HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesRpcSs”的“Start”的值由0x04变成0x02后,重新起动机器即可)。不过,进行这种设置后,将会给Windows的运行带来很大的影响。比如Windows XP Professional,从登录到显示桌面画面,就要等待相当长的时间。这是因为Windows的很多服务都依赖于RPC,而这些服务在将RPC设置为无效后将无法正常起动。由于这样做弊端非常大,因此一般来说,不能关闭RPC服务。

  那么接下来要考虑的对策是信息包过滤。但是这同样也会给Windows的运行带来各种影响。比如,如果在客户端关闭135端口,就无法使用Outlook连接Exchange Server。因为管理分布式处理的MSDTC、负责应用程序之间的信息交换的MSMQ以及动态地向连接网络的电脑分配地址的DHCP等服务也都使用这个端口。

  精通Windows网络的高桥基信表示:“在Windows服务中,有很多服务需要使用RPC。另外,Windows网络并不是设想在客户端与服务器之间存在防火墙的状态而组建的。因此公司内部网络环境中使用过滤功能时,应该在充分验证后加以实施”。也就是说,在公司内部环境中不仅是客户端,即便是服务器也无法关闭135端口。服务器方面,为了使活动目录和主域实现同步,就要使用135端口。
但是却有办法只将DCOM设置为无效。这就是利用Windows NT/2000/XP标准集成的“dcomcnfg.exe”工具。从DOS命令中运行该工具以后,打开分布式COM配置属性窗口,选择“默认属性”页标,取消“在这台计算机上启用分布式COM”选项即可(图3)。在公司内部不使用DCOM,并且不想让其他计算机操作自己电脑COM的时候,就应该采用这种设置。

  如果是客户端,也有办法禁止远程登录电脑。依次选择“控制面板”、“管理工具”和“本地安全策略”,打开本地安全设置窗口,选择本地策略中的用户权利指派,然后利用该项下的“拒绝从网络访问这台计算机”,指定拒绝访问的对象。如果想拒绝所有的访问,最好指定为“Everyone”。

  公开服务器应该关闭135端口

  公开于因特网上的服务器基本上不使用RPC。如前所述,尽管危险性比公司内部环境低,但只要不运行使用DCOM的特定应用程序(只要不是必须的服务),就应该关闭135端口。比如只是作为Web服务器、邮件或DNS服务器来使用的话,即便关闭135端口,也不会出现任何问题。

  不过需要通过因特网来使用DCOM应用程序时,就不能关闭该端口。但需要采取严格管理密码的措施。

“话匣子”端口137和138

具体而言,就是说通过137端口除了该机的计算机名和注册用户名以外,还可以得到该机是否为主域控制器和主浏览器、是否作为文件服务器使用、IIS和Samba是否正在运行以及Lotus Notes是否正在运行等信息。据SecurityFriday.com公司的Michiharu Arimoto介绍:“除了计算机名以外,还可以准确地了解IIS、主域控制器、主域浏览器以及文件服务器等相关信息。虽说不是百分之百,但有时还能够得到其他信息”。

也就是说,只要您想获得这些信息,只需向这台个人电脑的137端口发送一个请求即可。只要知道IP地址,就可以轻松做到这一点。不只是公司内部网络,还可以通过因特网得到这样的信息。

  对于攻击者来说,这简直太方便了,可以很容易地了解目标电脑的作用及网络的结构。随意地泄漏这样的信息,就好象是很友好地告诉攻击者应该如何来攻击自己的电脑。比如,如果知道IIS服务正在运行,就可以轻松地了解这台电脑上已经起动的服务。攻击者根本不必特意地通过端口扫描来寻找可以下手入侵的端口。

  另外,如果捕捉到正在利用137端口进行通信的信息包,还有可能得到目标主机的起动和关闭时间。这是因为Windows起动或关闭时会由137端口发送特定的信息包。如果掌握了目标主机的起动时间,就可以非常轻松地使用上一次所讲的IE‘en等软件通过135端口操作对方的DCOM。

使用137端口,管理计算机名

  137端口为什么会把这种信息包泄漏到网络上呢?这是因为,在Windows网络通信协议--“NetBIOS over TCP/IP(NBT)”的计算机名管理功能中使用的是137端口。

  计算机名管理是指Windows网络中的电脑通过用于相互识别的名字--NetBIOS名,获取实际的IP地址的功能。可以用两种方法使用137端口。

  一种方法是,位于同一组中的电脑之间利用广播功能进行计算机名管理。电脑在起动时或者连接网络时,会向位于同组中的所有电脑询问有没有正在使用与自己相同的NetBIOS名的电脑。每台收到询问的电脑如果使用了与自己相同的NetBIOS名,就会发送通知信息包。这些通信是利用137端口进行的。

另一种方法是利用WINS(Windows因特网名称服务)管理计算机名。被称为WINS服务器的电脑有一个IP地址和NetBIOS名的对照表。WINS客户端在系统起动时或连接网络时会将自己的NetBIOS名与IP地址发送给WINS服务器。与其他计算机通信时,会向WINS服务器发送NetBIOS名,询问IP地址。这种方法也使用137端口。

  如上所述,为了得到通信对象的IP地址,137端口就要交换很多信息包。在这些信息包中,包括有如表3所示的很多信息。利用广播管理计算机名时,会向所有电脑发送这些信息。如果使用NBT,就会在用户没有查觉的情况下,由电脑本身就会向外部散布自己的详细信息。

138端口用于浏览

  而138端口也和137端口一样会向外部发送自己的信息。尽管信息量没有137端口那么多,但其特点是会被别人得到Windows的版本信息。比如,会泄漏Windows版本是Windows 2000 Server。

  138端口提供NetBIOS的浏览功能。该功能用于显示连接于网络中的电脑一览表。比如,在Windows2000中由“网络邻居”中选择“整个网络”后,就会完整地显示连接于网络中的电脑。

  该功能使用的是与上面所讲的计算机名管理不同的运行机制。在浏览功能中,被称为主浏览器的电脑管理着连接于网络中的电脑一览表的浏览列表。每台电脑在起动时或连接网络时利用138端口广播自己的NetBIOS名。收到NetBIOS名的主浏览器会将这台电脑追加到浏览列表中。需要显示一览表时,就广播一览表显示请求。收到请求的主游览器会发送浏览列表。关闭电脑时,机器会通知主浏览器,以便让主浏览器将自己的NetBIOS名从列表中删除掉。这些信息的交换使用的是138端口。由于这里也会进行广播,因此就会将自己的电脑信息发送给同组中的所有电脑。

  公开服务器应关闭NetBIOS

  NetBIOS服务使用了137和138端口的向外部发送自己信息的功能。一般情况下,这是一种在连接在因特网上的公开服务器不需要的服务。因为NetBIOS主要用于Windows网络中。因此,公开服务器应该停止这种服务。

  而对于在公司内部网络环境中构筑Windows网络的电脑来说,NetBIOS则是必要的服务。如要停止NetBIOS,反过来就必须放弃Windows网络的方便性。
不过,如果是Windows 2000以上的版本,不使用NetBIOS也能够管理计算机名(详情后述)。因此如果是全部由Windows 2000以上的个人电脑构筑而成的网络,就可以停止NBT。虽说如此,此时方便性就会降低,比如,无法显示用于寻找文件共享对象的信息。

  要想停止NetBIOS服务,首先由控制面板中选择目前正在使用的网络连接,在属性窗口中查看“Internet协议(TCP/IP)”的属性。在“常规”页标中单击“高级”按钮,在“WINS”页标中选择“禁用TCP/IP上的NetBIOS(S)”即可。这样,就可以关闭137、138以及后面将要讲到的139端口。

  在此需要注意一点。NetBEUI协议如果为有效,NetBIOS服务将会继续起作用。在Windows 95中,NetBIOS是在默认条件下安装的。在更高的Windows版本中,如果选择也可以安装。所以不仅要停止NBT,还应该确认NetBEUI是否在起作用。如果使用NetBEUI,即便关闭137端口,也仍有可能向外部泄漏表3所示的信息

139和445端口是危险的代名词

  连接于微软网络上的电脑之间使用137和138端口取得IP地址。然后进行文件共享和打印机共享等实际通信。通信过程是通过SMB(服务器信息块)协议实现的。这里使用的是139和445端口。

Windows 2000以前版本的Windows使用NetBIOS协议解决各计算机名的问题。通过向WINS服务器发送通信对象的NetBIOS名,取得IP地址。而Windows以后的版本所采用的CIFS则利用DNS解决计算机的命名问题。根据DNS服务器中的名字列表信息,寻找需要通信的对象。如果顺利地得到对象的IP地址,就可以访问共享资源

在SMB通信中,首先使用上述的计算机名解释功能,取得通信对象的IP地址,然后向通信对象发出开始通信的请求。如果对方充许进行通信,就会确立会话层(Session)。并使用它向对方发送用户名和密码信息,进行认证。如果认证成功,就可以访问对方的共享文件。在这些一连串的通信中使用的就是139端口。

  Windows 2000和XP除此之外还使用445端口。文件共享功能本身与139端口相同,但该端口使用的是与SMB不同的协议。这就是在Windows 2000中最新使用的CIFS(通用因特网文件系统)协议。

CIFS和SMB解决计算机名的方法不同。SMB使用NetBIOS名的广播和WINS解决计算机名,而CIFS则使用DNS
因此,在文件服务器和打印服务器使用Windows的公司内部网络环境中,就无法关闭139和445端口。很多情况下,文件共享和打印机共享在普通的业务中是不可缺少的功能。而客户端如果自身不公开文件,就可以关闭这两个端口。

  假如是仅2000版本以后的Windows构成的网络,就可以关闭139端口。这是因为如前所述,该网络只用445端口就能够进行文件共享。由于在解决计算机名过程中使用DNS,所以也可以关闭137和138端口。不过,在目前情况下,基本上所有的网络系统都还在混合使用2000以前的Windows版本。在混合网络环境中由于必须使用139端口通过SMB协议进行通信,因此就无法关闭139端口。另外,浏览时还需要137~139端口。

  公开服务器绝对应该关闭这些端口

在因特网上公开的服务器要另当别论。公开服务器打开139和445端口是一件非常危险的事情。就像本文开头所说的那样,如果有Guest帐号,而且没有设置任何密码时,就能够被人通过因特网轻松地盗看文件。如果给该帐号设置了写入权限,甚至可以轻松地篡改文件。也就是说在对外部公开的服务器中不应该打开这些端口。通过因特网使用文件服务器就等同自杀行为,因此一定要关闭139和445端口。对于利用ADSL永久性接入因特网的客户端机器可以说也是如此

要关闭139端口,与137和138端口一样,可以选择“将NetBIOS over TCP/IP设置为无效”。而要想关闭445端口则必须进行其他工作。利用注册表编辑器在“HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesNetBTParameters”中追加名为“SMBDeviceEnabled”的DWORD值,并将其设置为0,然后重新起动机器。

  .NET中安全策略改变了吗?

  就像在此之前所讲的那样,直接在默认设置条件下使用现有的Windows将会出现各种各样的危险。这是因为Windows是为了让初学者不需进行复杂设置就可以使用而开发的。

  比如Windows 2000 Server,在安装该系统时,会自动安装IIS。而且只需起动个人电脑,IIS服务就会启动。虽然Windows NT 4.0 Server可以选择是否安装IIS,但在默认条件下该服务的复选框是有效的。与2000一样,在起动电脑时,IIS服务也会自动起动。

  而Linux则在很多方面都采取的是完全不同的思路。比如,RedHat Linux 7.3在安装过程中必须让用户设置防火墙。由于防火墙有“高”、“中”、“低”三种等级,因此所拦截的信息包也各不相同。如果选择“高”将关闭53(DNS)、67和68(DHCP)以外的全部端口,如果选择“中”,尽管会打开1024以上的端口,但在一般人熟知的端口中打开的只有53、67和68三个。

  安装应用程序时的作法也不同。RedHat Linux 7.3在安装时可选择“工作站”、“服务器”和“桌面”三种类型。因此即使选择“服务器”,如果用户不选择构筑兼容Windows的文件服务器“Samba”和Web服务器“Apache”等,就不会进行安装。另外,即便安装以后,也不会直接起动。如果用户明确地启动必要的服务后,没有设置利用过滤软件过滤信息包,相应端口就不会打开。

  如果只考虑方便性,Windows要更好一些。这是因为即便不进行复杂的设置,系统也能够自动起动各种服务。但这样一来,就甚至极有可能起动用户不希望起动的服务,而且这些服务往往还是在用户不知晓的情况下起动的。可以这样说,如果希望安全地运行服务器,或者希望保护自己的客户端个人电脑免受危险,那么最好不要随便安装和设置。

  美国微软也提出了“值得依赖的计算”(Trustworthy Computing)的计划,并计划利用定于2003年初开始上市的“Windows .NET Server”实现“默认安全”。与Windows 2000不同的是,将不再标准安装IIS服务。即便增加了IIS组件,OS起动时该服务也不会自动运行。

  不过,如果只要使用测试版,135、137、138、139和445端口在默认条件下就是打开的。另外,从Windows XP开始导入的“因特网连接防火墙(ICF)”的使用在默认条件下也是无效的。要想在默认设置下实现与Linux相同等级的高安全性,可以说最稳妥的方法是将ICF设置为有效,然后用户再根据自己的需要,选择起动的服务.

=========================
文章类型:转载 提交:Muddy 核查:NetDemon