测评前先进行资产的信息收集,查看对应系统的版本

右键我的电脑→属性

[全]国产麒麟kylin Linux操作系统安全加固及等保测评_等保测评

一、 身份鉴别

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

当前实际情况

确认用户在登录过程中是否采用了身份鉴别措施(一般为用户名+口令)确认是否有空口令账户存在cat /etc/passwd 该文件中各用户的第二字段不为空确认用户当前口令是否具有复杂度,是否定期更换。与linux查看方式相同

按照之前Linux系统默认配置,test本地即可无密登录

但麒麟操作系统默认是有做相应的安全加固配置,装机好后,查看 /etc/ssh/sshd_config文件PermitEmptyPasswords 值默认为 no无法通过空口令进行ssh登录(ssh空口令登录需开启PermitEmptyPasswords yes)

[全]国产麒麟kylin Linux操作系统安全加固及等保测评_安全加固_02

查看口令最后修改日期与口令最长更改日期

<code class="language-plain has-numbering hljs" id="code_id_0">chage -l username</code>
  • 1.
1.操作系统强制策略

① 口令复杂度

配置文件:

<code class="language-plain has-numbering hljs" id="code_id_1">/etc/security/pwquality.conf</code>
  • 1.

默认情况下已经配置好对应的强制密码复杂度策略

参数说明:

debug:将调试信息写入日志(不懂,不会测试)

type=xxx:当添加/修改密码时,系统给出的省缺提示符是“New UNIX password”以及“Retype UNIX password”,使用该参数可以自定义输入的密码提示符。(如

<code class="language-plain has-numbering hljs" id="code_id_2">password requisite pam_cracklib.so type=1111111</code>
  • 1.

retry=N:修改密码可重试的次数,返回密码修改错误

difok=N:新密码必需与旧密码不同的位数

dcredit=N:N >0密码中最多有多少个数字长度加1;

N<0密码中最少有多少个数字

lcredit=N:小写字母的个数

ucredit=N:大写字母的个数

ocredit=N:特殊字母的个数

minclass=N:密码组成(大/小字母,数字,特殊字符)

minlen=N:密码最小长度

在Linux操作系统中,minclass是密码复杂度策略的一个参数,用于定义密码中最小要求的字符类别数。字符类别包括大写字母(A-Z)、小写字母(a-z)、数字(0-9)和特殊字符(例如 !@#$%^&*())。

minclass被设置为一个正整数值时,这意味着密码必须包含至少该整数值所指定的字符类别数量。例如,如果将minclass设置为2,则密码至少需要包含两个不同的字符类别(如数字和大写字母)。

[全]国产麒麟kylin Linux操作系统安全加固及等保测评_安全加固_03

测试minclass=3,尝试配置简单口令无法配置成功

② 口令最长过期时间

配置文件:

<code class="language-plain has-numbering hljs" id="code_id_3">/etc/login.defs</code>
  • 1.

默认情况下还是99999天

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

2.登录失败处理功能

配置文件:

<code class="language-plain has-numbering hljs" id="code_id_4">/etc/pam.d/password-auth</code>
  • 1.

默认情况下登录失败3次锁定60s,包括所有账户,同时包括本地登录和SSH远程登录

[全]国产麒麟kylin Linux操作系统安全加固及等保测评_等保测评_04

3.操作超时

图形化桌面:控制面板→电源管理

默认5分钟

ssh 远程管理方式依旧查看TMOUT值

echo $TMOUT 查看是否有相应输出,默认无

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

<code class="language-plain has-numbering hljs" id="code_id_5">netstat -tlnp|more</code>
  • 1.

查看是远程管理方式,确认是否仅使用SSH方式管理

d)应采用口令、密码技术、生物技术等两种或两种以上组合的鉴别技术对用户进行身份鉴别,且其中一种鉴别技术至少应使用密码技术来实现 现场核查,一般仅使用用户名+口令或用户名+密钥的方式进行管理。

二、访问控制

a)应对登录的用户分配账户和权限

1.确定当前账户情况

通过查看/etc/passwd、/etc/shadow、/etc/group文件,查看可登录的普通账户有哪些,以及用户组的情况。

控制面板→ 用户账户 也能查看

2.确定是否限制root账户权限

配置文件:

