聊聊网络安全等级保护“能力验证”:配置核查(Linux系统)

2021-03-23
479

前言

作为测评机构一定会知道每年会举行“能力验证”活动,申请认可和获准认可的合格评定机构通过参加能力验证活动(包括 CNAS 组织实施或承认的能力验证计划、测评机构间比对和测量审核)证明其技术能力。之前的线上会议也表明了对测评机构能力建设方面的意见,在会议中说到机构的最高水平不代表机构的真实测评水平,因为机构派来参加能力验证的一般都是经验老道的测评师,所以表面上看起来没啥问题,真实测评中可能会存在很多问题。另外也采取了措施,比如相同人员相隔一年内无法参加能力验证,而且后续还有可能从“团队模式”的情况转化为“单人模式”。

在我看来,“能力验证”就是监管测评机构测评技术方面的一次考试,通过了这场考试,才代表有技术能力从事这测评工作。

2019能力验证

去年应该是由于疫情的原因,没有举办能力验证。笔者有幸参加了2019能力验证,这里就聊一聊自己的一些感悟和他们出题的考察点吧。

一、概述

这边看一下官方给出的概述

1614047272_6034682862f05c912eb89.png!small?1614047345483

二、测评能力验证内容

2019年能力验证分3个考察内容:

1. 测评对象和测评指标选取

2. 配置检查

3. 渗透测试

一般3个人一组进行能力验证,上午测评方面,下午渗透方面。我这边是测评方面,做的是配置核查,这里就写一下我当时的测评情况。

2.1 样品系统环境

本次能力验证配置检查所用样品系统环境由 1 台 Linux 服务器、 1 台 Windows服务器、 1 台 NTP 服务器组成。

2.2 拓扑图结构

1614048731_60346ddb4d11bce0f40df.png!small?1614048802013

2.3 测评对象范围及配置说明

1614048798_60346e1e520ab004a48f2.png!small?1614048869414

2.4 配置检查内容

针对模拟系统中的 Windows 和 Linux 服务器操作系统, 开展安全计算环境(操作系统)方面的配置检查和验证测试 。这里我就以Linux系统为代表,针对本次考察内容来聊一聊。

首先,先看一下我们最终要提交的配置检查结果报告单。

1614049331_603470335e7089703bccb.png!small?1614049402365

上面“注意事项”中,明确表明了测评记录要详实足够支撑结果判定。下面就看看具体操作系统中配置是如何的,将违反条款标准或安全策略的点要写清楚。我这里就不一一描述结果记录该怎么写了,这里主要讨论该条款中的得分点,答出它预设的问题点才算得分,其余的内容其实不算得分点。

 

1)身份鉴别

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

根据这条条款,我们首先要从安全计算环境安全策略中找到关键的策略。

1614150243_6035fa63cf26e7a7f95c4.png!small?1614150315237

这条它规定了需要启用密码复杂度要求、密码长度要求最少8位,最长使用期限为30天。预设问题很可能就在这条安全策略中。

所以我们先要去/etc/pam.d/system-auth 文件下查看是否配置复杂度策略,密码复杂度要求,在/etc/shadow文件下查看当前用户的口令最长使用期限,在/etc/login.defs文件下去查看后续新增账户口令最长有效期PASS_MAX_DAYS。

最终我查询的结果是口令复杂度未配置,当前用户口令最长使用期限不对,PASS_MAX_DAYS值为30,同时在/etc/login.defs目录下查看PASS_MIN_LEN值为6。

我们再对照能力验证计划总结报告里面的预设测评要点进行分析:

1614150792_6035fc88813ef305cbc29.png!small?1614150863865

很明显,这个预设点的问题应该是让你知道PASS_MIN_LEN这个为6的参数其实是不生效的,如果不知道这个参数是什么意思的,可以去看看这里的文章,我感觉应该是你答出了这个就算有得分了。

 

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

同理我们先看安全策略,这里涉及到的内容有两条

1614151027_6035fd7388a504fb18d14.png!small?1614151098901

1614151102_6035fdbed85fe905ddbde.png!small?1614151174245

所以针对本地登录和SSH登录,我们需要去查看两个文件,分别为/etc/pam.d/system-auth、/etc/pam.d/sshd,去看这两个文件下是否配置了登录失败处理功能;然后是否有设置TMOUT值。

我的查询结果为:已在/etc/sshd文件下配置auth required pam_tally2.so deny=5 unlock_time=600,本地登录情况没有配置登录失败处理功能。已在/etc/profile文件中设置TMOUT=600,且当前环境已生效。

通过上面结果,可能有人就下结论了,说未限制root账户的远程登录失败处理功能,但要看仔细,root账户已经被禁止SSH登录了,所以就要体现这一点。需要在结果记录中补充说明,已在/etc/ssh/sshd_config文件下配置:PermitRootLogin no

