身份鉴别
a)应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换;
测评方法:
- 使用如下命令查询账号
select user,host,password from mysql.user;
// 输出用户列表,查者是否存在相同用户名
- 执行如下语句查询是否在空口令用:
select * from mysql.user where length(password)=0 or password is null;
// 输出结果是否为空
- (针对5.6.6之后版本)执行如下语句查看用户口今复杂度相关配置:
show variables like 'validate_password%';
注:MySQL过低版本不能进行密码复杂度配置,则关注当前口令复杂度策略,有些MySQL数据库password字段无效,需要替换为authentication_string
- 应对登录的用户进行身份标识和鉴别:MySQL身份鉴别通过username+host+password来进行登录验证,鉴别因素三者不能同时为空;
- 实际口令组成情况和更换情况;MySQL口令复杂度策略配置(需使用validate_password插件):
validate_password_check_user_name
:OFF
validate_password_dictionary_file
: 字典文件
validate_password_length
:8 密码长度
validate_password_mixed_case_count
:1 大小写
validate_password_number_count
:1 密码中数据长度
validate_password_policy
:1 or MEDIUM
validate_password_special_char_count
:1 特殊字符 - 定期更换:
看实际口令更换周期,访谈,或查看user
表中password_last_changed
字段;
MySQL5.6.6开始,
user
表多了一个password_expired
字段,默认为N
,设置为Y
后,则通过定时器任务等方式来改密码;
从5.7.4版本开始,MySQL多了一个全局变量default_password_lifetime
,可执行
select global variables like 'default_password_lifetime';
查看,并且user
表增加了两个字段:password_lifetime
、password_last_changed
,可执行:
select user,host,password,password_last_changed,password_expired from mysql.user;
查看。对于default_password_lifetime
和password_lifetime
而言,值为0则代表有效期为永远,单位为天。
b)应具有登录失败处理功能,应配置并启用结束会话、限制非法登录次数和当登录连接超时自动退出等相关措施;
测评方法:
- 登录失败:执行
show variables like '%max_connect_errors%';
// 查看max_connect_errors = 100;
show variables like '%timeout%';
//返回值Wait_timeout=28800(秒)。
- 登录失败:可以使用插件connection_control和connection_control_failed_login_attempts共同实现。
使用下列语句查询插件:show plugins;或
select plugin_name,plugin_status from information_schema.plugins where plugin_name like 'connection%';
相关参数如下:(事件毫秒)
connection_control_failed_connections_threshold
:3
connection_control_min_connection_delay
:1000
connection_control_max_connection_delay
:108000
前三次失败没延迟,第四次失败1000毫秒延迟,第五次2000直到最大延迟108000
注:MYSQL数据库要配置登录失败处理功能需要安装插件,默认是无此功能,不符合
c)当进行远程管理时,应采取必要措施防止鉴别信息在网络传输过程中被窃听;
测评方法:
询问核查通过什么管理工具连接数据库,查询此连接工具是否具备远程连接加密措施
注;MySQL自己支持使用ssl协议对连接进行加密,相关参数有have_openssl
、have_ssl
,执行
show global variables like '%ssl%';
为YES则代表数据库支持SSL连接。
如果某连接使用了SSL,使用status可以查看到,使用SSL需要运行mysql_ssl_rsa_setup
d)应采用口令、密码技术、生物技术等两种或两种以上组合的鉴别技术对用户进行身份鉴别,且其中一种鉴别技术至少应使用密码技术来实现。
测评方法:
询问并核查是否采用双因子登录数据库,且其中一种属于密码技术
注:通常情况下都是用户名+口令,且数据库层面实现双因子登录比较困难,目前好像只有用户名+口令+Ukey可以实现
访问控制
a)应对登录的用户分配账户和权限
测评方法:
执行语句
select user,host from mysql.user
询问数据库管理员各个账户的作用与权限,输出结果是否与实际人员相符
注:此项基本上时默认符合,因为至少有个root用户存在
b)应重命名或删除默认账户,修改默认账户的默认口令;
测评方法:
查看root账户是否重命名和修改默认口令
注:默认账户root可以修改,若因为业务原因不方便修改,则应该使用强口令
c)应及时删除或停用多余的、过期的账户,避免共享账户的存在;
测评方法:
查看user表再访谈管理员表中用户与现实是否做到一一对应,且无共用,多余,过期的账户
d)应授予管理用户所需的最小权限,实现管理用户的权限分离;
测评方法:
- 先根据用户方实际人员情况核查是否具备不同管理员
- 使用命令
select Host,User,File_priv,Shutdown_priv,grant_priv from user;
查看各管理员账户权限设置是否与实际情况对应
注:此项至少要包括系统管理员和审计管理员才能算符合
e)应由授权主体配置访问控制策略,访问控制策略规定主体对客体的访问规则;
测评方法:
- 访谈管理员是否制定了访问控制策略
- 执行语句:
mysql>selcec * from mysql.user\G //检查用户权限列表
mysql>selcec * from mysql.db\G //检查数据库权限列表
mysql>selcec * from mysql.tables_priv\G //检查用户表权限列表
输出的权限列是是否与管理员制定的访问控制策略及规则一致
- 登录不同的用户,验证是否存在越权访问的情形
注:通常情况下是由系统管理员来配置策略,基本上算默认符合
f)访问控制的粒度应达到主体为用户级或进程级,客体为文件、数据库表级;
测评方法:
此项主要检查访问的主体和客体是什么级别的
注:通常情况下数据库层面主体为用户及,客体为数据库表级
安全审计
a)应启用安全审计功能,审计覆盖到每个用户,对重要的用户行为和重要安全事件进行审计;
测评方法:
- 执行下列语句:
show variables like 'log_%';
// 查看二进制日志、慢查询日志、错误日志、操作日志是否开启
- 核查是否采取第三方工具增强MySQL日志功能。若有,记录第三方审计工具的审计内容,查看是否包括事件的日期和时间、用户、事件类型、事件是否成功及其他与审计相关的信息
show global variables like '%general%';
//值为OFF或0表示未开启
b)审计记录应包括事件的日期和时间、用户、事件类型、事件是否成功及其他与审计相关的信息;
测评方法:
- 执行下列语句:
mysql>show master status; //查看当前日志
根据日志存放路径,查看输出的日志内容
- 核查是否采取第三方工具增强MySQL日志功能。若有,记录第三方审计工具的审计内容,查看是否包括事件的日期和时间、用户、事件类型、事件是否成功及其他与审计相关的信息
注:只要开启了审计功能,此项默认符合
c)应对审计记录进行保护,定期备份,避免受到未预期的删除、修改或覆盖等;
测评方法:
询问管理员是否对审计记录保护并定期备份,备份在哪里,并且日志记录保存时间是否大于6个月
d)应对审计进程进行保护,防止未经授权的中断。
测评方法:
切换开放状态的账户(非root账户)进行测试,看能否中断审计、日志服务:
可信验证
a)可基于可信根对计算设备的系统引导程序、系统程序、重要配置参数和应用程序等进行可信验证,并在应用程序的关键执行环节进行动态可信验证,在检测到其可信性受到破坏后进行报警,并将验证结果形成审计记录送至安全管理中心。
测评方法:
数据库未涉及可信技术的使用,故不适用
数据完整性
a)应采用校验技术或密码技术保证重要数据在传输过程中的完整性,包括但不限于鉴别数据、重要业务数据、重要审计数据、重要配置数据、重要视频数据和重要个人信息等;
测评方法:
若数据库只涉及鉴别信息,则按照身份鉴别c项来写,其他数据绝大多数情况考虑不适用由应用层面负责
b)应采用校验技术或密码技术保证重要数据在存储过程中的完整性,包括但不限于鉴别数据、重要业务数据、重要审计数据、重要配置数据、重要视频数据和重要个人信息等。
测评方法:
如果数据保密性满足要求则完整性也满足要求,可以根据数据保密性b)来写
数据保密性
a)应采用密码技术保证重要数据在传输过程中的保密性,包括但不限于鉴别数据、重要业务数据和重要个人信息等;
测评方法:
数据库只涉及了身份鉴别,看身份鉴别c项
b)应采用密码技术保证重要数据在存储过程中的保密性,包括但不限于鉴别数据、重要业务数据和重要个人信息等。
测评方法:
主要查看鉴别信息根据数据库采用了什么加密方式,至于其他重要数据根据现场查看情况来定
数据备份恢复
a)应提供重要数据的本地数据备份与恢复功能;
测评方法:
主要询问管理员是否对数据库进行本地备份,并且是否做过恢复性测试
b)应提供异地实时备份功能,利用通信网络将重要数据实时备份至备份场地;
测评方法:
主要询问管理员是否做了异地实时备份,具体备份在哪里,保存时间
注:此项要注意实时,往往业主做了异地备份,但不是实时,也只能算部分符合
c)应提供重要数据处理系统的热冗余,保证系统的高可用性。
测评方法:
询问管理员是否对数据库采用热冗余方式部署
注:需要注意一定要是重要数据存在的数据库,可根据现场具体情况和业务判断
剩余信息保护
a)应保证鉴别信息所在的存储空间被释放或重新分配前得到完全清除;
测评方法:
mysql数据库自身能够保证鉴别信息所在的存储空间被释放或重新分配前得到完全清除
b)应保证存有敏感数据的存储空间被释放或重新分配前得到完全清除
测评方法:
mysql数据库自身能够保证存有敏感数据的存储空间被释放或重新分配前得到完全清除
个人信息保护
a)应仅采集和保存业务必需的用户个人信息;
测评方法:
数据库不涉及对个人信息的采集,此项在应用层面进行判定
b)应禁止未授权访问和非法使用用户个人信息。
测评方法:
数据库不涉及对个人信息的采集,此项在应用层面进行判定