<code class="language-plain has-numbering hljs" id="code_id_6">/etc/ssh/sshd_config</code>
  • 1.

确认PermitRootLogin 是否为no

b)应重命名或删除默认账户,修改默认账户的默认口令 依据28448判定要求,该条满足1或2就可以判断为符合

确认root账户是否禁用或重命名,或已修改成复杂口令

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

3.确定是否存在多余、过期账户

结合/etc/shadow文件中的账户,与管理员确认账户使用情况,是否存在多余无用账户。

  1. 确认是否存在共享账户

确认管理人员与账户之间的对应关系,确认是否存在多人共用统一账户的情况存在。

d)应授予管理用户所需的最小权限,实现管理用户的权限分离 ● 三权分立原则

至少建立系统管理员、安全管理员、审计管理员三种权限帐号。

个人认为,不使用root超级管理员账户,该账户的管理权限应掌握在安全管理员手中,仅上线前用于环境部署工作。我们也可以参考能力验证给出的权限表

1.管理员

用于管理整个系统,可在

<code class="language-plain has-numbering hljs" id="code_id_7">/etc/sudoer</code>
  • 1.

中授予各式各样的权限,但无审计管理的权限,不可中断审计进程及修改审计配置等,且不可威胁到root用户。可授予新增操作员、修改对应文件、服务等的一些操作管理。

例如仅可修改普通用户口令,不可修改root账户口令

2.安全管理员

负责各类安全策略的 制定与落实。包括不限于服务器口令安全策略、备份安全策略、审计安全策略、 账户安全策略等等。例如 :

⚫各类设备应划分系统管理员、安全管理员和审计管理员,此外数据库服务器应创建数据库管理员账号;

⚫应为每个用户创建账号并分配权限, 禁止出现共享账号。及时停用离职人员账号,避免出现多余账户;

⚫用户账户权限分配遵从“最小化”和“必须使用”原则,离岗人员的权限需收回;

⚫各类设备应仅允许审计管理员能够查询审计日志,管理日志策略、日志文件和日志进程;

⚫配置超时登录机制,登录用户无操作自动退出系统。其中, 关键资产阈值 15分钟, 重要资产阈值 30 分钟, 一般资产阈值 60 分钟。

3.审计管理员

负责对系统审计方面的管理。

例如具有

<code class="language-plain has-numbering hljs" id="code_id_8">sudo systemctl audit(rsyslog)</code>
  • 1.

等进程的管理权限。

对于auidt,syslog轮替规则、审计内容具有配置权限等。

4.操作员

普通权限账户,用于正常的工作,无其他用途。

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

查看的就是一个umask值(在/etc/profile),当UID>199并且用户的组名等于用户名,则umask=002其余umask=022

平常我们在做测评的时候,如果只有一个root账户的情况下应该是不符合的,因为个人理解,就一个账户的话就不算做了访问控制策略。

f)访问控制的粒度应达到主体为用户级或进程级,客体为文件、数据库表级

这个Linux操作系统默认符合,访问控制粒度主体为用户或者进程,客体为文件和目录级别。

g)应对重要主体和客体设置安全标记,并控制主体对有安全标记信息资源的访问 使用 sestatus命令查看,确认状态为 enabled

[全]国产麒麟kylin Linux操作系统安全加固及等保测评_安全加固_05

默认情况下为 disabled,不符合

三、安全审计

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

1.查看审计进程是否正常运行

进程运行正常,默认覆盖到每个用户

<code class="language-plain has-numbering hljs" id="code_id_9">systemctl status rsyslog.service

systemctl status auditd.service</code>
  • 1.
  • 2.
  • 3.

使用

<code class="language-plain has-numbering hljs" id="code_id_10">auditctl -s</code>
  • 1.

查看内核状态

<code class="language-plain has-numbering hljs" id="code_id_11">enabled=1</code>
  • 1.

时为启动状态

2.确认对哪些事件进行了审计,是否包含重要用户行为和重要安全事件

1)rsyslog日志规则

配置文件,

<code class="language-plain has-numbering hljs" id="code_id_12">cat /etc/rsyslog.conf</code>
  • 1.

文件:

这个文件规定了

①什么服务 ②什么等级信息 ③需要被记录在哪里(设备或文件)

与Linux系统无异

2)audit 日志规则

