1. 说明

本篇文章主要说一说windows系统中入侵防范控制点的相关内容和理解。

2. 测评项

a)应遵循最小安装的原则,仅安装需要的组件和应用程序;

b)应关闭不需要的系统服务、默认共享和高危端口;

c)应通过设定终端接入方式或网络地址范围对通过网络进行管理的管理终端进行限制;

d)应提供数据有效性检验功能,保证通过人机接口输人或通过通信接口输入的内容符合系统设定要求;

e)应能发现可能存在的已知漏洞,并在经过充分测试评估后,及时修补漏洞;

f)应能够检测到对重要节点进行入侵的行为,并在发生严重入侵事件时提供报警。

注意,测评项d的测评对象不包括服务器的操作系统:


3. 测评项a

a)应遵循最小安装的原则,仅安装需要的组件和应用程序;

这一条比较容易理解。即仅安装该服务器需要的组件和应用程序,非必需的组件和应用程序应该删除或者停用。

输入appwiz.cpl可以看到windows中安装的程序:


在进行测评的时候,有一些是明显多余的程序,比如QQ、迅雷等,另外一些,如果是不常见或者不清楚用途的软件,需要通过访谈来进行确认。

4. 测评项b

b)应关闭不需要的系统服务、默认共享和高危端口;

这个测评项总的意思为是否对外部的访问进行管制和最小化处理。

服务、进程、端口的关系是这样的,启用了某个服务,某个服务就会启动一个或者数个进程,然后进程就有可能会监听端口,然后只有当进程监听了端口后,此端口的通信才会存在意义。

外界对一个服务器的某个没有任何进程监听的端口发送信息的话,不会得到任何回应的。

如iis服务会启动w3wp进程,w3wp进程就会监听80端口或者你设置的某个端口。

所以对于这个测评项,可以从多个方面进行判断,一个是开启服务(其中也包括了共享服务)情况,一个是监听端口的情况,其中最直接的是通过服务器监听的端口情况进行判断。

4.1. 不需要的系统服务

一方面,可以查看windows启用的功能,在服务器管理器中的功能节点中,可以看到已启用的windows功能:


这里启用了Telnet服务器功能,明显是多余的(在身份鉴别控制点的c测评项中也是不允许的),但注意,这不能代表它就一定开启了telnet服务。

另外如果不是网站服务器、应用服务器,未承担网站后台的业务,那么IIS也是多余的。

另外一方面,就是直接查看各个服务的状态:


注意,这里的Telnet服务是关闭的,所以并没有监听相关的端口。

4.2. 默认共享

对于默认共享,也可以先看看共享服务是否开启了:


然后用命令net share查看开启的共享到底有哪些:


这里解释一下,对于windows系统而言,默认是会给你开启共享的,一个磁盘一个共享,c盘多一个Admin$共享,然后都会有一个ipc$共享。

默认共享和一般共享的区别在于,它的共享名后面会有一个$,这代表它是一个隐藏共享,也就是说在计算机的网络中是看不到的:


但是,仅仅是隐藏而已,可以在文件夹地址栏中输入地址进行正常的共享访问(期间要输入用户名、口令):


服务器上可以在服务器管理器中的共享和存储管理中的会话管理中查看共享连接会话(这里只包括其它终端连自己的):


也可以用net session命令进行查看(这里只包括其它终端连自己的):


至于ipc$具体用来干嘛,我不大清楚,它可以实现空用户名、空口令的连接(下面是在其它的终端上连接服务器,net use命令可以查看自己对其它服务器的共享连接会话):

C:\Users\CX>net use \\192.168.9.136\ipc$ "" /user:""

命令成功完成。

C:\Users\CX>net use

会记录新的网络连接。

状态 本地 远程 网络

-----------------------------------------------------------------------------

OK \\192.168.9.136\ipc$ Microsoft Windows Network

命令成功完成。

ipc$连上了后,基本没有什么权限:

C:\Users\CX>net time \\192.168.9.136

发生系统错误 5。

拒绝访问。

C:\Users\CX>net view \\192.168.9.136

发生系统错误 5。

拒绝访问。

ipc$连上了后,再去连c$或者其他共享,实际是直接拿连接ipc$时输入的用户名、口令去验证。

所以如果连ipc$时输入了administrator账户的用户名和口令,那么可以连上其它共享会话。如果是以空用户名、空口令的形式连上ipc$,就连不上其它共享会话。

C:\Users\CX>net use \\192.168.9.136\ipc$ "" /user:""

