2022能力验证MySQL数据库的测评条款共有9条,考察的有身份鉴别、访问控制、安全审计、数据保密性 四个大点,这期就对这些条款测评要点以及预设问题进行分析。
首先我们先确定MySQL数据库安装在哪,毕竟要连接登录查看嘛,确定其安装在Linux服务器上后,可通过跳板机的HeidiSQL 连接工具进行远程管理。
输入对应的IP地址以及账号口令,我们成功登录对应数据库
接着我们就来看看当时具体的测评结果记录是一个什么情况。
一、 身份鉴别
a)应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换
老规矩,咱们先看看官方给出的结果描述
首先身份鉴别a)条款,我们等保要测的就是用户登录的鉴别信息是否具有复杂度且是否定期更换,这是我们正常做等保时候的思路,但是能力验证一般常考的是让你去寻找是否有绕过正常登录的方式,好比Linux操作系统的pam模块身份验证绕过(可看我之前的Linux主机能力验证文章)。
那么测评mysql数据库的时候,我们第一个要去看的就是它的配置文件,确认是否可以绕过身份验证。我们先了解一下,如何不输入密码即可登录mysql的方法。
在配置文件(Linux系统一般为 /etc/my.cnf)中添加如下字段:
在[mysqld]下添加 skip-grant-tables
此时的用户为
知道有这种方式后,我们再来看看现场截图情况:
查看配置文件cat /etc/my.cnf 发现并无对应参数
第一步确认了没问题,那么我们就放心了,按照我们的步骤来查,先确定有哪些账户,并查看是否存在空口令账户(authentication_string 值为空的)。
select user,host,password_last_changedfrom mysql.user;
确定没有什么问题,接着查看口令复杂度策略是否设置
show variables like 'validate_password%';
我们再看密码复杂度要求校验的时候最开始要看的参数为validate_password_policy
这个参数用于控制validate_password的验证策略0=low 1=MEDIUM 2=strong。
- 当validate_password_policy=0时 这个时候只对密码长度做验证,也就是说它和validate_password_length一起配合起来完成用户验证。
这种情况下只要密码达到validate_password_length指定的长度后就行。
- 当valdiate_password_policy=1时 这个时候首先要满足的是validate_password_policy=0时的验证要求。然后现去验证密码中的数字个数,大小写个数,特殊字符个数。这些又分别由validate_password_number_count,validate_password_mixed_case_count,validate_password_special_char_count 这几个参数来控制。
- 当validate_password_policy=2这个时候它首先是要满足前面说到的0、1 的要求;然后它还追加了一个,对于密码中任意连续4个(或4个让上)字符不得是字典中的单词。
综上所述,如果validate_password_policy=0(MEDIUM)时,你后续配置的大小写个数、字符数等等,均不生效,生效的仅有密码长度。
validate_password_length: 密码长度的最小值(这个值最小要是4)。
validate_password_number_count: 密码中数字的最小个数。
validate_password_mixed_case_count: 大小写字母(同时)的最小个数。
validate_password_special_char_count: 特殊字符的最小个数。
validate_password_dictionary_file: 字典文件
所以上述配置强制密码策略要求为:密码至少包含大小写字母、数字、特殊字符至少1个,密码长度不小于10。
再看是否有密码最大使用期限设置,查看default_password_lifetime 参数
show global variables like 'default_password_lifetime';
另外千万别忘了去对照关键资产的安全策略,由于长度和更换周期有问题,所以该条部分符合
另外,一般现场测评查看用户密码是否定期更改,还可以查看各用户最后一次修改密码的时间,这样对照会更准确
select user,host,password_lifitime from mysql.user;
b)应具有登录失败处理功能,应配置并启用结束会话、限制非法登录次数和当登录连接超时自动退出等相关措施
接着看身份鉴别b),查看MySQL的登录失败处理功能
show variables like 'connection_control%';