等保2.0安全计算环境之Mysql差距分析(二)
等保2.0安全计算环境
Mysql差距分析
Part
2
访问控制
a)
应对登录的用户分配账户和权限;
检查方法
(1)询问数据库管理员,数据库系统的访问控制策略是什么,是否依据访问控制策略为每个登录用户分配了不同的权限。
(2)检查数据库的访问控制策略是否与管理员回答一致。输入show grants for '用户名'@'主机名';
(3)检查是否对远程访问的用户进行IP限制。输入
select user,host from mysql.user;
结果判定
如果数据库的访问控制策略如管理员所述相符,且限制了远程访问的用户IP,则符合;
如果未制定安全访问控制策略,所有的登录用户均拥有所有权限(ALL PRIVILEGES),或未对远程访问的用户进行IP限制(host=%),则不符合。
结果记录
记录登录用户拥有的权限。
整改方法
依据相应的访问控制策略,授予或撤销各个用户的权限,输入:
grant 权限 on 数据库.表(*.*) to '用户'@'主机名';
revoke 权限 on 数据库.表 from '用户'@'主机名';
use mysql;
update user set host = '主机名' where user = '用户名';
*各权限文件对应的权限说明:
mysql.user表 —— 全局权限(服务器中的所有数据库)
mysql.db和mysql.host表 —— 数据库权限(数据库中的所有目标)
mysql.tables_priv表 —— 表权限(表中的所有列)
mysql.columns_priv表 —— 列权限(表中的单一列)
b)
应严格限制默认帐户的访问权限,重命名系统默认帐户,修改这些帐户的默认口令。
检查方法
输入命令 select user,password from mysql.user;查看是否重命名root用户,加强用户口令。
结果判定
如果重命名root账户,且口令强度符合要求,则该项符合。
结果记录
记录拥有root权限的用户名。
整改方法
1. mysql> use mysql;
2. update user set user='用户名' where user='root';
3. select user,host,password from mysql.user;
c)
应及时删除多余的、过期的帐户,避免共享帐户的存在;
检查方法
输入命令 select user,password from mysql.user;查看是否存在多余的、过期的账户,询问每个账户的用途。
结果判定
如果不存在多余的、过期的账户,则该项符合。
结果记录
记录每个账户的功能用途。
整改方法
若有多余的、过期的账号,在不影响业务进行的情况下对其进行删除。
1. select user,host,password from mysql.user;
2. drop user 'test'@'localhost';
d)
应根据管理用户的角色分配权限,实现管理用户的权限分离,仅授予管理用户所需的最小权限;
检查方法
(1)询问数据库管理员是否根据不同的使用用户来设置不同的权限,且所设置的各账户权限均为最小权限。
(2)检查各账户的权限是否与数据库管理员所述一致,是否开启了不必要权限(如file_priv、shutdown_priv、grant_priv),输入:
select * from mysql.user where user='用户名' and host='主机名'\G;
结果判定
如果仅授予各用户所需的最小权限,则该项为符合,否则为不符合。
结果记录
记录每个用户的权限是否与满足自身的需求一致。
整改方法
根据不同用户的职能,撤销各个用户的多余权限,输入:
revoke 权限 on 数据库.表 from '用户'@'主机名';
*file_priv:读写服务器上文件的权限。
*shutdown_priv:关闭Mysql数据库的权限。
*grant_priv:可以将自己拥有的权限赋给其他用户的权限。
e)
应由授权主体配置访问控制策略,访问控制策略规定主体对客体的访问规则;
检查方法
1. 访谈管理员是否制定了访问控制策略
2. 执行语句:
mysql>select * from mysql.user\G -检查用户权限列
mysql>select * from mysql.db\G --检查数据库权限列
mysql>select * from mysql.tables_priv\G 一检查用户表权限列
mysql>select * from mysql.columns_privi\G -检查列权限列管理员
输出的权限列是否与管理员制定的访问控制策略及规则一致
3. 登录不同的用户,验证是否存在越权访问的情形
结果判定
如果由专门的安全员负责对访问控制权限的授权工作,各账户权限配置均是基于安全员的安全策略配置进行的访问控制,不存在越权访问的情况下,则判定为符合。
结果记录
记录输出的权限列与管理员制定的访问控制策略及规则。
整改方法
修改使输出的权限列与管理员制定的访问控制策略及规则一致。
f )
访问控制的粒度应达到主体为用户级或进程级,客体为文件、数据库表级;
检查方法
(1)执行下列语句:
mysql>select * from mysql.user\G -检查用户权限列
mysql>select * from mysql.db\G --检查数据库权限列
(2)访谈管理员并核查访问控制粒度主体是否为用户级,客体是否为数据库表级
结果判定
(1)(2)由专门的安全员负责对访问控制权限的授权工作,授权主体为用户,客体为数据库表。
结果记录
记录用户权限。
整改方法
需要用户单独对数据库表设置权限(视图、存储过程也可以)。
g)
应对重要主体和客体设置安全标记,并控制主体对有安全标记信息资源的访问。
检查方法
mysql默认没有提供该项功能,该项不适用;
访谈管理员,是否采用其他技术手段实现安全标记。
结果判定
如果数据库管理员采取了相应措施设置安全标记,则该项符合要求。
结果记录
记录设置安全标记的措施。
整改方法
通过第三方软件来实现此功能。
Part
3
安全审计
a)
审计范围应覆盖到服务器和重要客户端上的每个操作系统用户和数据库用户;
检查方法
输入命令 show variables like'%log%';查看是否开启审计功能,用不同的用户登录数据库并进行不同操作,在mysql数据库中查看日志记录,询问管理员是否采用第三方工具或其他措施增强mysql日志功能。
结果判定
如果审核范围能够覆盖到每个数据库用户,则该项符合。
mysql5.5版本,有四种日志:
log, log_bin, log_error, log_slow_queries
mysql5.7版本,有四种日志:
通用日志general_log, 二进制日志log_bin, 错误日志log_error, 慢日志slow_query_log
结果记录
记录审计功能是否开启,log, log_bin, log_slow_queries的值。或general_log, log_bin,log_error和slow_query_log的值。
整改方法
在mysql5.5版本中
set global log=on;
在mysql5.7版本中
在配置log_bin值时遇到错误Variable 'log_bin' is a read only variable
在my.ini配置中添加(linux为/etc/my.cnf)
server-id=1
log-bin=mysql-bin
b)
审计记录应包括事件的日期和时间,用户、事件类型,事件是否成功及其他与审计相关的信息;
检查方法
输入命令 show variables like'log%';查看是否开启审计功能,询问管理员是否采用第三方工具或其他措施增强mysql日志功能。
结果判定
如果审计内容包括重要用户行为、系统资源的异常使用和重要系统命令的使用等系统内重要的安全相关事件,则该项符合。
结果记录
记录审计功能是否开启,log,log_bin,log_slow_queries的值。
整改方法
方法同a)。
c)
应对审计记录进行保护,定期备份,避免受到未预期的删除、修改或覆盖等;
检查方法
以普通用户进入mysql数据库系统,查看能否对日志进行非授权的操作,询问管理员,对mysql的日志记录文件采取的保护措施。采取了备份、转存等手段对审计记录进行保护,避免未预期的删除、修改或覆盖,数据库本地日志保存时间超过6个月。
结果判定
如果日志记录无法保存超过6个月,不符合。
结果记录
记录保存日志的方式和保存时间。
整改方法
通过将审计日志定期备份至日志服务器或移动储存设备中来实现。
d)
应保护审计进程,避免受到未预期的中断。
检查方法
以非授权用户登录数据库系统,试图改变审计配置选项,查看是否成功,如果成功了,进行一些操作,查看日志中是否有上述操作的记录。
结果判定
对于Mysql数据库系统默认符合,如果非授权用户不能中断审计进程,则该项符合。
结果记录
记录非授权用户改变审计选项是否成功。
整改方法
下载mariadb插件,进行日志备份:
https://downloads.mariadb.org/mariadb/5.5/
下载方法:
http://blog.itpub.net/31441024/viewspace-2213103/
Part
4
入侵防范
a)
检查方法
select user,host from mysql.user;查看用户登录的host主机。
结果判定
结果记录
记录user表的host值。
整改方法
更改host值,设定终端接入方式
update user set host = '%' where user = 'root';
b)
应能发现可能存在的已知漏洞,并在经过充分测试评估后,及时修补漏洞。
检查方法
(1)执行如下命令查看当前版本:
show variables where variable_name like "version";或者status
(2)访谈数据库是否为企业版,是否定期进行漏洞扫描,针对高风险漏洞是否评估补丁并经测试后再进行安装。
结果判定
记录数据库版本。
结果记录
(1)数据库当前不存在高风险漏洞,补丁更新及时,记录补丁信息为:MySQL数据库补丁定期更新版本。
(2)数据库为企业版,定期进行漏洞扫描,在发现数据库漏洞时,必须经测试评估后进行漏洞修补。
整改方法
对存在的高危漏洞进行修复。
Part
4
数据备份恢复
a)
应提供重要数据处理系统的热冗余,保证系统的高可用性;
检查方法
询问系统管理员数据库的备份和恢复策略是什么。
结果判定
若有对数据库重要数据每天增量备份,每周全量备份,则为符合。
结果记录
记录数据库备份的方式和频率。
整改方法
利用mysqldmp进行数据备份,在bin目录下执行
mysqldump -h localhost -u root -p -A(全部数据库)/test(单个数据库)> xx.sql
b)
应提供异地实时备份功能,利用通信网络将重要数据实时备份至备份场地。
检查方法
(1)询问系统管理员是否提供异地数据备份功能,是否定时批量传送至备用场地。
(2)如果条件允许,则查看其实现技术措施的配置情况。
结果判定
查看是否有数据备份机房或者其他异地备份的场所且定期备份,若有则符合。
结果记录
部署数据备份机房:有异地备份机房,实时(定期)将数据备份到机房。
整改方法
部署数据备份机房:有异地备份机房,实时(定期)将数据备份到机房。
参考资料:
《信息安全技术网络安全等级保护基本要求》—GB/T 22239—2019
声明:Forest Team拥有该文章的修改和解释权。如欲引用、转载或传播此文章,必须包括版权声明等全部内容。未经Forest Team允许,不得任意修改或删减文章内容,不得以任何方式将其用于商业目的。
介绍
歼剿漏洞风险,刻录安全密码。