等保2.0测评安全计算环境GaussdDB过程指南(华为高斯数据库)
2022-1-12 18:7:1 Author: www.freebuf.com(查看原文) 阅读量:54 收藏

是在测评某集团的等保项目时遇到的,是一整套华为的私有化部署,他们的数据库还是阉割过的,和华为的人联系了很多次才完成了数据库的测评QAQ。本次测评的对象为私有云平台,部分记录需要按照现场实际情况来判断。

版本查询

su - gaussdba

gaussdb --version

登录/连接Gaussdb数据库的方法

以下为登录/连接Gaussdb数据库的方法

(1)登录首节点并切换至root用户

(2)导入环境变量

(3)执行cps template-instance-list --service gaussdb gaussdb命令查看gaussdb部署节点

(4)登录gaussdb主节点,即上一步status为“active”的节点,切换至root用户

(5)执行su - gaussdba切换至gaussdba用户

(6)执行gsql -d postgres -U <username>连接数据库

例如,执行gsql -d postgres -U gaussdba,以gaussdba用户登录数据库

(7)输入当前用户的密码,完成登录(默认密码可查看账户一览表)

身份鉴别

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

(1)连接数据库时,需要进行身份鉴别,如果密码错误,提示“Invalid username/password,login denied.”

检查方法:

例如,使用gaussdba账户连接数据库,输入错误的密码,提示“Invalid username/password,login denied.”

(2)执行select * from pg_user;命令,列出所有用户,USESYSID字段表示用户的ID,该值唯一,表明用户身份标识具有唯一性。

检查方法:

登录gaussdb主节点,切换至root用户,执行su - gaussdba切换用户,执行gsql -d postgres连接数据库,输入gaussdba用户的密码,连接成功之后,执行select * from pg_user;命令,列出所有用户,USESYSID字段表示用户的ID,该值唯一,表明用户身份标识具有唯一性。

(3)查看账户一览表,gaussdb所有账户都有默认密码。连接数据库时,需要输入密码,表明用户默认口令不为空。

检查方法:

依次使用gaussdba、select_user、openstack账户连接数据库,都需要输入密码,说明账户的口令不为空。

(4)Gaussdb的账户是机机账户,机机账户的密码永不过期,不要求用户周期性的修改账户密码。修改机机账户的密码,可能导致业务中断,因此,建议保持默认密码。这条是华为人说的。

若需要修改默认密码,请按照账户一览表进行操作。

(5)产品文档中,有关于密码复杂度的要求。修改密码时,输入不符合密码复杂度要求的密码提示不满足密码复杂度要求,修改密码的方法可查看账户一览表

(注意:修改密码属于高危操作,请谨慎操作)。

检查方法:

修改密码时,输入不符合密码复杂度要求的密码提示不满足密码复杂度要求。

导入环境变量,然后执行PasswordManager

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

防暴力破解机制

(1)登录失败锁定账户

登录gaussdb主节点,执行cps template-params-show --service gaussdb gaussdb查看,默认配置连续输错密码3次,账户锁定300秒。

(2)超时自动退出

默认置超时1800秒自动断开连接。登录gaussdb主节点,连接数据库之后,1800秒无操作,会自动断开。

登录首节点切换至root用户,执行su - gaussdba切换用户,执行gsql -d postgres连接数据库,输入gaussdba用户的密码,连接成功之后,再执行\set查看。

c.当进行远程管理时,应采取必要措施防止鉴别信息在网络传输过程中被窃听

GaussDB支持通过SSL加密客户端和服务器之间、主机和备机之间的通讯。SSL通讯使用的加密算法为XXX(以实际查询为准)。

检查方法:

(1)查看传输协议

登录首节点切换至root用户,导入环境变量,执行cps template-instance-list --service gaussdb gaussdb命令查看gaussdb部署节点

登录gaussdb主节点,切换至root用户,导入环境变量,执行cps template-params-show --service gaussdb gaussdb命令查看传输协议,采用TLS1.2。

(2)查看加密算法

进入/opt/fusionplatform/data/gaussdb_data/data目录,查看相应配置

cat postgresql.conf | grep ssl_ciphers

d.应采用口令、密码技术、生物技术等两种或两种以上组合的鉴别技术对用户进行身份鉴别,且其中一种鉴别技术至少应使用密码技术来实现

仅支持机机后台登录,无页面登录方式,采用用户名+口令方式鉴别身份,无其他鉴别技术。

访问控制

a.应对登录的用户分配账户和权限

数据库用户分为管理员用户(gaussdba)、业务用户(Openstack)和业务用户(Select_user)。不同的账户权限不同。

gaussdba: GaussDB数据库管理员帐户,可用于登录数据库执行相关运维操作。

openstack: GaussDB数据库业务帐户

select_user: GaussDB数据库业务帐户

检查方法:

