NEWS.ALL
Ruizhao's News Reader

等保测评2.0:Windows身份鉴别

FreeBuf /2020-01-23

一、说明

本篇文章主要说一说windows系统中身份鉴别控制点中相关测评项的相关内容和理解,a、b测评项都比较基础和简单(但很繁琐),而c、d测评项则涉及到一点点密码方面的知识。

二、测评项

a)应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换;

b)应具有登录失败处理功能,应配置并启用结束会话、限制非法登录次数和当登录连接超时自动退出等相关措施; 

c)当进行远程管理时,应采取必要措施防止鉴别信息在网络传输过程中被窃听; 

d)应采用口令、密码技术、生物技术等两种或两种以上组合的鉴别技术对用户进行身份鉴别,且其中一种鉴别技术至少应使用密码技术来实现。

三、测评项a

a)应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换;

3.1. 测评项a要求1

应对登录的用户进行身份标识和鉴别

身份标识功能(用户名)就不用说了,属于windows自带功能。而对用户进行鉴别也就是登录时需要你输入用户名、口令的行为,不是强制开启的,可以在某种程度上取消掉。

针对本地登录,使用Win+R组合键打开运行框,在里面内输入netplwiz,则会出现用户账户页面,如下所示:

1578401800_5e148008aa389.png!small

当我们在本机用户列表中,选择其中某一个用户,比如Administrator后,再去掉“要使用本计算机,用户必须输入用户名和密码“选项的选择后。则表示,下次开机登录时,将会跳过对用户进行鉴别的过程,直接以我们所选择的用户Administrator的身份登入电脑。

但有一点,并不是所有情况下对用户进行鉴别的过程都被跳过了,如切换账号、睡眠、锁定、注销这几种情况后重新登录的,仍然要输入用户口令。所以这里的选项仅仅能跳过开机时对用户的身份鉴别过程(至少我知道的是这样)。

另外,如果某用户是空口令,那么自然也没法达到该要求,这就不用多说了。

针对“远程登录”(比如远程桌面或其他第三方远程管理软件),则一般是要看对方是否勾选了“记住密码”此类选项。

3.2. 测评项a要求2

身份标识具有唯一性

即用户名或用户ID不能重复,这个不用多说,windows自动实现,默认符合。

3.3. 测评项a要求3

身份鉴别信息具有复杂度要求

这个要从两个方面看,我个人觉得两个方面都符合才能算达到要求。

第一个方面即实际的口令是否具有一定的复杂度,也即口令至少8位,且包含大写字母、小写字母、数字、特殊字符这四类字符种的三种,且口令不包含简单排列规律,如admin!@#123此类弱口令。

第二个方面即windows是否进行了口令复杂度策略的设置,强制要求口令具有一定的复杂度,也即在windows的密码策略中进行了设置:
1578401810_5e1480129c41e.png!small

我们主要关心的是“密码必须符合复杂性要求”、“密码长度最小值”、“强制密码历史”这三个选项。

“密码必须符合复杂性要求”,其具体内容如下:

1578401817_5e14801920174.png!small

从上图可以看出,启用了这个选项,口令就快要达到要求了(口令长度要求未达标)。

至于“密码长度最小值”,就不用多说了,设置为8或者8以上即可符合口令长度要求。

而“强制密码历史”这个选项,其数值代表windows会记忆n(0<n<24)个旧口令,而每当用户修改口令时,不能与以前的n个旧口令重复,这个选项我个人不管它,设置了很好,不设置我觉得也符合要求。

3.4. 测评项a要求4

要求并定期更换

和口令复杂度一样,一个方面是看实际的口令更换周期。

这里可以通过访谈相关人员或者直接核查配置,我推荐第二种方法。对于简单的、不复杂的问题还是自己查配置较好,你去访谈相关人员,对方基本也不会有什么证据,或者压根就不清楚,这种情况下,访谈的结果可靠性很难有保证。

当然,访谈、核查都用也是可以的,对于口令更换周期,在cmd中使用如下命令即可得知上一次口令更换时间:
1578401826_5e1480224107c.png!small也就是上图中的“上次设置密码”的值,一般90天内有过更换即可。

另一方面就是查看windows的密码策略:
1578401831_5e148027edba5.png!small

