等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库

admin 2023年11月30日14:06:16评论6 views字数 3843阅读12分48秒阅读模式

知识宝库在此藏,一键关注获宝藏

这是一份根据等保条款整理出的对应知识点,内赋一些实验数据来映照相应条款,例如绕过口令验证登录,密码复杂度、登录失败功能的安装,SSL远程测试,使用加密函数对数据加密等,基本涵盖了能力验证将会考察的知识点(针对单独能力验证解析的可以看这篇文章)。

一、身份鉴别

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

1. 身份标识和鉴别

MySQL的身份标识为"username+host",鉴别通过 "username + host + password"来进行登录验证。
SELECT user, host, authentication_string, account_locked FROM mysql.user;
等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库
例如上图'root'@'%' 与 'root'@'127.0.01'是两个不同的用户,虽然均采用root用户名登录,但口令不相同,权限也可不相同。

2. 口令复杂度

第一个方面即实际的口令是否具有一定的复杂度,也即口令至少8位,且包含大写字母、小写字母、数字、特殊字符这四类字符种的三种,且口令不包含简单排列规律,如admin!@#123此类弱口令。当authentication_string 值为空时,可不需要口令进行登录,例如上图test@% 用户是一个可空口令登录的账户。
第二个方面,强制密码策略(高于某个版本后才有)
show variables like 'validate_password%';
等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库

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个让上)字符不得是字典中的单词。

0 or LOW

Length

1 or MEDIUM

Length; numeric, lowercase/uppercase, and special characters

2 or STRONG

Length; numeric, lowercase/uppercase, and special characters; dictionary file


validate_password_length

密码长度的最小值(这个值最小要是4)。

validate_password_number_count

密码中数字的最小个数。

validate_password_mixed_case_count

大小写字母(同时)的最小个数。

validate_password_special_char_count

特殊字符的最小个数。

validate_password_dictionary_file

字典文件

3. 口令的定期更换

实际更换周期(高于某个版本后才有)
select user,host,password_last_changed from mysql.user;

等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库

强制更换策略:
查看全局变量 default_password_lifetime
show global variables like 'default_password_lifetime';
等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库
查看user表中的password_lifetime 字段
select user,host,password_lifetime from mysql.user;

等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库


● 扩展学习

1.  跳过密码验证(之前能力验证有考察过)

当我们忘记mysql用户口令时,可以设置跳过密码验证
在配置文件(Linux系统一般为/etc/my.cnf)中添加如下字段:
在[mysqld]下添加 skip-grant-tables
等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库
然后重启服务,直接输入mysql即可跳过验证
等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库
此时的用户为
等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库
我们再查询有哪些用户,对root账户进行修改口令
等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库
将遗忘的用户口令设为空
update mysql.user set authentication_string='' where user='root' and host='%';
flush privileges;
等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库
再删除 skip-grant-tables,重启mysql,空口令登录root账户后修改
alter user 'root'@'%' identified by 'newpassword';
等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库
注意:直接在跳过密码验证的情况下,无法直接使用alter来修改用户口令

等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库

2.  MySQL用户

2.1 用户身份标识
MySQL数据库对于用户的标识和其他数据库有些不同,是通过"username + host"来标识用户。
这两个用户的用户名虽然都是root,但其实是两个不同的用户,其密码也是单独设置的。

查询当前登录账户,也可以看到用户的标识组成为username+host:

等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库

等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库

2.2 登录匹配机制

既然用户的标识事两个字段的组合,那么匹配的时候也要这两个字段都匹配上了才行。当客户端对MySQL发起连接后,MySQL会先对user表进行排序,然后从第一行开始,逐行传入的host、username进行匹配,当匹配到了某一行之后,就不往下继续匹配了。(如果任何一行都无法匹配,则登录失败)
此时,再对传入的口令和存储的口令进行比对,如果一致,那么该行即为这次登录后所使用的行(用户身份标识),如果不一致,则登录失败。
2.3 查询当前用户
MySQL中存在user()函数和current_user()函数。
user() 函数会显示你当前的登录用户具体是使用了什么用户名和什么ip地址去进行登录的。(注:ip地址是指链接数据库的客户端的ip地址,不是自己设置的值)
例子:

等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库

这里代表ip地址为本地的客户端上,使用用户名root对MySQL数据库进行了连接。
current_user() 函数会显示你最终使用的用户身份(也就是最后匹配到的那一行),例子:
等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库

等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库

等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库

也就是,最后在User表中匹配到了host字段为%、user为root的那一行,以"root@%"的用户身份登录了MySQL数据库。

3. 口令复杂度策略安装

MySQL5.6.6版本之后增加了密码强度验证插件validate_password,相关参数设置的较为严格。使用了该插件会检查设置的密码是否符合当前设置的强度规则,若不满足则拒绝设置。
我们可以去mysql安装目录下的/lib/plugin 目录下查看是否有该插件
等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库
默认情况下,mysql是未启用该插件的
添加:  install plugin validate_password soname 'validate_password.so';
等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库
插件安装后,使用 show plugins; 查看是否启用成功
等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库
默认配置:
等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库
卸载:
  mysql> uninstall plugin validate_password;
等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库
就没有了

等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库

4. 口令过期策略
首先无论是全局变量default_password_lifetime 还是 User表中的字段password_lifetime它们的单位都是
当password_lifetime为null的时候,则代表该用户当前口令的有效期使用的是全局变量default_password_lifetime的值。
当password_lifetime为一个具体的值的时候,则代表该用户当前口令的有效期不使用全局变量default_password_lifetime 的值,使用的是字段password_lifetime的值。
对于default_password_lifetime 和password_lifetime而言,值为0则代表有效期为永远。
通过工具可以直观看到对应密码过期策略的设置情况,像root账户采用default_password_lifetime,test 账户采用 password_lifetime

等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库

等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库

此时mysql 的配置策略如下

等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库

等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库

尝试配置全局变量测试
SET GLOBAL default_password_lifetime=1;
等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库
密码到期后,会要求你强制更改,不然无法使用相应的命令
等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库
使用navicat远程工具会弹出修改口令的弹窗,强行设置新口令
等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库
点取消的话会禁止登录,并弹出对应警告

等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库

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

1. 登录失败处理功能

原文始发于微信公众号(等保不好做啊):等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年11月30日14:06:16
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   等保2.0测评深入理解(包含能力验证考点) — MySQL 数据库http://cn-sec.com/archives/2255238.html

发表评论

匿名网友 填写信息