配置文件,查看/etc/audit/audit.rules文件

<code class="language-plain has-numbering hljs" id="code_id_13">auditctl -l</code>
  • 1.

与Linux系统无异

b) 审计记录应包括事件的日期和时间、用户、事件类型、事件是否成功及其他与审计相关的信息 查看当前系统日期:date

日志文件目录:/var/log/

左下角开始可以找到日志选项

执行了啥命令这里也会有体现

c)应对审计记录进行保护,定期备份,避免受到未预期的删除、修改或覆盖等

  1. 有日志服务器

一般

<code class="language-plain has-numbering hljs" id="code_id_14">/etc/syslog.conf</code>
  • 1.

文件下会有如下配置

.emerg;.alert;.crit;.err;.warning;.notice;.info;.debug @日志服务器地址

确认是否能查询到6个月前日志信息

  1. 无日志服务器

查看对应审计日志服务器本地权限

<code class="language-plain has-numbering hljs" id="code_id_15">ls -l /var/log/secure /var/log/messages</code>
  • 1.

查看日志存储周期,是否能保存6个月以上

若未定期备份审计记录,确认各日志的轮替规则

rsyslog主配置文件

<code class="language-plain has-numbering hljs" id="code_id_16">/etc/logrotate.conf</code>
  • 1.

,符合情况为 monthly rotate 6

rsyslog单独配置文件:

<code class="language-plain has-numbering hljs" id="code_id_17">/etc/logrotate.d/rsyslog</code>
  • 1.

默认情况下没配置过,还是

<code class="language-plain has-numbering hljs" id="code_id_18">weekly rotate 4

/var/log</code>
  • 1.
  • 2.
  • 3.

目录下可以很清晰的看到

图片

d)应对审计进程进行保护,防止未经授权的中断 确认除root账户外,是否有其他用户可以终止审计进程。

例如可以执行

<code class="language-plain has-numbering hljs" id="code_id_19">systemctl stop rsyslog.service</code>
  • 1.

等相关命令。

四、入侵防范

a)应遵循最小安装的原则,仅安装需要的组件和应用程序 稍微明显一些的多余组件和服务,可以查看开机自启服务,例如蓝牙等等

<code class="language-plain has-numbering hljs" id="code_id_20">systemctl list-unit-files | grep enabled</code>
  • 1.

另外桌面版可以在所有程序中查看是否安装了明显非必须的软件

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

<code class="language-plain has-numbering hljs" id="code_id_21">netstat -tuanp|more</code>
  • 1.

查看当前端口开启情况

类似111就是多余的

另外麒麟操作系统默认存在9090端口,是cockpit的管理界面,登录进去能管理查看一些服务器信息

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

  1. 防火墙 查看防火墙是否开启,并且有无配置相应策略 默认放通ssh、cockpit 等服务 图形界面更直观,可以直接在图形化界面上进行配置
  2. hosts.allow与hosts.deny文件 这两个文件在麒麟这里已经没有了
  3. sshd_config文件 只允许指定用户进行登录(白名单):

/etc/ssh/sshd_config配置文件中设置AllowUsers选项:

<code class="language-plain has-numbering hljs" id="code_id_22">AllowUsers test test1@192.168.1.1</code>
  • 1.

允许test和从192.168.1.1登录的test1账户通过SSH登录系统

只拒绝指定用户进行登录(黑名单):

/etc/ssh/sshd_config配置文件中设置DenyUsers选项:

<code class="language-plain has-numbering hljs" id="code_id_23">DenyUsers test test1</code>
  • 1.

拒绝test test1账户通过SSH登录系统

[全]国产麒麟kylin Linux操作系统安全加固及等保测评_安全加固_06

配置后,这个账户尝试登录无法成功,会提示ssh拒绝了密码

d)应提供数据有效性检验功能,保证通过人机接口输入或通过通信接口输入的内容符合系统设定要求 在应用层面测评,该项不适用

e)应能发现可能存在的已知漏洞,并在经过充分测试评估后,及时修补漏洞 需确认该服务器是否进行漏洞扫描(或有其他手段发现已知漏洞),确认扫描报告中是否存在相关漏洞,若有高风险漏洞未整改,则判不符合。若无确认是否经过充分测试评估后,及时修补漏洞。