即上图的“密码最长使用期限”,一般设置值小于等于90天即可。

至于“密码最短使用期限”,指的是多少天内不能更改密码,与测评要求基本没啥关系,不用管。

不过对于口令更换策略而言,还有个地方需要先去看看,也就是在计算机管理-本地用户和组-用户中:
1578401836_5e14802cdf1f6.png!small

右键点击某用户,在弹出的右键菜单中点击属性:
1578401843_5e1480334adb6.png!small

如果这里勾选了“密码永不过期”,那么windows的密码策略中的“密码最长使用期限”也就失效了。

这里也可以通过cmd中输入命令的方式查看:
1578401850_5e14803a5bbf5.png!small

“密码到期”为“永不”,要么就是windows的密码策略中的“密码最长使用期限”为0,要么就是在这个用户的属性中勾选了“密码永不过期”,总而言之,就是不符合要求。

如果设置了“密码最长使用期限”,且该用户未勾选“密码永不过期”,则“密码到期”就是一个具体的日期,也就是“上次设置密码”的值加上“密码最长使用期限”的值,得出来的一个时间。

3.5. 测评项a的另外一种情况

一般情况下,运维人员要么是通过远程桌面登录windows服务器,要么就是在本地登录,这两种使用的都是windows自带的验证功能,所以测评项中的“用户名、口令”指的就是windows系统中的“用户名、口令”。

如果运维人员通过第三方软件远程管理windows服务器,比如向日葵、TeamViewer等,并没有使用windows的验证功能,这种情况下,测评项中的“用户名、口令”可能就不仅仅是指windows服务器中的“用户名、口令”了,或许对第三方软件的“用户名、口令”也需要有一定的要求。

四、测评项b

b)应具有登录失败处理功能,应配置并启用结束会话、限制非法登录次数和当登录连接超时自动退出等相关措施;

4.1. 测评项b要求1

应具有登录失败处理功能,应配置并启用结束会话、限制非法登录次数(等相关措施)

这个要求比较好理解,即连续登录达到N次的时候,将登录账户锁定,在windows的账户锁定策略中进行设置:
1578401857_5e1480412954c.png!small

一般账户锁定阈值设置小于等于5,锁定时间和重置时间大于等于30分钟即可符合要求。

注意,这个地方只针对本地登录或者使用远程桌面进行登录的情况,如果对方使用第三方软件进行远程登录,那就要那个软件上查看相关配置。

4.2. 测评项b要求2

当登录连接超时自动退出

一般设置时间限制小于等于30分钟即可。

4.2.1. 本地登录

对于本地登录,可以通过查看“屏幕保护程序”:
1578401864_5e1480483bc74.png!small

这里选择了“在恢复时显示登录屏幕”,再设置“等待”时间,即可实现超过时间限制自动退出的功能(不过这里是锁定退出,类似的还有睡眠、注销退出)。

注意,这里选不选择“屏幕保护程序”都不影响自动退出功能,“屏幕保护程序”设置为无的话,也只是锁定后显示屏上不会运行相关动画而已。

也可以查看“更改电源设置”,比如
1578401872_5e14805068c93.png!small

也就是上面的多少时间后进入睡眠状态,进入睡眠状态后激活是需要输入用户名、口令的。

不过一般应该没人在服务器上设置这东西吧?进入睡眠模式后服务器里的进程什么的应该会停止运行的。

所以一般的,本地登录超时,仅查看“屏幕保护程序”就可以了。

注意,如果在“屏幕保护程序”处设置了超时,那么对于远程登录而言(无论使用远程桌面还是其他远程管理软件),应该也会具备效果。

即,你在设置了“屏幕保护程序”后(如15分钟),当你通过远程桌面登录到服务器时,在你没有设置远程登录超时的情况下,超过15分钟没有动作,服务器就会开始运行“屏幕保护程序”了,也就是超时退出了(虽然你的网络连接并没有断开)。

4.2.2. 远程登录

对于“远程登录”,如果用的是windows自带的远程桌面,有4个地方可以进行超时设置(我也没搞明白windows弄这么复杂干嘛):

一、计算机配置–管理模板–window组件–远程桌面服务–远程桌面会话主机–会话时间限制

