0x01 前言
本次测试环境为开发版(X86平台),主要为了探索开发出平时工作安全测评达梦数据库或加固达梦数据库时所需要命令,为测评人员以及加固人员提供参考,如有错误还望指出。
0x02 达梦数据库之安全计算环境
Windows 环境下,有两种启动 DIsql 的方式。第一种是启动安装软件后生成的程序菜单提供图形化界面,第二种是启动安装目录下自带的 DIsql 工具(\dmdbms\bin\DIsql.exe)。
Linux环境下,第一种使用/opt/dmdbms/bin下的dissql进行连接,第二种,需要开启图形化界面,进入达梦数据库软件安装目录下的tool目录,执行./manager命令启动DM管理工具。
版本查询(建议通过DM图形化界面管理工具查询看起来结果展示比较有规律一些):
SQL> select * from V$version;
身份鉴别
a)应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换;
1)应核查用户在登录时是否采用了身份鉴别措施;
使用DM管理工具进行登录时提供了四种身份验证方式,四种身份鉴别方式均需要提供登录口令,如图:
2)应核查用户列表确认用户身份标识是否具有唯一性;
无法创建同名账户,一般默认符合;
3)应核查用户配置信息或测试验证是否不存在空口令用户;
使用SYSDBA查看用户表发现所有账户password字段均为NULL,通过网上查询似乎是数据库为了安全性隐藏了这些信息。在配置向导中可以配置SYSDBA用户口令为空(但是仅能通过DIsql.exe空口令登录),使用SYSDBA创建其他普通账户时强制要求了口令,其他管理账户默认均有口令,建议手动测试账户是否配置了登录口令。
查看用户以及口令信息:
SELECT USERNAME, PASSWORD FROM DBA_USERS;
4)应核查用户鉴别信息是否具有复杂度要求并定期更换。
口令策略:
除了在创建用户语句中指定该用户的口令策略,DM 的 INI 参数 PWD_POLICY 可以指定系统的默认口令策略,缺省值为 2。
SELECT * FROM V$PARAMETER WHERE NAME= 'PWD_POLICY';
PWD_POLICY
参数的缺省值为2
,具体含义如下:
PWD_POLICY = 0:不启用任何密码策略。
PWD_POLICY = 1:启用基本密码策略,如最小长度、字符类型组合等。
PWD_POLICY = 2:启用强化密码策略,要求密码必须包含字母、数字、特殊字符,且长度必须大于8位。
使用自带的DM 控制台工具查看(开发版没查出来):
登录超时:使用自带的DM管理工具,SYSDBA登录后查看用户,点击用户属性,在DLL中查看口令有效期“password_life_time”的值。
b)应具有登录失败处理功能,应配置并启用结束会话、限制非法登录次数和当登录连 接超时自动退出等相关措施。
1)应核查是否配晋并启用了登录失败处理功能;
参数解释:
PASSWORD_LOCK_TIME
:锁定账户的时间,默认值为1,系统预设管理员用户默认无限制。FAILED_LOGIN_ATTEMPTS
:允许的失败登录尝试次数,默认值为3,系统预设管理员用户默认无限制。
登录失败命令行查询:
select
b.username as "达梦数据库用户名",
a.failed_num as "失败次数限制",
a.failed_attemps as "失败尝试次数",
a.lock_time as "锁定时间(min)"
from sysusers a right join all_users b on a.id=b.user_id;
2)应核查是否配置并启用了限制非法登录功能,非法登录达到一定次数后采取特定动作,如账户锁定等;
同上第一小点
3)应核查是否配置并启用了登录连接超时及自动退出功能;
参数解释:
CONNECT_TIME
:会话连接的总时长限制,默认无限制。CONNECT_IDLE_TIME
:会话空闲状态的时长限制,默认无限制。
登录超时命令行查询:
SELECT PROFILE, RESOURCE_NAME, LIMIT
FROM DBA_PROFILES
WHERE RESOURCE_NAME IN ('CONNECT_TIME', 'CONNECT_IDLE_TIME');
c)当进行远程管理时,应采取必要措施防止鉴别信息在网络传输过程中被窃听;
DM 提供两种通信加密方式:一基于传输层的 SSL 协议加密;二基于应用层的消息包加密。当未采用通信加密时,为了提高安全性,数据库系统自动对登录消息中的用户名密码使用内部算法进行了简单的加解密操作。
详情查阅:https://eco.dameng.com/document/dm/zh-cn/pm/communication-encryption.html
d)应采用口令、密码技术、生物技术等两种或两种以上组合的鉴别技术对用户进行身份鉴别,且其中一种鉴别技术至少应使用密码技术来实现。
通过访谈以及验证,确认是否采用了其他的身份鉴别技术。
访问控制
a)应对登录的用户分配账户和权限;
1)应核查是否为分配了账户和权限及相关设置情况;
查看所有用户:
SELECT USERNAME FROM DBA_USERS;
查看系统权限:
SELECT * FROM DBA_SYS_PRIVS ORDER BY GRANTEE; //所有用户
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = 'SYSDBA'; //单个用户
查看对象权限:
SELECT * FROM DBA_TAB_PRIVS ORDER BY GRANTEE; //所有用户
SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE='SYSDBA'; //单个用户
注:
系统权限:指用户在整个数据库系统层面上的权限,允许用户执行特定的系统级操作,如:
CREATE SESSION:允许用户连接到数据库。
CREATE TABLE:允许用户创建表。
ALTER USER:允许用户修改其他用户的属性。
DROP ANY TABLE:允许用户删除任何表。
DBA:数据库管理员权限,几乎所有操作都可以执行。
对象权限:指用户对特定数据库对象(如表、视图、序列等)上的权限,如:
SELECT:允许用户查询(选择)数据。
INSERT:允许用户插入数据。
UPDATE:允许用户更新数据。
DELETE:允许用户删除数据。
EXECUTE:允许用户执行存储过程或函数。
REFERENCES:允许用户创建外键引用。
详情可查阅:https://eco.dameng.com/document/dm/zh-cn/pm/discretionary-access-control.html#3.3
2)应核查是否已禁用或限制匿名、默认账户的访问权限。
DM 数据库默认按照三权分立的机制进行权限划分,另外可以通过 SYSSSO 安全员账户设置安全标记限制SYSDBA的访问权限,添加标记后DBA 此后就不能直接访问添加有安全标记的数据限制,默认无(非安全版本SYSSSO账户无法登录)。
b)应重命名或删除默认账户,修改默认账户的默认口令;
1)应核查是否已经重命名默认账户或默认账户已被删除;
2)应核查是否已修改默认账户的默认口令。
用户名和密码:DM 数据库会预设数据库管理员账号 SYSDBA、数据库安全员账号 SYSSSO 和数据库审计员账号 SYSAUDITOR,其缺省口令都与用户名一致。若为DM 安全版本提供“四权分立”安全机制,新增数据库对象操作员账户 SYSDBO,其缺省口令为 SYSDBO。
c)应及时删除或停用多余的、过期的账户,避免共享账户的存在;
1)应核查是否不存在多余或过期账户,管理员用户与账户之间是否一一对应;
2)应测试验证多余的、过期的账户是否被删除或停用。
查看所有账户,访谈管理员:
SELECT USERNAME FROM DBA_USERS;
d)应授予管理用户所需的最小权限,实现管理用户的权限分离;
1)应核查是否进行角色划分;
2)应核查管理用户的权限是否已进行分离;
3)应核查管理用户权限是否为其工作任务所需的最小权限。
DM 数据库会预设数据库管理员账号 SYSDBA、数据库安全员账号 SYSSSO 和数据库审计员账号 SYSAUDITOR。若为DM 安全版本提供“四权分立”安全机制,新增数据库对象操作员账户 SYSDBO。默认已对账户进行了管理账户的权限分离,如:系统管理员无权限管理安全审计相关配置等。
e)应由授权主体配置访问控制策略,访问控制策略规定主体对客体的访问规则;
1)应核查是否由授权主体(如管理用户)负责配置访问控制策略;
2)应核查授权主体是否依据安全策略配登了主体对客体的访问规则;
3)应测试验证用户是否有可越权访问情形。
访谈管理员是否制定数据库的访问控制策略,并通过专门的管理员账户(授权主体一般为数据库管理员客体为表、库)进行配置访问控制策略。
使用命令查看账号对象权限:
SELECT * FROM DBA_TAB_PRIVS ORDER BY GRANTEE; //所有用户
SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE = 'TEST_USER'; //单个用户
f)访问控制的粒度应达到主体为用户级或进程级,客体为文件、数据库表级;
DM 支持对数据库中的表、视图、索引等对象扩展客体标记,一旦一个对象被应用了扩展客体标记,则用户只有在支配相应标记的情况下,才能访问客体。
g)应对重要主体和客体设置安全标记,并控制主体对有安全标记信息资源的访问。
1)应核查是否对主体、客体设置了安全标记;
2)应测试验证是否依据主体、客体安全标记控制主体对客体访问的强制访问控制策略。
DM数据库支持自主访问控制以及强制访问控制,在强制访问控制中,系统给主体和客体都分配一个特殊的安全标记,主体的安全标记反映了该主体可信的程度,客体的安全标记则与其包含信息的敏感度一致,且主体不能改变他自己及任何其它客体的安全标记,主体是否可以对客体执行特定的操作取决于主体和客体的安全标记之间的支配关系。
强制访问控制功能仅在 DM 安全版中提供,DM 中与强制访问控制相关的数据字典表,只有具有 SSO 类型的用户才能查询。
详情查阅:https://eco.dameng.com/document/dm/zh-cn/pm/mandatory-access-control.html
安全审计
a)应启用安全审计功能,审计覆盖到每个用户,对重要的用户行为和重要安全事件进行审计;
1)应核查是否开启了安全审计功能;
DM 具有一个灵活的审计子系统,可以通过它来记录系统级事件、个别用户的行为以及对数据库对象的访问。审计开关由过程 VOID SP_SET_ENABLE_AUDIT(param int);控制,过程执行完后会立即生效,param 有三种取值:
0:关闭审计,缺省值为 0。
1:打开普通审计
2:打开普通审计和实时审计
使用数据库数据库审计员查询审计开关当前的值:
SELECT * FROM V$DM_INI WHERE PARA_NAME='ENABLE_AUDIT';
2)应核查安全审计范围是否覆盖到每个用户;
默认覆盖到数据库上的每一个用户账户。
3)应核查是否对重要的用户行为和重要安全事件进行审计。
审计级别 | 说明 |
---|---|
系统级 | 系统的启动、关闭、部分系统事件以及一些系统过程和函数的调用,此级别的审计无法也无需由用户进行设置,只要审计开关打开就会自动生成对应审计记录 |
语句级 | 导致影响特定类型数据库对象的特殊 SQL 或语句组的审计。如 AUDIT TABLE 将审计 CREATE TABLE、ALTER TABLE 和 DROP TABLE 等语句 |
对象级 | 审计作用在特殊对象上的语句。如 test 表上的 INSERT 语句 |
开启ENABLE_AUDIT以及针对语句级查询后查看日志记录;
查看命令:
select * from V$AUDITRECORDS;
另外在配置文件dm.ini中添加参数 AUD_PATH 指定审计文件保存位置后,可在对应log目录下找到日志记录文件。
b)审计记录应包括事件的日期和时间、用户、事件类型、事件是否成功及其他与审计相 关的信息
审计记录内容包括操作者的用户名、所在站点、所进行的操作、操作的对象、操作时间、当前审计条件等。
c)应对审计记录进行保护,定期备份,避免受到未预期的删除、修改或覆盖等;
单个审计文件的大小可以通过 DM 的 INI 参数 AUDIT_MAX_FILE_SIZE 指定。当单个审计文件超过指定大小时,系统会自动切换审计文件,自动创建新的审计文件,审计记录将写入新的审计文件中。AUDIT_MAX_FILE_SIZE 为动态系统级参数,有效值范围为 1~4096M,缺省值为 100M。
极限情况下,审计记录可能会因为磁盘空间不足而无法写入审计文件,最终导致系统无法正常运行。对这种情况的处理有两种策略,通过设置 DM 的 INI 参数 AUDIT_FILE_FULL_MODE 进行配置。当将 AUDIT_FILE_FULL_MODE 置为 1 时,将删除最老的审计文件,直至有足够的空间创建新审计文件。当将 AUDIT_FILE_FULL_MODE 置为 2 时,将不再写审计记录;缺省值为 1。
两种策略都会导致审计记录的缺失,因此,管理员应该及时对审计文件进行备份。
查询:
SELECT * FROM V$PARAMETER WHERE NAME = 'AUDIT_FILE_FULL_MODE';
d)应对审计进程进行保护,防止未经授权的中断。
默认普通用户以及非审计员管理账户无权限关闭日志记录进程。
更多和审计相关的信息请查阅:https://eco.dameng.com/document/dm/zh-cn/pm/audit.html
入侵防范
a)应遵循最小安装的原则,仅安装需要的组件和应用程序。
1)应核查是否遵循最小安装原则;
2)应核查是否未安装非必要的组件和应用程序。
数据库默认最小化安装,无多余扩展。
b)应关闭不需要的系统服务、默认共享和高危端口;
参考《GB/T 28448-2019 信息安全技术 网络安全等级保护测评要求》,该要求项,不适用于数据库。
c)应通过设定终端接入方式或网络地址范围对通过网络进行管理的管理终端进行限制。
查看所有账户的访问规则:
Select A.allow_addr,A.not_allow_addr,A.allow_dt,A.not_allow_dt,B.USERNAME from SYSUSERS A ,DBA_USERS B WHERE A.ID=B.USER_ID;
d)应提供数据有效性检验功能,保证通过人机接口输入或通过通信接口输入的内容符 合系统设定要求。
参考《GB/T 28448-2019 信息安全技术 网络安全等级保护测评要求》,该要求项,不适用于数据库。
e)应能发现可能存在的已知漏洞,并在经过充分测试评估后,及时修补漏洞;
根据现场漏洞扫描结果进行判断。
f)应能够检测到对重要节点进行入侵的行为,并在发生严重入侵事件时提供报警。
参考《GB/T 28448-2019 信息安全技术 网络安全等级保护测评要求》,该要求项,不适用于数据库。
补充:DM数据库SP_SET_ENABLE_AUDIT为 (2)时可以实时侵害检测,根据侵害检测结果做出相应(安全策略)的安全审计响应,结合审计告警工具dmamon,将报警信息以邮件的形式发送给指定邮箱。
可信验证
a)可基于可信根对计算设备的系统引导程序、系统程序、重要配置参数和应用程序等进行可信验证,并在应用程序的关键执行环节进行动态可信验证,在检测到其可信性受到破坏后进行报警,并将验证结果形成审计记录送至安全管理中心。
参考《GB/T 28448-2019 信息安全技术 网络安全等级保护测评要求》,该要求项,不适用于数据库。
数据完整性
a)应采用校验技术或密码技术保证重要数据在传输过程中的完整性,包括但不限于鉴别数据、重要业务数据、重要审计数据、重要配置数据、重要视频数据和重要个人信息等;
根据保密性查询的算法判断是否具有完整性校验
b)应采用校验技术或密码技术保证重要数据在存储过程中的完整性,包括但不限于鉴别数据、重要业务数据、重要审计数据、重要配置数据、重要视频数据和重要个人信息等。
根据保密性查询的算法判断是否具有完整性校验
数据保密性
a)应采用密码技术保证重要数据在传输过程中的保密性,包括但不限于鉴别数据、重要业务数据和重要个人信息等;
DM 提供两种通信加密方式:一基于传输层的 SSL 协议加密;二基于应用层的消息包加密。
1、 SSL 协议加密
ENABLE_ENCRYPT 取值 0、1 和 2。
0:不开启 SSL 加密和 SSL 认证;
1:开启 SSL 加密和 SSL 认证;
2:开启 SSL 认证但不开启 SSL 加密。
缺省值为 0。
系统管理员可通过查询 V$PARAMETER 动态视图查询 ENABLE_ENCRYPT 的当前值:
SELECT * FROM V$PARAMETER WHERE NAME='ENABLE_ENCRYPT';
2、应用层的消息包加密
通过设置服务器配置文件 DM.INI 中的 COMM_ENCRYPT_NAME 参数来指定,客户端以服务器采用的通信方式与其进行通信。COMM_ENCRYPT_NAME 取值空串、算法名分别代表不加密、加密。缺省为空串。算法名可以通过查询动态视图 V$CIPHERS 获取。
用户可通过 V$PARAMETER 动态视图查询 COMM_ENCRYPT_NAME 的当前值。
SELECT * FROM V$PARAMETER WHERE NAME='COMM_ENCRYPT_NAME';
b)应采用密码技术保证重要数据在存储过程中的保密性,包括但不限于鉴别数据、重要业务数据和重要个人信息等。
DM 提供了全面的数据加密的功能,包括:
✔ 透明加密:自带的,在透明加密中,密钥生成、密钥管理和加解密过程由数据库管理系统自动完成,用户不可见。透明加密主要分全库加密、表空间透明加密、表列透明加密。
全库加密:指定全库加密时,在 DM 数据库服务器启动及运行的过程中,需要对处理的所有数据页通过指定的加密算法和 DM 自动生成的密钥进行加解密处理。
查看是否指定全库加密:
select SF_GET_ENCRYPT_NAME();
输出:
SQL> select SF_GET_ENCRYPT_NAME();
行号 SF_GET_ENCRYPT_NAME()
---------- ---------------------
1 xor1表空间透明加密(与全库加密冲突,二者只能选择其一)
SELECT
TABLESPACE_NAME,
ENCRYPTED
FROM
DBA_TABLESPACES;
表列透明加密:
SELECT * FROM DBA_ENCRYPTED_COLUMNS;
✔ 半透明加密:需要用户制定存储加密密钥(同上)。
✔ 非透明加密:需要用户通过其他第三方接口实现加密。
注:数据完整性以及保密性更详细资料请查阅:https://eco.dameng.com/document/dm/zh-cn/pm/storage-encryption.html
数据备份恢复
a)应提供重要数据的本地数据备份与恢复功能;
通过访谈管理员数据备份策略以及核查是否备份到指定的存储介质中。
b)应提供异地实时备份功能,利用通信网络将重要数据实时备份至备份场地;
通过访谈管理员数据备份策略是否存在异地备份。
c)应提供重要数据处理系统的热冗余,保证系统的高可用性。
访谈管理员数据库所在服务器服务器采用热冗余方式部署,保障系统的可用性。
剩余信息保护
a)应保证鉴别信息所在的存储空间被释放或重新分配前得到完全清除;
用户注销后重新登录,会重新调用接口,用户的鉴别信息会重新从数据库中提取,保证了鉴别信息所在存储空间被释放或重新分配前得到完全清除。
b)应保证存有敏感数据的存储空间被释放或重新分配前得到完全清除。
用户注销后重新登录,会重新调用接口,用户的鉴别信息会重新从数据库中提取,保证了敏感数据所在存储空间被释放或重新分配前得到完全清除。
0x03 总结
对于测评项的理解大多来源于《GB/T 28448-2019 信息安全技术 网络安全等级保护测评要求》,如果有错误还望指出。以上资料大多来自达梦技术文档查阅而来,数据库测评所给出的参考命令,建议先在测试环境中验证,在由专业人员进行操作,避免造成误操作。