IPC$是共享命名管道的资源。在微软系列的操作系统中,为了让进程间共享通信而开放的命名管道。用户通过提供可信任的帐户与口令,连接双方可以建立安全的通道并以此通道进行加密数据的交换,从而实现对远程计算机的访问。
所以,IPC$共享命名管道设计的意图是好的,也确实给管理员带来了方便。但是,由于其存在一定的漏洞,这也让黑客有机可乘。现在一些针对IPC$漏洞的攻击方案就有一大堆。有些甚至没有连计算机网络基础的人,只要照本宣科的对着资料做,也可以轻易的利用IPC$漏洞非法登陆微软的服务器系统,进行一些破坏性的操作。所以,提高IPC$共享安全已经迫在眉睫。
如下图,我们右键点击服务器桌面“我的电脑”,打开“共享文件夹”,就可以在右面的窗口看到当前系统的共享文件夹。IPC$共享就在其中。
那有什么方法可以提高这个IPC$共享的安全性呢?“堵”与“疏”,可供大家选择。
第一招:堵,取消IPC$共享
取消其共享,显然这是杜绝IPC$安全隐患的最根本的方法。可是,由于其跟一般的共享文件夹不同,不是很轻易就可以取消共享。如在上面这个共享文件管理窗口,我们在“IPC$”条目上右键单击,可以选择“取消共享”。可是,这么操作的话,系统会提示一个错误信息“服务器服务要求有IPC$,他不能被删除”。所以说,要取消IPC$共享的话,利用常规的方法还不行。
如我们可以通过注册表的设置,来取消这个IPC$共享。
1、 在开始菜单的运行处,输入“regedit”命令,打开注册表编辑器。
2、 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesLanmanServerParameters。找到这一项内容。
3、 如果采用的是2003等服务器操作系统,则在上面这个项目下,要建立一个名叫“AutoShareServer”的双字节键值项,并把这个项值设置为0。如果你采用的是普通的工作站系统,则需要建立一个名叫“AutoShareWKs”的双字节键值项。这个项值也设置为0。
4、 然后重新启动系统。如此的话,这个名叫IPC$共享就被取消了。
不过在利用注册表强制取消IPC$默认共享的时候,需要注意两个问题。
一是,这个设置不仅会取消IPC$默认共享,而且会把其他所有的默认共享都取消掉。如在2000的操作系统上,不仅会有IPC$默认共享。而且还会有C$等磁盘默认共享。采用这种方式的话,也会把磁盘默认共享禁用掉。
二是,正如上面这个提示所说,有些服务器系统的服务需要使用IPC$默认共享。若把这个共享取消掉,则有可能会给相关服务带来不利影响,甚至造成服务无法正常启动。
所以,在实际工作中,笔者是不建议采用这种“堵”的方法,强制把IPC$默认共享关掉。笔者建议采取下面这种“疏”的方式,不关掉其默认共享,而是采用“限制使用”的方式,来提高IPC$默认共享的安全性。
第二招:疏,限制使用
有些服务,必须要求启动IPC$共享命名管道,特别是一些微软出品的应用软件。如微软的SQL Server数据库,必须要启用IPC$共享命名管道。否则的话,数据库就无法正常运行。IPC$共享命名管道,也是SQL Server数据库与微软服务器操作系统无缝集成的一个通道。所以,我们一味的停用IPC$共享命名通道,虽然提高了服务器操作系统的安全性,但是,也会使得一些应用服务无法使用。这种“玉石共焚”的方法,不是上上之策。
笔者建议通过“限制使用”的方式,来提高IPC$共享命名管道的安全。其实,这也是比较简单的,我们可以通过注册表来实现这个需求。
我们利用上面的方法打开注册表编辑器,然后依次找到下面的这一项内容“HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlLsa”。在这一项内容中,有一个叫做restrictanonymous的键值。这个键值,由三个可选的参数。如果设置为0,就是没有限制,任何用户,包括匿名用户都可以使用这个共享命名管道。这是系统的默认值。如果设置为1,则表示匿名用户无法列举本机的用户列表。如果设置为2,则表示匿名用户无法连接这台主机的IPC$共享。一般情况下,是不建议设置为2,因为这会导致依赖于共享命名管道的一些应用服务无法正常启动。
不过以上设置只适用于微软早期的操作系统。在2003的服务器系统中,有一个特殊的键,叫做“restrictanonymoussam”。在后期的服务器系统中,要利用这个键来限制使用共享命名管道。如下图:
这个键也有两个值,0与1。1是系统的默认值,表示匿名用户无法列举主机的用户列表。0表示匿名用户不但不能够列举主机的用户列表,而且也不能够使用默认共享命名管道。所以,一般情况下,只要把这个默认值设置为1。
对这个“疏”的方法,笔者也有如下建议:
首先,根据服务器系统上采用的应用服务来判断需要如何进行设置。如果服务器系统上运行了SQL Server数据库,则需要把这个值设置为1(如果是2003的服务器系统)。也就是说,不要让匿名用户列举服务器的用户列表,但是允许匿名用户使用它。这一方面可以让SQL Server等数据库系统正常的 启动,同时,对服务器的安全也具有一定的保障。
其次,对于一些不需要IPC$命名管道的应用程序,也需要谨慎设置。有一些跨平台的应用程序,如Oracle数据库等,可以不使用IPC$命名管道。此时,从理论上说,可以取消IPC$命名管道,从而从根本上杜绝IPC$命名管道攻击,提高服务器的安全性。不过,在取消之前,最好能够进行严格的测试。因为往往在一台服务器中,不光光就运行一个应用服务。有时候Oracle数据库可能不需要这个IPC$共享,但是,其他应用服务就需要他。所以,是否需要禁用这个IPC$命名管道,企业服务器管理员需要测试后再作定夺。
总之,在对待IPC$默认共享安全上,笔者的态度是“堵不如疏”,禁用不如限用。俗话说,不能够因噎废食。只要合理限制匿名用户对IPC$默认共享的使用,就可以保障其安全性。同时,也不会对其他的应用服务产生不良的影响。