1614213050_6036efba992156d966336.png!small?1614213123519

这里的预设问题就是要你答出本地和SSH远程登录的登录失败处理功能配置,然后需要强调说明root账户已禁止SSH远程登录,所以针对sshd文件下的root的锁定参数无需配置。

 

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

这一条没啥好说的,Linux系统采用SSH,符合

1614213278_6036f09e7967838c9a4b8.png!small?1614213351405

这题主要预设点为Windows系统的,那里开启了telnet服务,要求组策略中配置如下:远程(RDP)连接要求使用指定的安全层:SSL(TLS 1.0),设置客户端连接加密级别:高级别。这里就不细说了

 

2)访问控制

c) 应及时删除或停用多余的、过期的账户,避免共享账户的存在;

先看安全策略

1614220015_60370aefb4d36cb91e09d.png!small?1614220088580

查看/etc/passwd文件/etc/shadow文件,发现存在多余test账户

这和预设问题点一样,可以看出这道基本送分,9成以上都回答出来了

1614220062_60370b1ea6a47b6320d29.png!small?1614220135542

 

e) 应由授权主体配置访问控制策略,访问控制策略规定主体对客体的访问规则。

安全策略:

这里有两点,第一点我认为是UID为0的账户仅为root,而且sudoers文件里面没有用户可以修改其他用户权限的命令存在。像命令那行,有用户存在ALL这样的肯定是不符合的。

1614220154_60370b7a7aab5a67416e8.png!small?1614220227472

第二点,仅sysadmin和sysauditor登录后可su账户,去查看这个控制点。具体我忘记了,好像是设置了wheel组的su权限,这两个账户隶属于wheel组,我具体也测试过,仅这两个账户可su root成功。因为原始记录丢了,记不太清了。。。

1614220187_60370b9bbd61584159d60.png!small?1614220260717

然后我们看看这里的预设问题点:

1614220408_60370c7845f04f445e53a.png!small?1614220481337

可以看出得分率很低,而且我也不确定我的回答是否正确,有知道的大佬可以留言告诉我。

 

3)安全审计

a) 应启用安全审计功能,审计覆盖到每个用户,对重要的用户行为和重要安全事件进行审计;

安全策略:

1614220564_60370d1485531959154ae.png!small?1614220637525

这里很明显,我们先正常检查syslog、audit服务是否正常运行,auditctl -s查看内核状态enabled值是否为1,这些都正常后,就去查看audit审计的具体规则了。

这里查看/etc/audit/audit.rules,也可以使用auditctl -l查看规则,查询结果为:

-w /etc/passwd -p rxa

-w /etc/shadow -p rxa

-w /etc/xinetd.conf -p rxa

很明显这里考察的就是你对audit审计规则配置的理解了,这里少了对“写”行为的审计,所以提出该点得分

这里的得分率也是还可以的

1614220775_60370de7e691ee4fac268.png!small?1614220848855

 

b) 审计记录应包括事件的日期和时间、用户、事件类型、事件是否成功及其他与审计相关的信息。

安全策略:

1614220912_60370e7050b9de6e4e603.png!small?1614220985203

所以这一条主要考察的就是ntp服务是否正常启用

这里通过service ntpd status查看,发现为停止状态,然后查看ntp.conf文件,也未配置对应的service地址,同时该台为centos 6.x的机子,没有chronyd服务,所以只要看ntp即可。

预设问题也是一致的,查看ntp服务的启动状态

1614222042_603712da18219411884fa.png!small?1614222115203

 

4)入侵防范

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

安全策略:

1614222132_60371334a3104d8ee7912.png!small?1614222205566

针对Linux来说他这边预设点就是去查看蓝牙组件是否禁用

这道我没做出来,我不清楚查看这个的命令是啥,百度也么找到,ps -ef服务进程之类的找过,没有发现blue关键字的进程之类的,有知道的大佬告告我。反正结果记录我是直接写未启用蓝牙组件。

预设问题也是一样的,就是查这个蓝牙组件

1614222243_603713a3b3c7c1b2dbb11.png!small?1614222316711

 

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

安全策略:

1614222333_603713fde105c8616102c.png!small?1614222406880

这里要求只查看tcp端口,直接netstat -tlnp即可,查看tcp哪些端口在进行监听,很多人可能只想到了这一步(我当时也是只查看了这个),但是看预设问题看起来留坑了。我们先来看下预设问题:

1614222480_60371490a1ecd595506f9.png!small?1614222553754

说明这里可能在防火墙的地方给你留坑了?而且得分率也比较低

我猜测这里应该是还要使用 iptables -L -n查看对应防火墙规则。因为结果我当时的查询情况来看,监听的TCP端口仅有22、80,但是有可能防火墙有拒绝的规则,导致22(这个不可能,因为我们远程上去了)或者80(没有测试连通性)端口没有放通?暂时猜测是这样的,因为无从考证了。。

 

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

