首页 » 达梦 » 达梦V8 的安全审计 初认识

达梦V8 的安全审计 初认识

前几日一客户遇到了些安全事件,又把安全这个沉重的技术提高了要求, 安全投资再多也不过分但又可能看不到收益,还可能违背人性遭吐槽。 环境中有达梦数据库,领导想了解一下达梦安全做到什么程度,如审计像oracle中有AUDIT,还有AVDF,DV等专业组件,对数据库的访问控制保留记录,像对于“托库”oracle有监听日志和ASH \DASH配合如连接IP、 持续活动时间、持续IO量评估,如果开了审计或trigger可以定制记录。我花点时间了解了一下达梦V8.

国产库在安全方面风险漏洞较少,我个人认为主要原因有一方面是国产库没有对外披露安全漏洞,出类似Oracle CPU补丁修复,另一方面‘攻击者’对国产库知之甚少,国外的可能连国产库名都没听说过吧,还顾及不上来攻击它。

开始以为是使用SVR_LOG参数,实际是ENABLE_AUDIT。 可以使用SP_SET_ENABLE_AUDIT过程立即生效,区别于ORACLE的audit_trail需要重启. 默认禁用,启用方法

SP_SET_ENABLE_AUDIT (1);
  • 0:关闭审计
  • 1:打开普通审计
  • 2:打开普通审计和实时审计

达梦审计级别和oracle差不多有系统、对象、语句级,或FGA,或独创了一个审计如果几个SQL按某顺序,算是一种业务场景的审计吧。 记录可以从数据库查询v$auditrecords。也会写操作系统上的审计日志,而审计的刷盘方式有点oracle 统一审计的味道,如AUDIT_FLUSH_LEVEL=2时可以缓存异步刷盘。 可以自动删除或手动。另外一点和oracle区别是算是三权分立吧,启用审计或禁用,查询审计记录都是需要独立的审计用户,如自带的sysauditor用户,操作系统的审计文件也不像oracle是明文可以查看,达梦的审计文件是不能直接vi打开的,是需要DM提供的工具,如图形界面的审计分析工具 Analyzer 或通过命令行启动的审计分析工具 dmaudtool。

dmaudtool USERID=<userid> AFIL_PATH=<afil_path> OUT_PATH=<out_path> {PARAMETER=<value>}

上面SP_SET_ENABLE_AUDIT看到审计有2个级别,1是和oracle一样的写审计日志,事后分析;2增加了实时审计,比oracle自带的审计增加了实时侵害检测功能,这又有了AVDF的味道,与系统中创建的实时侵害检测规则进行匹配,判断该用户操作是否是侵害行为,还可以做出应对及告警。侵害又为4级,对应4级响应,危险形为可以主动终止当前操作、强断会话、锁定用户功能。还可以定制时间段或IP及违反次数规则,很攒!, 下面演示一个基础的审计功能。

对于语句级审计

VOID
SP_AUDIT_STMT(
    TYPE VARCHAR(30),
    USERNAME VARCHAR (128),
    WHENEVER VARCHAR (20)
)

参数说明:
TYPE 语句级审计选项,即上表中的第一列
USERNAME 用户名,NULL 表示不限制
WHENEVER 审计时机,可选的取值为:
     ALL:所有的
     SUCCESSFUL:操作成功时
     FAIL:操作失败时

启动审计

这里我使用的配置文件--非必须
dmdba@oel7db1 anbob]$ vi dm.ini
-- append  
ENABLE_AUDIT=1

[dmdba@oel7db1 anbob]$ exit
logout
[root@oel7db1 ~]# systemctl stop  DmServiceDMSERVER.service
[root@oel7db1 ~]# systemctl start  DmServiceDMSERVER.service