二、用户配置–管理模板–window组件–远程桌面服务–远程桌面会话主机–会话时间限制

这两个设置项基本一样,区别在于一个在计算机配置里,一个在用户配置中,设置项如下:
1578401883_5e14805bbcdea.png!small

三、运行tsconfig.msc,右键RDP-TCP的属性
1578401890_5e148062874fc.png!small

四、运行compmgmt.msc,或运行servermanager.msc,打来计算机管理或服务器管理,在用户的用户属性中,会话选项卡:
1578401896_5e148068a107e.png!small

先来解释下和要求相关的两个选项:

活动会话限制(在安全策略中叫设置活动的远程桌面服务会话的时间限制):即,远程登录成功后,无论你是否操作,达到限定时间后就会断开连接。

空闲会话限制(在安全策略中叫设置活动但空闲的远程桌面服务会话的时间限制):即,远程登录成功后,如果你不进行操作的时间达到限定值,即断开连接。

至于“结束已断开的会话”、“达到会话限制,或者连接被中断时”这两个项,和测评项无关,具体含义大家百度下就知道了。

一共有四个地方可以设置,其优先级和适用范围如下:

优先级方面,方法一>方法二>方法三>方法四

适用范围方面,方法一、方法三针对所有用户,方法二、方法四针对单个用户

优先级方面的证据如下:
1578401903_5e14806fb46c3.png!small1578401908_5e1480742f48f.png!small

对于“活动会话限制”、“空闲会话限制”这两个配置项,在计算机配置和用户配置中,未配置和禁用是一回事,即对这两个配置项没有进行任何设置,即不会覆盖方法三、方法四中的设置。

如果在计算机配置中对“活动会话限制”或“空闲会话限制”启用了,进行配置,则方法三处无法进行配置,直接显示计算机配置中的值:
1578401914_5e14807a9662f.png!small但是这里要注意,如果这里不能进行配置,不代表就一定是在计算机配置中进行了设置,可能有其它原因。

不过在用户配置(方法二)中对“活动会话限制”或“空闲会话限制”启用并进行设置后,虽然仍然会覆盖方法三的设置,却不会造成方法三处无法进行配置(因为方法二是对单个用户,方法三是全局配置)。

虽然有这么多地方可以设置,实际测评的时候咱们要追求大概率事件,如果对方做了设置,一般主要是通过方法三,其次是通过方法一,应该没有人闲得蛋疼通过方法二、四单独对某个用户设置超时配置。

所以实际测评时,我们通过方法三去查看配置就可以了,至于方法一,主要用在windows2012上,因为windows2012我找不到“远程桌面会话主机配置”(方法三),那就只有去组策略里查看配置了。

除了使用远程桌面,被测评方完全可能使用第三方远程管理软件,如TeamViewer,这个时候要判断是否设置了超时,只有去第三方软件上面找了(不过TeamViewer好像没这个设置功能)。

五. 测评项c

c)当进行远程管理时,应采取必要措施防止鉴别信息在网络传输过程中被窃听

该测评项比较容易理解,进行远程管理时,要保证数据的保密性。

所以如果被测评服务器没有连接外部网络,仅处于内网之中(也没有wifi),管理服务器的方式就是跑去机房进行本地操作的话,也就不存在什么“远程管理”,不存在什么“数据保密性”,自然就符合了。

如果采用远程管理的方式,则分为使用远程桌面还是第三方软件。

5.1. 远程桌面

对于使用远程桌面进行管理的,与测评项相关的安全性,有两个地方可以设置:

一、计算机配置–管理模板–window组件–远程桌面服务–远程桌面会话主机–安全

二、运行tsconfig.msc,打开远程桌面会话主机配置,右键RDP-TCP的属性

首先说一下,方法一的优先级高于方法二:

方法一的优先级高于方法二,在组策略中,对于安全层和加密级别,如果未配置或者选择禁用,则代表没做任何设置,也不会覆盖“远程桌面会话主机配置”中的设置。

如果进行了配置,则“远程桌面会话主机配置”中无法进行设置,直接显示组策略中的值:

然后说说安全层中的可选项,有三个,如下图所示:

看上去都不难理解,选择SSL即会使用SSL协议进行加密;选择协商的话则看客户端是否支持SSL,不支持就使用RDP协议;选择RDP安全层,则使用本机RDP加密。

