身份鉴别
身份鉴别A:应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换。
测评方法:
1)执行mysql -u root -p命令,查看是否提示输入口令鉴别用户身份。
mysql -u root -p
?2)查询user表,应不存在相同的用户名。
mysql> SELECT user,host FROM mysql.user;
+---------------+-----------+
| user | host |
+---------------+-----------+
| mysql.session | localhost |
| mysql.sys | localhost | =====> 不存在相同的用户名
| root | localhost |
+---------------+-----------+
3 rows in set (0.00 sec)
3)查看口令复杂度配置信息:
SHOW VARIABLES LIKE 'validate%';
+--------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------+-------+
| validate_password_check_user_name | OFF |
| validate_password_dictionary_file | |密码策略文件,策略为STRONG才需要
| validate_password_length | 3 |密码最少长度
| validate_password_mixed_case_count | 0 |大小写字符长度
| validate_password_number_count | 0 |数字最少个数
| validate_password_policy | LOW |修改口令策略
| validate_password_special_char_count | 1 |特殊字符最少个数
+--------------------------------------+-------+
7 rows in set (0.00 sec)
身份鉴别B:应检查数据库系统,查看是否已配置了鉴别失败处理功能,并设置了非法登录次数的限制值,对超过限制值的登录终止其鉴别会话或临时封闭帐号。查看是否设置网络登录连接超时,并自动退出。
测评方法:
1)询问管理员是否采取其他手段配置数据库登录失败处理功能。(若MySQL数据库采用第三方管理软件,第三方管理软件也要设置登录失败锁定次数)
2)数据库管理系统本地配置:
主要看这两个参数有没有设置:max_connect_errors、?Wait_timeout 。
mysql> SHOW VARIABLES LIKE 'max_connect_errors'; =====> 查看登录失败策略
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| max_connect_errors | 100 |
+--------------------+-------+
1 row in set (0.00 sec)
mysql> SHOW VARIABLES LIKE '%timeout%'; =====> 查看登录链接超时自动退出策略
+-----------------------------+----------+
| Variable_name | Value |
+-----------------------------+----------+
| connect_timeout | 10 |
| delayed_insert_timeout | 300 |
| have_statement_timeout | YES |
| innodb_flush_log_at_timeout | 1 |
| innodb_lock_wait_timeout | 50 |
| innodb_rollback_on_timeout | OFF |
| interactive_timeout | 28800 |
| lock_wait_timeout | 31536000 |
| net_read_timeout | 30 |
| net_write_timeout | 60 |
| rpl_stop_slave_timeout | 31536000 |
| slave_net_timeout | 60 |
| wait_timeout | 28800 |
+-----------------------------+----------+
13 rows in set (0.00 sec)
身份鉴别C:当进行远程管理时,应采取必要措施、防止鉴别信息在网络传输过程中被窃听。
测评方法:
1)看远程管理数据库时是否采用SSL(使用SSL:符合)。
mysql> SHOW VARIABLES LIKE '%have_ssl%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_ssl | YES |
+---------------+-------+
1 row in set (0.00 sec)
如果value为disabled说明此功能没有激活
2)本地管理,本条N/A
身份鉴别D:应采用口令、密码技术、生物技术等两种或两种以上组合的鉴别技术对用户进行身份鉴别,且其中一种鉴别技术至少应使用密码技术来实现。
测评方法:
MySQL不能集成其他身份鉴别措施,应通过对操作系统层面实现双因素,访谈系统管理员,是否采用其他技术手段实现双因素身份认证,是否采用了两种或两种以上组合的鉴别技术,如口令、数字证书Ukey. 令牌、指纹等,是否有一种鉴别方法使用密码技术。
访问控制
访问控制A:应对登录的用户分配账户和权限。
测评方法:
使用命令查看,是否为登录的用户创建了不同账户和权限。
mysql> SELECT user,host FROM mysql.user;
+---------------+-----------+
| user | host |
+---------------+-----------+
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+---------------+-----------+
3 rows in set (0.00 sec)
mysql> SHOW grants for 'root'@'localhost'; =====> 查看root账户权限
+---------------------------------------------------------------------+
| Grants for root@localhost |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+
2 rows in set (0.00 sec)
访问控制B:应重命名或删除默认账户,修改默认账户的默认口令。
测评方法:
1)执行命令,输出结果查看root用户是否被重命名或被删除。
mysql> SELECT user,host FROM mysql.user;
+---------------+-----------+
| user | host |
+---------------+-----------+
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+---------------+-----------+
3 rows in set (0.00 sec)
2)若root账户未被删除,是否更改其默认口令,避免空口令或弱口令。
访问控制C:应及时删除或停用多余的、过期的账户,避免共享账户的存在。
测评方法:
1)查看并询问,是否存在无关账户,以下账户是否存在多余过期账户,若是多余过期的账户查看账户是否被禁用。
mysql> select user, host FROM mysql.user;
+---------------+-----------+
| user | host |
+---------------+-----------+
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+---------------+-----------+
3 rows in set (0.00 sec)
2)询问管理员们是否使用各自账号登录系统,确定不存在共享账户。
访问控制D:应授予管理用户所需的最小权限,实现管理用户的权限分离
测评方法:
1)是否对用户进行角色划分且只授予账号必须的权限 如除root外,任何用户不应该有mysql库user表的存取权限,禁止将fil、.process、 super权限授予管理员以外的账户。 2)查看权限表,并验证用户是否具有自身角色外的其他用户的权限。
访问控制E:应由授权主体配置访问控制策略,访问控制策略规定主体对客体的访问规则。
测评方法:
1)访谈管理员是否制定了访问控制策略。
2)执行命令查看用户权限列:
mysql> SELECT * FROM mysql.user\G
*************************** 1. row ***************************
Host: localhost
User: root
Select_priv: Y
Insert_priv: Y
Update_priv: Y
Delete_priv: Y
Create_priv: Y
Drop_priv: Y
Reload_priv: Y
Shutdown_priv: Y
Process_priv: Y
File_priv: Y
Grant_priv: Y
References_priv: Y
Index_priv: Y
Alter_priv: Y
Show_db_priv: Y
Super_priv: Y
Create_tmp_table_priv: Y
Lock_tables_priv: Y
Execute_priv: Y
Repl_slave_priv: Y
Repl_client_priv: Y
Create_view_priv: Y
Show_view_priv: Y
Create_routine_priv: Y
Alter_routine_priv: Y
Create_user_priv: Y
Event_priv: Y
Trigger_priv: Y
Create_tablespace_priv: Y
ssl_type:
ssl_cipher:
x509_issuer:
x509_subject:
max_questions: 0
max_updates: 0
max_connections: 0
max_user_connections: 0
plugin: mysql_native_password
authentication_string: *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B
password_expired: N
password_last_changed: 2022-03-30 23:12:35
password_lifetime: NULL
account_locked: N
查看数据库权限列:
mysql> SELECT * FROM mysql.db\G
*************************** 1. row ***************************
Host: localhost
Db: performance_schema
User: mysql.session
Select_priv: Y
Insert_priv: N
Update_priv: N
Delete_priv: N
Create_priv: N
Drop_priv: N
Grant_priv: N
References_priv: N
Index_priv: N
Alter_priv: N
Create_tmp_table_priv: N
Lock_tables_priv: N
Create_view_priv: N
Show_view_priv: N
Create_routine_priv: N
Alter_routine_priv: N
Execute_priv: N
Event_priv: N
Trigger_priv: N
查看用户表权限列:
mysql> SELECT * FROM mysql.tables_priv\G
*************************** 1. row ***************************
Host: localhost
Db: mysql
User: mysql.session
Table_name: user
Grantor: boot@connecting host
Timestamp: 0000-00-00 00:00:00
Table_priv: Select
Column_priv:
看输出的权限列是是否与管理员制定的访问控制策略及规则一致 3)登录不同的用户,验证是否存在越权访问的情形
访问控制F:访问控制的粒度应达到主体为用户级或进程级,客体为文件、数据库表级。
测评方法:
1)执行下列语句:
mysql> SELECT * FROM mysql.user\G 检查用户权限列
mysql> SELECT * FROM mysql.db\G 检查数据库权限列
2)访谈管理员并核查访问控制粒度主体是否为用户级,客体是否为数据库表级。
访问控制G:应对重要主体和客体设置安全标记,并控制主体对有安全标记信息资源的访问。
测评方法:
MySQL不提供该项功能,访谈管理员,是否采用其他技术手段。(一般都是不符合的)
安全审计
安全审计A:应启用安全审计功能,审计覆盖到每个用户,对重要的用户行为和重要安全事件进行审计
测评方法:
1.使用命令查看输出日志是否覆盖到所有用户:
mysql> show variables like '%log%';
###
在MySQL中自带了审计功能——general log,它会记录所有关于mysql的sql语句,如果开启了general log,那么就可以符合审计A条
2.检查是否采用第三方工具增强MySQL日志功能
若有,记录第三方审计工具的审计内容,查看是否包括事件的日期和时间、用户、事件类型、事件是否成功及其他与审计相关的信息
?安全审计B:审计记录应包括事件的日期和时间,用户、事件类型,事件是否成功及其他与审计相关的信息。
测评方法:
1.根据上面的日志存放位置,进入目录下,查看审计记录是否包含日期和时间,用户、事件类型,事件是否成功及其他与审计相关的信息。 (只要启用了审计功能,无论是自带的审计还是插件,在记录的信息上都能满足这个要求。) 2.是否采取第三方工具增强MySQL日志功能。若有,记录第三方审计工具的审计内容,查看是否包括事件的日期和时间、用户、事件类型、事件是否成功及其他与审计相关的信息
安全审计C:应对审计记录进行保护,定期备份,避免受到未预期的删除、修改或覆盖等
测评方法:
1.询问管理员对审计记录如何保存(备份、转存等手段),备份策略(每天/周,全备/增备),审计保存记录保存时间应大于6个月(是否能看到6个月之前的日志)。
2.如果采用第三方审计产品,也要满足日志审计时间达到个月以上。
3.是否严格限制用户访问审计记录的权限。应检查MySQL数据库系统是否对日志进行了权限设置,非授权人员不能对日志进行操作。MySQL日志,应确保只有root和mysq1可以访问。
访问控制D:应对审计进程进行保护,防止未经授权的中断
测评方法:
MySQL数据库系统默认符合,但是如果采取了第三方工具,则应检查数据库系统,查看未授权用户是否能中断审计进程。
入侵防范
数据库入侵防范ABDF不适用
入侵防范C:应通过设定终端接入方式或网络地址范围对通过网络进行管理的管理终端进行限制
测评方法:
查看用户登录的IP地址;是否给所有用户加上IP限制,拒绝所有未知主机进行连接 注:当user表中的Host值不为本地主机时,应指定特定IP地址,不应为%;或将user表中的Host值为空,而在host表中指定用户帐户允许登陆访问的若干主机;在非信任的客户端以数据库账户登录应被提示拒绝,用户从其他子网登录,应被拒绝,%代表所有主机,localhost代表本机登录。
mysql> show grants for root@localhost;
+---------------------------------------------------------------------+
| Grants for root@localhost |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+
2 rows in set (0.00 sec)
入侵防范E:应能发现可能存在的已知漏洞,并在经过充分测试评估后,及时修补漏洞
测评方法:
1.访谈MySQL补丁升级机制,查看补丁安装情况。
mysql> show variables where variable_name like "%version%";
+-------------------------+------------------------------+
| Variable_name | Value |
+-------------------------+------------------------------+
| innodb_version | 5.7.37 |
| protocol_version | 10 |
| slave_type_conversions | |
| tls_version | TLSv1,TLSv1.1,TLSv1.2 |
| version | 5.7.37 |
| version_comment | MySQL Community Server (GPL) |
| version_compile_machine | x86_64 |
| version_compile_os | Linux |
+-------------------------+------------------------------+
8 rows in set (0.00 sec)
2.访谈数据库是否为企业版,是否定期进行漏洞扫描,针对高风险漏洞是否评估补丁并经测试后再进行安装
数据备份恢复
数据备份A:应提供重要数据的本地数据备份与恢复功能
测评方法:
1.询问数据备份策略(每天/周,全备/增备)
2.是否具备恢复测试记录
数据备份B:应提供异地实时备份功能,利用通信网络将重要数据实时备份至备份场地
测评方法:
1.是否进行异地备份,记录异地备份机房。
2.询问备份策略(每天/周,全备/增备)备份
数据备份C:应提供重要数据处理系统的热冗余,保证系统的高可用性
测评方法:
1.如果是云上数据库,是否为高可用版本。
2.如果线下数据库,看是否部署两台以上服务器。
|