SQL> `p audit
SQL> select name ,type,value,sys_value,file_value,description from v$parameter where upper(name) like upper('%&1%');
原值 1:select name ,type,value,sys_value,file_value,description from v$parameter where upper(name) like upper('%&1%');
新值 1:select name ,type,value,sys_value,file_value,description from v$parameter where upper(name) like upper('%audit%');

行号     NAME                 TYPE      VALUE SYS_VALUE FILE_VALUE
---------- -------------------- --------- ----- --------- ----------
           DESCRIPTION
           -----------------------------------------------------------------------------------------------
1          ENABLE_AUDIT         READ ONLY 0     0         1
           Flag For Allowing Audit, 0: no audit 1: normal audit  2:normal audit and realtime audit

2          AUDIT_FILE_FULL_MODE IN FILE   1     1         1
           operation mode when audit file is full, 1: delete old file; 2: no longer to write audit records

3          AUDIT_SPACE_LIMIT    IN FILE   8192  8192      8192
           audit space limit in Megabytes


行号     NAME                 TYPE      VALUE SYS_VALUE FILE_VALUE
---------- -------------------- --------- ----- --------- ----------
           DESCRIPTION
           -----------------------------------------------------------------------------------------------
4          AUDIT_MAX_FILE_SIZE  SYS       100   100       100
           maximum audit file size in Megabytes

5          AUDIT_IP_STYLE       SYS       0     0         0
           IP style in audit record, 0: IP, 1: IP(hostname), default 0


# sysdba user
SQL> SP_set_enable_audit(1);
SP_set_enable_audit(1);
[-5598]:没有执行权限.
已用时间: 92.613(毫秒). 执行号:0.

# sysauditor user
SQL> SP_set_enable_audit(1);
DMSQL 过程已成功完成
已用时间: 167.963(毫秒). 执行号:601.
SQL>

SQL> `p audit
SQL> select name ,type,value,sys_value,file_value,description from v$parameter where upper(name) like upper('%&1%');
原值 1:select name ,type,value,sys_value,file_value,description from v$parameter where upper(name) like upper('%&1%');
新值 1:select name ,type,value,sys_value,file_value,description from v$parameter where upper(name) like upper('%audit%');

行号     NAME                 TYPE      VALUE SYS_VALUE FILE_VALUE
---------- -------------------- --------- ----- --------- ----------
           DESCRIPTION
           -----------------------------------------------------------------------------------------------
1          ENABLE_AUDIT         READ ONLY 1     1         1
           Flag For Allowing Audit, 0: no audit 1: normal audit  2:normal audit and realtime audit

2          AUDIT_FILE_FULL_MODE IN FILE   1     1         1
           operation mode when audit file is full, 1: delete old file; 2: no longer to write audit records

3          AUDIT_SPACE_LIMIT    IN FILE   8192  8192      8192
           audit space limit in Megabytes


行号     NAME                 TYPE      VALUE SYS_VALUE FILE_VALUE
---------- -------------------- --------- ----- --------- ----------
           DESCRIPTION
           -----------------------------------------------------------------------------------------------
4          AUDIT_MAX_FILE_SIZE  SYS       100   100       100
           maximum audit file size in Megabytes

5          AUDIT_IP_STYLE       SYS       0     0         0
           IP style in audit record, 0: IP, 1: IP(hostname), default 0

# 启用U1用户表级语句审计

SQL>  SP_AUDIT_STMT('TABLE','U1','ALL');
DMSQL 过程已成功完成
已用时间: 10.949(毫秒). 执行号:602.

U1业务用户操作

dmdba@oel7db1 ~]$ disql u1
密码:

服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 4.914(ms)
disql V8
SQL> DROP TABLE TEST1;
DROP TABLE TEST1;
第1 行附近出现错误[-2106]:无效的表或视图名[TEST1].
已用时间: 3.045(毫秒). 执行号:0.
SQL> drop table test;
操作已执行
已用时间: 83.443(毫秒). 执行号:700.
SQL> drop table test2;
操作已执行
已用时间: 124.139(毫秒). 执行号:701.
SQL> create table test2(id int);
操作已执行
已用时间: 16.569(毫秒). 执行号:702.
SQL>