不过仅仅看这些,还是不好判断选择哪个选项才符合应采取必要措施防止鉴别信息在网络传输过程中被窃听的要求。

选SSL,毫无疑问是符合的,那么就在于RDP加密是否足够安全呢?

答案是否定的,因为RDP协议的连接和协商过程中,客户端没有认证服务器端,这就使得基于ARP欺骗的中间人攻击成为可能,所以存在风险(但是要注意,RDP本身还是用了密码技术进行加密了的,比telnet还是要好很多)。

具体关于RDP协议的内容这里就不说了,大家有兴趣的话可以看看这篇文章:https://www.doc88.com/p-1834979646606.html

所以这里要选择SSL才能符合要求,其余两个选项均不符合。

而加密级别有四个选项,如下图所示:

这个就不用多说了吧?从上到下,加密级别越来越低,我个人感觉选择高和高以上,就算符合要求了。

5.2. 第三方软件

第三方软件就很多了,这里就举一个常用的软件——TeamViewer

如果使用TeamViewer 能不能符合要求呢?也即TeamViewer 会不会采取技术措施对传输的信息加密呢?

从官网的介绍来看是比较安全的(https://www.teamviewer.cn/cn/trust-center/security/):

至于去年10月的”TeamViewer被入侵事件”,嗯,可以看看这个:https://www.zhihu.com/question/350281191

反正我个人觉得是符合测评项要求的。

5.3. 查看是否关闭了telnet功能

如果可以与外部网络连通,就要查看是否关闭telnet功能,因为telnet是明文传输,一旦开启了telnet功能,无论运维人员是否使用,都算不符合要求。

比较方便的判断方法就是直接查看服务器是否监听了23端口:

上图是没监听23端口,如果监听了,结果会是下面这样:

不过,从理论上来说,这种方法并不是完完全全的准确,因为telnet的端口可以修改,我把端口改成24,如下图所示:

所以,另外一种方法就是去服务处看看有没有”telnet服务”,没有的话说明没有添加这个功能,有的话看看是否禁用了:

当然,也可以直接去查看是否添加了这个功能:

一般情况下没有人会那么闲,跑去修改telnet的默认端口的,所以直接查看23端口是否被监听就可以了。

六. 测评项d

d)应采用口令、密码技术、生物技术等两种或两种以上组合的鉴别技术对用户进行身份鉴别,且其中一种鉴别技术至少应使用密码技术来实现。

这里我在等保测评:CentOS登录失败参数详解和双因素认证这篇文章中也说到过,这里换个角度说一说基础的知识。

6.1. 身份认证三要素

(只有)你所知道的信息:比如大家常用的“用户名、口令”,你提交了只有你知道的信息,对方就可以认为提交了这个信息的人即为你,即身份认证通过;

(只有)你所拥有的信息或物品:如数字证书、密钥盘、加密狗等,你通过向对方出示了此类物品或信息来进行身份验证(当然具体出示的方法根据具体情况来,比如加密狗,就是插入到USB接口当中进行认证)。

你的特征:指纹、DNA等等。

所以,测评项中的两种组合的鉴别技术,就是使用三个要素里至少两个不同的要素,比如“用户名、口令”+“数字证书”。

所以如果只是重复的使用其中一种要素,比如登录时需要输入两次不同的“用户名、口令”,那就不叫双因素认证,而叫两步验证。

6.2. 密码技术

什么是密码技术?密码技术的运用有很多,比如数字签名、消息认证码等等,比较复杂,当然,其中最基本的元素应该是加密算法(对称加密、非对称加密)以及单向散列算法。

我们通常使用的“密码”,并不一定都采用了密码技术,实际上应该叫“口令”而非“密码”。

我们通过提供口令,通过了身份验证,获得了想要的数据,但是数据本身其实没有啥变化,它的特点是一旦绕过验证,就可以直接获得数据。

而如果是密码,比如加密算法将某数据进行了加密,我们想要获得原来的数据,就要提供密钥将数据还原,这里不存在什么绕过验证不逃过验证的,无法提供正确的密钥将数据还原的话,得到的就是一堆无意义的数据,也无法用它来做任何事(比如WINRAR密码)。(当然,密码技术在身份认证方面远不只这一种用法)