(1)登录首节点切换至root用户,执行su - gaussdba切换用户,执行gsql -d postgres连接数据库,输入gaussdba用户的密码,连接成功之后,执行select * from pg_user;命令,查看所有用户

(2)执行select * from information_schema.routine_privileges where grantee='user_name';命令查询user_name用户所拥有的权限,user_name替换成实际的用户名,并采用全大写字母。

例如,执行select * from information_schema.routine_privileges where grantee='GAUSSDBA'; 查看GAUSSDBA的权限。

b.应重命名或删除默认账户,修改默认账户的默认口令

默认账户的默认口令已经修改

检查方法:

(1)登录数据库之后,执行select ROLNAME from  pg_authid where oid=10;命令,查看默认用户。

(2)在账户一览表中查看默认账户及其密码。

c.应及时删除或停用多余的、过期的账户,避免共享账户的存在

只存在如下几个用户,不存在多余的、过期的账户,不存在共享账户。

gaussdba: GaussDB数据库管理员帐户,可用于登录数据库执行相关运维操作。

openstack: GaussDB数据库业务帐户

select_user: GaussDB数据库业务帐户

检查方法:

(1)登录数据库之后,执行select * from pg_user;命令,查看所有用户。

(2)查看账户一览表,查看gaussdb的所有账户,不存在多余的账户,不存在共享账户,gaussdb相关的所有账户都是机机账户,永不过期。

d.应授予管理用户所需的最小权限,实现管理用户的权限分离

数据库用户分为管理员用户(gaussdba)、业务用户(Openstack)和业务用户(Select_user)。分别为用户分配了相应的权限,都是业务所需的最小权限。

检查方法:

(1) 登录数据库之后,执行\du <username>命令,查看当前用户的权限

例如,执行\du GAUSSDBA查看gaussdba用户的权限。

(2)或者执行\du查看所有用户的权限

e.应由授权主体配置访问控制策略,访问控制策略规定主体对客体的访问规则

数据库data目录权限最大为0700,只允许数据库用户访问文件,其它用户不能访问

检查方法:

进入数据库目录查看文件权限

登录首节点后台,切换root之后,执行su - gaussdba切换gaussdba用户,执行cd $GAUSSDATA进入gaussdb的data目录,然后查看权限。

f.访问控制的粒度应达到主体为用户级或进程级,客体为文件、数据库表级

数据库data目录权限最大为0700,只允许数据库用户访问文件,其它用户不能访问

检查方法:

进入数据库目录查看文件权限

登录首节点后台,切换root之后,执行su - gaussdba切换gaussdba用户,执行cd $GAUSSDATA进入gaussdb的data目录,然后查看权限。

g.应对重要主体和客体设置安全标记,并控制主体对有安全标记信息资源的访问

安全审计

a.应启用安全审计功能,审计覆盖到每个用户,对重要的用户行为和重要安全事件进行审计

已经开启审计功能

检查方法:

登录数据库之后,执行show audit_enabled;命令查看,ON表示已经开启审计功能

b.审计记录应包括事件的日期和时间、用户、事件类型、事件是否成功及其他与审计相关的信息

审计日志信息包时间(Time)、类型(Type)、结果(Result)\用户(User)、数据库(DATABASE)、客户端信息(CLIENT_CONNINFO)、审计对象(OBJECT_NAME)以及详细语句(DETAIL_INFO),对于删除用户/表/库等高危操作,会进行审计记录。

检查方法:

Gaussdb的日志目录为/var/log/fusionsphere/component/gaussdb,可以进入该目录下查看日志审计记录。

也可以以gaussdba用户登录数据库之后,执行select * from pg_query_audit('2020-09-04 08:00:00','2020-09-10 23:59:59');命令,查看审计文件(时间需改为需要查询的审计日志的起始时间)。

c.应对审计记录进行保护,定期备份,避免受到未预期的删除、修改或覆盖等

审计日志是二进制文件,只能具有审计权限的数据库用户登陆数据库查看,通过函数pg_query_audit查看。

检查方法一:

系统中的文件都有访问权限控制,只有合法的用户才可以访问,gaussdb审计日志见Openstack主机节点/var/log/fusionsphere/component/gaussdb目录,查看该目录下文件的权限,文件权限符合要求。

检查方法二:

(1)用gaussdba用户登录数据库之后,执行select * from pg_query_audit('2020-09-04 08:00:00','2020-09-10 23:59:59');命令,查看审计文件(时间需改为需要查询的审计日志的起始时间)。结果如下图,查询成功。

(2)用openstack用户登录数据库之后,执行select * from pg_query_audit('2020-09-04 08:00:00','2020-09-10 23:59:59');命令,查看审计文件(时间需改为需要查询的审计日志的起始时间)。结果如下图,没有权限,提示“ERROR:  permission denied to query audit”。

d.应对审计进程进行保护,防止未经授权的中断

审计进程是数据库的子进程,异常终止后,会由主进程进行拉起

检查方法:

登录首节点后台,切换root之后,导入环境变量,执行cps template-instance-list --service gaussdb gaussdb命令查看gaussdb部署的主节点,即status为active的节点

登录gaussdb主节点,切换root之后,执行ps -ef | grep gaussdba | grep -v idle命令查看gaussdb的auditor process,即审计进程;然后,执行kill -9 <进程号>杀掉当前的审计进程,等待几秒,再次执行ps -ef | grep gaussdba | grep -v idle命令查看auditor process进程已经自动拉起。(注意:kill进程是高危操作,不要在现网环境执行)

入侵防范

a.应遵循最小安装的原则,仅安装需要的组件和应用程序

默认遵循最小化安装原则,需现场询问

c.应通过设定终端接入方式或网络地址范围对通过网络进行管理的管理终端进行限制

数据库连接通过pg_hba.conf白名单控制连接的IP/数据库名/用户

检查方法:

登录首节点后台,切换root之后,执行su - gaussdba切换gaussdba用户,执行cd $GAUSSDATA进入gaussdb的data目录,然后查看pg_hba.conf文件的配置。

e.应能发现可能存在的已知漏洞,并在经过充分测试评估后,及时修补漏洞

产品会及时修复漏洞并发布补丁,需要现场询问是否定期更新

数据完整性

a.应采用校验技术或密码技术保证重要数据在传输过程中的完整性,包括但不限于鉴别数据、重要业务数据、重要审计数据、重要配置数据、重要视频数据和重要个人信息等

GaussDB支持通过SSL加密客户端和服务器之间、主机和备机之间的通讯。SSL通讯使用的加密算法为XXX(以实际查询为准)。

检查方法:

(1)查看传输协议

登录首节点切换至root用户,导入环境变量,执行cps template-instance-list --service gaussdb gaussdb命令查看gaussdb部署节点

登录gaussdb主节点,切换至root用户,导入环境变量,执行cps template-params-show --service gaussdb gaussdb命令查看传输协议,采用TLS1.2。

(2)查看SSL加密算法

进入/opt/fusionplatform/data/gaussdb_data/data目录,查看相应配置

cat postgresql.conf | grep ssl_ciphers

b.应采用校验技术或密码技术保证重要数据在存储过程中的完整性,包括但不限于鉴别数据、重要业务数据、重要审计数据、重要配置数据、重要视频数据和重要个人信息等

加密存储

重要数据加密存储,例如,账户密码存储时,采用pbkdf2-sha512加密。

数据保密性

a.应采用密码技术保证重要数据在传输过程中的保密性,包括但不限于鉴别数据、重要业务数据和重要个人信息等

GaussDB支持通过SSL加密客户端和服务器之间、主机和备机之间的通讯。SSL通讯使用的加密算法为XXX(以实际查询为准)。

检查方法:

(1)查看传输协议

登录首节点切换至root用户,导入环境变量,执行cps template-instance-list --service gaussdb gaussdb命令查看gaussdb部署节点

登录gaussdb主节点,切换至root用户,导入环境变量,执行cps template-params-show --service gaussdb gaussdb命令查看传输协议,采用TLS1.2。

(2)查看SSL加密算法

进入/opt/fusionplatform/data/gaussdb_data/data目录,查看相应配置

cat postgresql.conf | grep ssl_ciphers

b.应采用密码技术保证重要数据在存储过程中的保密性,包括但不限于鉴别数据、重要业务数据和重要个人信息等

加密存储

重要数据加密存储,例如,账户密码存储时,采用pbkdf2-sha512加密。

数据备份恢复

a.应提供重要数据的本地数据备份与恢复功能

GaussDB采用了主备双机方案,能在很大程度上保证数据库服务的可用性和数据的安全性。此外,系统默认每天凌晨03:00定时备份GaussDB数据库,也可以手动执行命令触发备份。备份策略支持重新配置,具体可查看产品文档。

检查方法:

登录首节点首节点,切换至root用户,导入环境变量,执行backup policy-get查看备份策略,执行backup package-get --service gaussdb查看备份结果。

b.应提供异地实时备份功能,利用通信网络将重要数据实时备份至备份场地

支持异地配置,但需手工配置异地备份服务器,产品文档中提供了配置第三方备份服务器的方法,实际需要现场询问是否具备异地机房

c.应提供重要数据处理系统的热冗余,保证系统的高可用性

数据库采用主备模式部署

检查方法:

登录首节点,切换至root用户,导入环境变量,执行cps template-instance-list --service gaussdb gaussdb命令查看部署模式。查询结果中,状态为“active”的节点为主节点,状态为“standby”的节点为备节点。

剩余信息保护

a.应保证鉴别信息所在的存储空间被释放或重新分配前得到完全清除

存储空间删除时会进行格式化清除


文章来源: https://www.freebuf.com/articles/compliance/317752.html
如有侵权请联系:admin#unsafe.sh