sysauditor审计用户查看

SQL> select username,rolename,ip,objname,operation,sql_text,optime from v$auditrecords;

行号     USERNAME   ROLENAME       IP  OBJNAME OPERATION    SQL_TEXT                            OPTIME
---------- ---------- -------------- --- ------- ------------ ----------------------------------- --------------------------
1          SYSDBA     DBA            ::1         EXECUTE      SP_set_enable_audit(1);             2024-02-03 16:27:00.000000
2          SYSAUDITOR DB_AUDIT_ADMIN ::1         EXECUTE      SP_set_enable_audit(1);             2024-02-03 16:27:14.000000
3          SYSAUDITOR DB_AUDIT_ADMIN ::1         EXECUTE      SP_AUDIT_STMT('TABLE','U1','ALL'); 2024-02-03 16:31:58.000000
4          U1                        ::1         DROP TABLE   DROP TABLE TEST1;                   2024-02-03 16:32:11.000000
5          U1                        ::1         DROP TABLE   drop table test;                    2024-02-03 16:32:21.000000
6          U1                        ::1         DROP TABLE   drop table test2;                   2024-02-03 16:32:25.000000
7          U1                        ::1         CREATE TABLE create table test2(id int);         2024-02-03 16:32:30.000000

7 rows got

# 增加登录审计 
SQL>  sp_audit_stmt('CONNECT','U1','ALL');
DMSQL 过程已成功完成
已用时间: 8.580(毫秒). 执行号:615.
SQL>  sp_audit_stmt('CONNECT','SYSDBA','ALL');
DMSQL 过程已成功完成

模拟远程登录U1

[dmdba@oel7db1 ~]$ disql u1/u123456789@192.168.56.19

服务器[192.168.56.19:5236]:处于普通打开状态
登录使用时间 : 4.742(ms)
disql V8
SQL> create table test3(id int);
操作已执行
已用时间: 17.995(毫秒). 执行号:800.
SQL>

查看审计记录   sysauditor

SQL> select username,rolename,ip,objname,operation,sql_text,optime from v$auditrecords;

行号     USERNAME   ROLENAME       IP                   OBJNAME OPERATION    SQL_TEXT                            OPTIME
---------- ---------- -------------- -------------------- ------- ------------ ----------------------------------- --------------------------
1          SYSDBA     DBA            ::1                          EXECUTE      SP_set_enable_audit(1);             2024-02-03 16:27:00.000000
2          SYSAUDITOR DB_AUDIT_ADMIN ::1                          EXECUTE      SP_set_enable_audit(1);             2024-02-03 16:27:14.000000
3          SYSAUDITOR DB_AUDIT_ADMIN ::1                          EXECUTE       SP_AUDIT_STMT('TABLE','U1','ALL'); 2024-02-03 16:31:58.000000
4          U1                        ::1                          DROP TABLE   DROP TABLE TEST1;                   2024-02-03 16:32:11.000000
5          U1                        ::1                          DROP TABLE   drop table test;                    2024-02-03 16:32:21.000000
6          U1                        ::1                          DROP TABLE   drop table test2;                   2024-02-03 16:32:25.000000
7          U1                        ::1                          CREATE TABLE create table test2(id int);         2024-02-03 16:32:30.000000
8          U1                        ::ffff:192.168.56.19         CREATE TABLE create table test3(id int);         2024-02-03 16:38:21.000000

8 rows got

已用时间: 2.056(毫秒). 执行号:605.
SQL>

SQL> set pages 1000
SQL> desc v$auditrecords