命令成功完成。

C:\Users\CX>net use \\192.168.9.136\c$

密码在 \\192.168.9.136\c$ 无效。

为 '192.168.9.136' 输入用户名:

发生系统错误 1223。

操作已被用户取消。

对于默认共享,关闭方式有几种:

关闭Server服务,但是这个是将共享服务全部关闭了,要注意是否会影响到业务实际需要的共享。

使用net share xxx /delete命令删除共享,xxx即为共享的名字,比如net share ipc$ /delete。这里说删除ipc$共享,不会对其它的共享造成影响。另外这只是暂时的删除,服务器重启后又会关闭;

在防火墙或ip策略中,对共享服务使用的端口进行禁止,不过这里不是很好判断,根据smb协议使用的不同,可能使用不同的端口:


4.3. 高危端口或多余端口

其实端口如果不做终端ip限制,那么基本都存在漏洞,至于监听了多余的端口,那就更危险了。

那么这里说一下常见的多余端口(就是那种windows默认给你开启的端口):

80端口,对于windows而言,大概率是开启了IIS服务,如果本身没有这个业务,即为多余端口;

135端口,是微软RPC远程过程调用使用的端口号,没有涉及到远程过程调用的,即为多余端口。WebService是RPC的一种实现,这里是一个公用的WebService接口,看了之后就知道大概是干嘛的了:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx;

137、138、139端口(TCP、UDP),是NetBIOS名称服务(NetBIOS Name Service)使用的端口号,用于局域网中提供计算机的名字或IP地址查询服务以及文件共享服务。换句话说,共享服务可能使用这三个端口,如果没有业务上不需要共享服务,那么肯定是多余端口;

445端口,共享服务可能使用的端口,如果没有业务上不需要共享服务,那么肯定是多余端口;

47001端口,Windows Remote Management服务用到的端口,只能说一般用不到,大概率是多余端口。

常见的高危端口:

一些流行病毒的后门端口(如 TCP 2745、3127、6129 端口),还有593端口,是针对DCOM(Distributed Component Object Model,分布式组件对象模型)协议的。它允许C/S结构的应用通过DCOM使用RPC over HTTP service。

至于初级教材里说的1025端口,不明白是用来干嘛的,因为它是一个动态端口,分配给哪个进程是不确定的(1024的下一个就是1025):


其实还是那句话,大部分端口都有问题(如果你不进行ip限制),windows常见的3389、22、21等端口,都存在一定的危险性(如果你不进行ip限制),所以多余端口好判断,但高危端口要根据具体情况进行判断。

4.4. 查看监听端口

具体测评中要先自己查看监听的端口,以及端口的作用,然后再进行访谈。

使用netstat -ano查看端口情况:

其中PID列代表的是监听这个端口的进程,因为虽然0-1024端口作为熟知端口号,一般用于一些公共的协议使用,也就是规定好了哪个服务使用哪个端口。

但这只是一种规范,不代表强制规定,实际上某服务(进程)到底监听什么端口都是自己指定的,所以判断端口的作用要结合监听该端口的进程。

同样,端口也不分操作系统版本,比如22端口,为ssh协议使用端口,一般不出现在Windows上。但这只是一种规范、通用做法。

比如我在windows上就曾查到过22端口,通过监听该端口的进程的PID,查到了该进程。发现是一个远程管理软件,可能这个软件是windows、linux共用的,所以默认监听22端口。


使用tasklist /v查看正在运行的进程:

里面就有PID,当然,直接打开任务管理器进行查看也可以。


对于这些信息(端口信息和进程信息),建议有可能的情况不要使用截图,因为不利于文本搜索,可以在命令后使用>,将其输入到某文本文件中。

4.5. Windows防火墙

一个端口,是否能够有效的进行通信,要看它是否被监听,以及监听后有没有被允许通信。

比如47001端口,如果被监听了(使用netstat -ano查看到),但是在防火墙中或者ip策略中被禁止通信了,那么这个端口其实不能进行啥通信,这种情况下,不能认为服务器监听了多余端口。

对于Windows防火墙,一般存在三个配置文件:域配置文件、专用配置文件、共用配置文件

当Windows接入网络时,一般会弹出个框让你选择这个网络属于哪种类型,这个时候就是在决定连入这个网络后使用哪一种配置文件。


所以查看Windows防火墙状态,不能简单通过查看防火墙状态来判断,要进入高级设置中来判断:


这里注意,公用配置文件是活动的,也即现在服务器接入的网络使用的是公用配置文件,同时它下面的防火墙是启用的。