f)应能够检测到对重要节点进行入侵的行为,并在发生严重入侵事件时提供报警 询问管理人员是否安装了主机入侵检测软件,默认情况下是无。

五、恶意代码防范

a)应采用免受恶意代码攻击的技术措施或主动免疫可信验证机制及时识别入侵和病毒行为,并将其有效阻断 询问管理人员是否安装了防恶意代码软件

部分版本的麒麟系统有自带的病毒扫描软件,但测试无入侵检测功能(不会主动报警),仅在扫描文件时发现病毒。当然这个还是需要看具体安装的什么杀毒软件,是否能自动阻断报警相关文件存在。

六、可信验证

a)可基于可信根对计算设备的系统引导程序、系统程序、重要配置参数和应用程序等进行可信验证,并在应用程序的关键执行环节进行动态可信验证,在检测到其可信性受到破坏后进行报警,并将验证结果形成审计记录送至安全管理中心 可信验证这个条款,目前市面上的主流产品并没有普及。条款要求基于“可信根”对计算机设备的系统引导程序、系统程序、重要配置参数和应用程序等进行可信验证,那么这个“可信根”又是什么东西呢。以下内容仅代表个人观点,如有理解不当请帮忙指出。

个人认为就是可信的源头,那么针对于服务器这类的可信,源头是哪里呢?那么肯定是从硬件开始可信,通过 硬件 →内核 → 应用一步步来实现最终的可信链路。所以一般的情况下就是要有这样的可信硬件产品。可以参考下图,是银河麒麟操作系统多安全策略框架,这样的策略下应该是能实现可信验证了。

图片

总结来说就是要购买可信硬件并部署,通过从硬件开始可信,可能是可信芯片啥的,这个具体没有接触过,细节就不大清楚了。所以如果没有硬件做可信支持的话,那么这条条款肯定是不符合的。

七、数据完整性

a)应采用校验技术或密码技术保证重要数据在传输过程中的完整性,包括但不限于鉴别数据、重要业务数据、重要审计数据、重要配置数据、重要视频数据和重要个人信息等 1.通过SSH进行远程管理,鉴别数据、重要配置数据传输过程中的完整性能得到保障;

2.重要审计数据传输过程中无完整性保护。

b)应采用校验技术或密码技术保证重要数据在存储过程中的完整性,包括但不限于鉴别数据、重要业务数据、重要审计数据、重要配置数据、重要视频数据和重要个人信息等 询问是否对重要数据存储过程中的完整性进行保护。

鉴别数据、重要审计数据、重要配置数据存储过程中无完整性保护措施。

这个软件可以实现完整性校验功能,但是好像不是直接能用的要购买(也可能我这个镜像不是正版授权),默认情况下是禁用。

在下方添加对应文件即可

八、数据保密性

a)应采用密码技术保证重要数据在传输过程中的保密性,包括但不限于鉴别数据、重要业务数据和重要个人信息等 通过SSH进行远程管理,鉴别数据传输过程中的保密性能得到保障。

b)应采用密码技术保证重要数据在存储过程中的保密性,包括但不限于鉴别数据、重要业务数据和重要个人信息等 口令存储在/etc/shadow,和Linux系统一样

可以在

<code class="language-plain has-numbering hljs" id="code_id_24">/etc/login.defs</code>
  • 1.

中找到对面的加密算法

九、数据备份恢复

a) 应提供重要数据的本地数据备份与恢复功能 首先询问管理员是否有其他备份措施,若无麒麟有自带的备份工具→麒麟备份还原工具

可以看到对应备份文件

以及操作日志

b)应提供异地实时备份功能,利用通信网络将重要数据实时备份至备份场地 询问管理人员是否进行异地备份

c)应提供重要数据处理系统的热冗余,保证系统的高可用性 询问、核查是否采用集群、心跳检测、负载均衡和集群管理器等功能,确保系统在主服务器故障时能够自动切换到备份服务器,并提供连续的服务。

十、剩余信息保护

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

b)应保证存有敏感数据的存储空间被释放或重新分配前得到完全清除 查看HISTSIZE与HISTFILESIZE值

建议设置:

<code class="language-plain has-numbering hljs" id="code_id_25">HISTSIZE=10、HISTFILESIZE=10</code>
  • 1.