行号     NAME        TYPE$         NULLABLE
---------- ----------- ------------- --------
1          USERID      INTEGER       Y
2          USERNAME    VARCHAR(128)  Y
3          ROLEID      INTEGER       Y
4          ROLENAME    VARCHAR(128)  Y
5          IP          VARCHAR(64)   Y
6          SCHID       INTEGER       Y
7          SCHNAME     VARCHAR(128)  Y
8          OBJID       INTEGER       Y
9          OBJNAME     VARCHAR(128)  Y
10         OPERATION   VARCHAR(128)  N
11         SUCC_FLAG   CHAR(1)       N
12         SQL_TEXT    VARCHAR(8188) Y
13         DESCRIBTION VARCHAR(8188) Y
14         OPTIME      DATETIME(6)   N
15         MAC         VARCHAR(25)   Y
16         SEQNO       TINYINT       Y

16 rows got

SQL> select username,rolename,ip,objname,operation,sql_text,optime from v$auditrecords;

行号     USERNAME   ROLENAME       IP                   OBJNAME OPERATION    SQL_TEXT                                  OPTIME
---------- ---------- -------------- -------------------- ------- ------------ ----------------------------------------- --------------------------
1          SYSDBA     DBA            ::1                          EXECUTE      SP_set_enable_audit(1);                   2024-02-03 16:27:00.000000
2          SYSAUDITOR DB_AUDIT_ADMIN ::1                          EXECUTE      SP_set_enable_audit(1);                   2024-02-03 16:27:14.000000
3          SYSAUDITOR DB_AUDIT_ADMIN ::1                          EXECUTE       SP_AUDIT_STMT('TABLE','U1','ALL');       2024-02-03 16:31:58.000000
4          U1                        ::1                          DROP TABLE   DROP TABLE TEST1;                         2024-02-03 16:32:11.000000
5          U1                        ::1                          DROP TABLE   drop table test;                          2024-02-03 16:32:21.000000
6          U1                        ::1                          DROP TABLE   drop table test2;                         2024-02-03 16:32:25.000000
7          U1                        ::1                          CREATE TABLE create table test2(id int);               2024-02-03 16:32:30.000000
8          U1                        ::ffff:192.168.56.19         CREATE TABLE create table test3(id int);               2024-02-03 16:38:21.000000
9          SYSAUDITOR DB_AUDIT_ADMIN ::1                          EXECUTE      SP_SET_ENABLE_AUDIT(0);                   2024-02-03 16:41:29.000000
10         SYSAUDITOR DB_AUDIT_ADMIN ::1                          EXECUTE      SP_SET_ENABLE_AUDIT(1);                   2024-02-03 16:49:47.000000
11         SYSAUDITOR DB_AUDIT_ADMIN ::1                          EXECUTE       sp_audit_stmt('CONNECT','ALL','ALL');    2024-02-03 16:49:52.000000
12         SYSAUDITOR DB_AUDIT_ADMIN ::1                          EXECUTE       sp_audit_stmt('CONNECT','U1','ALL');     2024-02-03 16:50:12.000000
13         SYSAUDITOR DB_AUDIT_ADMIN ::1                          EXECUTE       sp_audit_stmt('CONNECT','SYSDBA','ALL'); 2024-02-03 16:50:19.000000
14         U1                        ::ffff:192.168.56.19         DISCONNECT   LOGOUT                                    2024-02-03 16:53:28.000000
15         u1                        ::ffff:192.168.56.19         CONNECT      LOGIN                                     2024-02-03 16:53:29.000000

15 rows got

已用时间: 85.048(毫秒). 执行号:617.
SQL>

禁用审计

SQL> SP_SET_ENABLE_AUDIT(0);
DMSQL 过程已成功完成
已用时间: 4.773(毫秒). 执行号:608.
SQL> `p enable_audit
SQL> select name ,type,value,sys_value,file_value,description from v$parameter where upper(name) like upper('%&1%');
原值 1:select name ,type,value,sys_value,file_value,description from v$parameter where upper(name) like upper('%&1%');
新值 1:select name ,type,value,sys_value,file_value,description from v$parameter where upper(name) like upper('%enable_audit%');

— OVER —

打赏

,

对不起,这篇文章暂时关闭评论。