安全策略:

1614222762_603715aa745def3b49730.png!small?1614222835754

这里很明显叫你去查看是否仅这三个地址能远程访问服务器。一般我们在/etc/hosts.allow、/etc/hosts.deny中查看是否有相应参数,我觉得他这里很刁钻,我们先看看我当时看到的这两个文件下的配置:

hosts.deny文件配置:ssh:all:deny

host.allow文件配置:ssh:10.1.1.101,10.1.1.102,10.1.1.103:allow

是不是觉得好像没问题?因为给我们分配的地址也是这三个,所以能上去很正常。我第一眼也没发现有什么问题,但是我可能用了点小聪明,我把地址改成了104,发现还是能上,那么问题就来了,配置肯定哪里配置错了。再仔细看一眼,他配置为ssh,正确的应该是sshd,所以你指出这个错误就能得分了。

预设问题点也是如出一辙,为配置的正确性:

1614223140_603717247b7c62fccb826.png!small?1614223213460

 

5)恶意代码防范

应采用免受恶意代码攻击的技术措施或主动免疫可信验证机制及时识别入侵和病毒行为,并将其有效阻断。

安全策略:

1614223254_60371796d58434674a468.png!small?1614223327866

这里Linux服务器能力验证这块一般安装的都是clamav,他也不会考你运维的问题,比如安装错误,或者命令有问题什么的,所以你只要能看懂计划任务就行了。这里我们去/etc/crontab和crontab -l查看下是否有相应的计划任务。当时的查询结果为:0 10 * * * root /usr/bin/clamscan -r /var/www/html -l /var/log/clamav/clamscan.log 但是我们别忘了另外一点,你crond这个服务没启动,这个计划任务是不生效的,所以经查看crond服务处于停止状态,这个就是不符合的点。

预设问题点:

1614230871_60373557163baced6ed3e.png!small?1614230944152

 

6)数据保密性

b) 应采用密码技术保证重要数据在存储过程中的保密性,包括但不限于鉴别数据、重要业务数据和重要个人信息等。

安全策略:发现没有Linux的,让你自己去找

1614231125_603736552a15618e42cd4.png!small?1614231198297

这里我之前只考虑到了鉴别数据,正常情况下,Linux用户口令保存在/etc/shadow文件夹中,每行的第二节即为加密后的password字段,根据$类别,该版本采用MD5+salt的方式存储其用户口令,这里鉴别数据我就下了符合结论。重要业务数据之类的也不晓得看啥,反正直接cat也都能看,就下了个不符合的结论。

但是,后来和别人沟通,他们说Linux系统根目录下,有一个叫运维管理密码之类的文件,打开来里面存储的是明文的用户名和口令,所以找到这个问题,可能才是得分点。这个肯定是敏感文件,需要加密存储。我记得Windows查的时候是有个压缩包,需要压缩密码的。

预设问题点:

1614231446_6037379609f93f9f4b6f0.png!small?1614231519818

7)剩余信息保护

a) 应保证鉴别信息所在的存储空间被释放或重新分配前得到完全清除。

这条条款安全策略中没有进行说明,说明要自己去寻找答案。但是我认为这个应该是针对Windows系统来说的,当时Windows系统里面给了你一个mimikatz软件,并给了使用说明,一步步操作下来发现能抓取存储在内存中的用户口令。但Linux可能技术有限,我当时也不清楚这个点该怎么查,直接下的不符合结论,估计也不计入得分点吧。

后来我去网上查询资料,Linux系统可以通过mimipenguin这个软件,对Linux系统的用户的鉴别数据进行获取,所以也不清楚当时会不会给你配了这个环境?讲道理没这么复杂,先看看预设问题点吧。

预设问题点:很明显,他这里没有说Linux的相关问题,应该是主要考察你对Windows系统鉴别信息存储空间是否得到完全清除的的验证情况。

1614231766_603738d6bb8cdc2d7d9d2.png!small?1614231839822

 

总结:

总体来说,我还是很幸运的代表公司参加了这一场能力验证,对自己知识认知、提高都有很大帮助。另外,由于笔者材料保管不善,当时的Windows截图,Linux会话日志保存在原来电脑,换了台电脑忘记将这个文档备份了,所以导致原材料丢失了……目前仅凭当时的记忆来复现了,针对于Windows系统的有点复杂,不太好搞,所以就目前仅聊聊Linux的配置情况吧,以后有机会能再次参加,再进行一下分享。同时,欢迎有想法的小伙伴们,对于能力验证技术方面的问题进行沟通,如有不正确的及时指正。

总之,等保也是一个成长的过程,能力验证也几乎代表了等保公司的测评水平,随着时代发展,万万不能落下对技术能力的提升啊~

转载时必须以链接形式注明原始出处及本声明