注意看,专用配置文件下的防火墙已关闭,但是它没有处于活动状态,现在接入的网络用不到这个配置文件,所以关闭也无所谓。

所以查看具体防火墙规则的时候也要注意它是属于哪个配置文件的,是不是属于已启用的配置文件的规则:


同时还要注意一点,Windows防火墙是白名单制度,也就是开启防火墙后,只有允许的端口才可以通行(白名单),默认拒绝其它端口,不过这是可以设置的:


至于Windows防火墙的规则内容,这里就不说了,百度上写得很清楚。

4.6. Ip策略

Windows本身除了防火墙可以实现端口的管制,Ip安全策略中也可以实现:


Ip安全规则引用一个筛选器列表,规则的名字会自动变成应用的筛选器列表的名字:


筛选器列表中可以有多个IP筛选器:

筛选器即对ip设置规则,表示对符合选定规则的连接进行操作(允许、阻止等)。


进行的操作由筛选器列表指定的筛选器操作决定,也就是说同一个筛选器列表中的IP筛选器的操作都是一样的:


IP安全策略和Windows防火墙的一个区别是,IP安全策略不是白名单制的。

启用IP安全策略的话,需要开启IPSEC Policy Agent服务,且策略被指派:



另外,可能需要gpupdate /force命令强制更新策略。

4.7. 总结

总而言之,就是要判断是否对外界的通信存在管制,这里要结合实际情况来判断。

比如默认共享未删除,但默认共享使用的端口已经被防火墙或者ip策略禁止通信了,那么就不能机械的判定不符合。

另外,某被监听端口是否属于多余或者高危端口,一定要结合实际的情况判断,很多情况下还是需要访谈的。

最后,除了Windows自带的防火墙和IP策略,很有可能对方用硬件防火墙等第三方设备实现了管制,要注意访谈。

5. 测评项c

c)应通过设定终端接入方式或网络地址范围对通过网络进行管理的管理终端进行限制;

5.1. 使用远程桌面的

对于使用Windows远程桌面来进行远程管理的,就在windows防火墙或ip策略或硬件防火墙中看是否对rdp的端口进行了ip限制,rdp端口一般是默认值3389。

注意,这里限制的粒度最好达到ip地址级别,也就是具体的数个或者十几个ip地址,或者至少是一个比较小的网段级别。

如果粒度不够小,限制的意义就大大减弱了。

这里要注意的一点事,rdp的端口是可以改的,在注册表中修改即可:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp的portnumber

对于windows server 2008 r2只修改这一处就可以了:


我将3389修改为了5656,所以连接的时候需要加上端口号:


5.2. 使用第三方工具的

比如使用TeamViewer,那就要看这个软件本身有没有这个功能了,或者用其他的软件来协助实现管理终端IP限制的效果。

5.3. 不存在远程管理的

也就是实际上什么策略也没有做,但是从外部网络无法远程登录该服务器,只能在机房中对直接在服务器上进行本地登录和操作,这种个人觉得至少应该给一个部分符合,或者不适用,因为不存在远程管理。

6. 测评项e

e)应能发现可能存在的已知漏洞,并在经过充分测试评估后,及时修补漏洞;

第一个方面,应该是指使用专业的漏洞扫描工具进行扫描,或者进行渗透测试发现的漏洞。

即,被测评方要定期使用专业的漏洞扫描工具进行扫描或者进行渗透测试,而360安全卫士等软件不算专业的漏洞扫描工具。

测评的时候,就需要向对方提供扫描报告或者渗透报告。

第二个方面,在对方进行了漏洞扫描或渗透测试后,如果发现了高危漏洞,是否在一定时间内进行了修补(比如半年都没有修补,肯定不符合)。

测评要求中内容如下:


所以,这个测评项一部分测评单位是不可能符合的,因为第一个要求都没有满足。

7. 测评项f

f)应能够检测到对重要节点进行入侵的行为,并在发生严重入侵事件时提供报警。

对于windows而言,这个百分之一百要通过第三方软硬件来实现了。

一些杀毒软件,比如EDR、卡巴斯基(企业版)等,等具备入侵防范检测和报警功能(通过邮箱、短信等),或者在网络中部署有IPS等设备具有相关功能也可以。

另外,部署在云上的话,阿里云、华为云等,也存在这样的安全服务,也可以实现要求。但是要注意的是,被测评方是否购买了此类安全服务。

*本文原创作者:起于凡而非于凡