密码和口令的区别可以看一看这篇文章:https://zhidao.baidu.com/question/1307371591774361699.html

6.3. 算不算使用了密码技术

所以使用“密码”进行登录,不代表一定就使用了“密码技术”。

当然,这年头,纯粹的口令验证应该是不存在的,无论是windows还是linux,你的账户口令肯定都是加过密的,比如linux,存的其实是使用单向散列算法(如md5)对你的口令进行计算得出来的杂凑值。

验证的时候,也是计算出你输入的口令的杂凑值,与存在文件里的口令的杂凑值进行对比。

那windows、linux自带的登录方式,是否算是运用了“密码技术”呢?

个人感觉,基本不算密码技术

因为它虽然用到了单向散列算法,但是还是属于比较简单的对比方法,运用密码技术的方式过于基础,所以基本不能算做使用了密码技术,比如稍微好一些的运用方法可以是这样(加密狗):

而且在测评项里明显的写着:应采用口令、密码技术、生物技术

这里直接就将口令验证和密码技术分开了,其实这三个鉴别技术也就是身份认证三要素,口令明显是属于第一要素的,密码技术是第二要素(或者说第二要素的方法基本都使用了密码技术)。

另外,对于”随机值验证”这种鉴别技术,是应用了密码技术还是没应用,要看具体实现。

比如“短信验证”,如果仅仅是服务器端生成一个随机短信,然后存着,同时发给客户端,再用来和客户端提交的值对比,那么就和密码技术基本没啥关系,属于口令。

而如果是银行k宝之类的东西,在你进行较大金额的银行转账过程中,需要你在K宝中输入转账金额,然后会给你生成一个“随机值”,这个肯定不是纯粹的“随机值”的对比,而是属于密码技术范畴。(具体验证过程可以百度)

6.4. windows双因素

扯了这么多,再说说windows双因素有哪些实现的方法呢?

好吧,其实我也没实际遇到过,只知道存在这个东西:

实际测评过程中,我还没遇到过真的实现了windows双因素认证的,linux的倒是遇到过,就是ssh的“公钥和私钥的验证方式”(这种验证方式也是要输入用户名以及密钥的口令的,所以我觉得是双因素)。

所以实际测评的时候,对于这一项,只要不让其成为高风险即可,比如用堡垒机等方式(具体看高风险判定指引里的内容)。

七、身份鉴别控制点的总结

7.1 a、b测评项

虽然身份鉴别控制点的a、b测评项都很简单,特别是对于windows系统,具有图形化界面,测评的时候更容易进行判断。

但a、b测评项都是那种具有多方面要求的测评项,虽然每个方面的要求都很简单,也还会有些繁琐。

另外windows本身其实也挺复杂的,我们日常使用的功能只是其所有功能的一小部分而已,比如至少有4个地方可以设置远程登录超时(回字的四种写法?),所以这里就把我个人感觉可能和a、b测评项相关的地方都写了出来。

实际测评的时候大可不必如此,大家知道哪些地方可能会涉及到,主要查那些地方即可,咱们要追求大概率事件,而不是追求完美。

7.2 c、d测评项

c、d测评项中,开始涉及到了密码方面的技术,当然也只是浅层次的涉及到而已,随便找几本密码技术的初级教程,看一看就足够应付了。

但是,密码技术的运用就开始“脱离”windows系统本身,涉及到第三方的软硬件了。

实际上等级保护测评中的某个方面的复杂度就在于此,很多测评项中的要求必须要通过第三方软硬件来实现,这就对等级保护测评师的能力提出来进一步的要求——你得知道哪些第三方软硬件能够满足某测评项。

这对于之前没有相关工作经验(信息安全),直接从事等级保护测评工作的人来说,确实是一个难题(反正我觉得挺难)。

如果死盯着基本要求、测评要求琢磨,局限性就太大了,个人技术的广度和深度也没法得到啥提高。

所以无论是为了能更好的进行等级保护测评还是提升个人技术,跳出等级保护测评的“框架”还是很有必要的。

*本文原创作者:起于凡而非于凡,本文属于FreeBUf原创奖励计划,未经许可禁止转载