1 审计介绍
在DM系统中,专门为审计设置了开关,要使用审计功能首先要打开审计开关。审计开关由过程VOID SP_SET_ENABLE_AUDIT(param int);控制,过程执行完后会立即生效,param有三种取值:
- 关闭审计
- 打开普通审计
- 打开普通审计和实时审计
- 只要审计功能被启用,系统级的审计记录就会产生;
- 在进行数据库审计时,审计员之间没有区别,可以审计所有数据库对象,也可取消其他审计员的审计设置;
- 语句级审计不针对特定的对象,只针对用户;
- 对象级审计针对指定的用户与指定的对象进行审计;
- 在设置审计时,审计选项不区分包含关系,都可以设置; 在设置审计时,审计时机不区分包含关系,都可以进行设置;
- 如果用户执行的一条语句与设置的若干审计项都匹配,只会在审计文件中生成一条审计记录。
1.1 审计的打开与关闭
SP_SET_ENABLE_AUDIT (1); ######打开
SP_SET_ENABLE_AUDIT (0); ######关闭
1.2 审计级别介绍
审计级别 | 说明 |
---|---|
系统级 | 系统的启动与关闭,此级别的审计无法也无需由用户进行设置,只要审计开关打开就会自动生成对应审计记录 |
语句级 | 导致影响特定类型数据库对象的特殊SQL或语句组的审计。如AUDIT TABLE 将审计CREATE TABLE、ALTER TABLE和DROP TABLE等语句 |
对象级 | 审计作用在特殊对象上的语句。如test表上的INSERT语句 |
1.3 语句级审计
1.3.1 SP_AUDIT_STMT
SP_AUDIT_STMT(TYPE,USERNAME,WHENEVER);
TYPE 语句级审计选项
USERNAME 用户名,NULL表示不限制
WHENEVER 审计时机,可选的取值为:
- ALL:所有的
- SUCCESSFUL:操作成功时
- FAIL:操作失败时
审计表的创建、修改和删除。
SP_AUDIT_STMT('TABLE', 'NULL', 'ALL');
对SYSDBA创建用户成功进行审计。
SP_AUDIT_STMT('USER', 'SYSDBA', 'SUCCESSFUL');
对用户USER2进行的表的修改和删除进行审计,不管失败和成功。
SP_AUDIT_STMT('UPDATE TABLE', 'USER2', 'ALL');
SP_AUDIT_STMT('DELETE TABLE', 'USER2', 'ALL');
1.3.2 SP_NOAUDIT_STMT
取消对表的创建、修改和删除的审计。
SP_NOAUDIT_STMT('TABLE', 'NULL', 'ALL');
取消对SYSDBA创建用户成功进行审计。
SP_NOAUDIT_STMT('USER', 'SYSDBA', 'SUCCESSFUL');
取消对用户USER2进行的表的修改和删除的审计。
SP_NOAUDIT_STMT('UPDATE TABLE', 'USER2', 'ALL');
SP_NOAUDIT_STMT('DELETE TABLE', 'USER2', 'ALL');
1.4 对象审计
1.4.1 SP_AUDIT_OBJECT
SP_SUDIT_OBJECT(TYPE,USERNAME,SCHNAME,COLNAME,WHENEVER);
TYPE 对象级审计选项,即上表中的第一列
USERNAME 用户名
SCHNAME 模式名,为空时置’null’
TVNAME 表、视图、存储过程名不能为空
COLNAME 列名
WHENEVER 审计时机,可选的取值为:
- ALL:所有的
- SUCCESSFUL:操作成功时
- FAIL:操作失败时
对SYSDBA对表PERSON.ADDRESS进行的添加和修改的成功操作进行审计。
SP_AUDIT_OBJECT('INSERT', 'SYSDBA', 'PERSON', 'ADDRESS', 'SUCCESSFUL');
SP_AUDIT_OBJECT('UPDATE', 'SYSDBA', 'PERSON', 'ADDRESS', 'SUCCESSFUL');
对SYSDBA对表PERSON.ADDRESS的ADDRESS1列进行的修改成功的操作进行审计。
SP_AUDIT_OBJECT('UPDATE','SYSDBA','PERSON','ADDRESS','ADDRESS1','SUCCESSFUL');
1.4.2 SP_NOAUDIT_OBJECT
取消对SYSDBA对表PERSON.ADDRESS进行的添加和修改的成功操作的审计。
SP_NOAUDIT_OBJECT('INSERT', 'SYSDBA', 'PERSON', 'ADDRESS', 'SUCCESSFUL');
SP_NOAUDIT_OBJECT('UPDATE', 'SYSDBA', 'PERSON', 'ADDRESS', 'SUCCESSFUL');
取消对SYSDBA对表PERSON.ADDRESS的ADDRESS1列进行的修改成功操作的审计。
SP_NOAUDIT_OBJECT('UPDATE','SYSDBA','PERSON','ADDRESS','ADDRESS1','SUCCESSFUL');
1.5 语句序列审计
1.5.1 SP_AUDIT_SQLSEQ_*
建立语句序列审计规则需要先调用SP_AUDIT_SQLSEQ_START,之后调用若干次SP_AUDIT_SQLSEQ_ADD,每次加入一条SQL语句,审计规则中的SQL语句顺序根据加入SQL语句的顺序确定,最后调用SP_AUDIT_SQLSEQ_END完成规则的建立。
例如,建立一个语句序列审计规则AUDIT_SQL1。
SP_AUDIT_SQLSEQ_START('AUDIT_SQL1');
SP_AUDIT_SQLSEQ_ADD('AUDIT_SQL1', 'SELECT NAME FROM TEST1;');
SP_AUDIT_SQLSEQ_ADD('AUDIT_SQL1', 'SELECT ID FROM TEST2;');
SP_AUDIT_SQLSEQ_ADD('AUDIT_SQL1', 'SELECT * FROM TEST3;');
SP_AUDIT_SQLSEQ_END('AUDIT_SQL1');
1.5.2 SP_AUDIT_SQLSEQ_DEL
删除语句序列审计规则AUDIT_SQL1。
SP_AUDIT_SQLSEQ_DEL('AUDIT_SQL1');
2 审计文件管理
审计文件命名格式为“AUDIT_GUID_创建时间.log”
审计文件的大小可以通过DM的INI参数AUDIT_MAX_FILE_SIZE指定。
2.1 AUDIT_FILE_FULL_MODE
- 置为1时,将删除最老的审计文件,直至有足够的空间创建新审计文件。若将所有可以删除的审计文件都删除后空间仍旧不够,则数据库会挂起不再处理任何请求,直至磁盘空间被清理出足够创建新审计文件的空间;当将AUDIT_FILE_FULL_MODE
- 置为2时,将不再写审计记录,默认值为1。AUDIT_FILE_FULL_MODE为静态参数,可通过系统过程SP_SET_PARA_VALUE进行修改,但是修改需要重新启动DM数据库服务器才能生效。
2.2 SP_DROP_AUDIT_FILE
TIME_STR:指定的时间字符串
TYPE:审计文件类型,0表示删除普通审计文件,1表示删除实时审计文件
例如,指定删除2015-12-6 16:30:00以前的普通审计文件。
SP_DROP_AUDIT_FILE('2015-12-6 16:30:00',0);
2.3 SP_AUDIT_SET_ENC
DM审计文件支持文件加密,审计管理员可使用下面的系统过程设置审计文件加密。
SP_AUDIT_SET_ENC(NAME,KEY);
参数说明:
NAME 加密算法名。
KEY 加密密钥。
3 审计信息查阅
查询SYSAUDITOR.SYSAUDIT
4 审计实时侵害检测
4.1 创建与删除实时侵害检测规则
当执行SP_SET_ENABLE_AUDIT (2);时,具有AUDIT DATABASE权限的用户可以使用下面的系统过程创建实时侵害检测规则。
SP_CREATE_AUDIT_RULE—创建审计
RULENAME 创建的审计实时侵害检测规则名
OPERATION 审计操作名
USERNAME 用户名,没有指定或'NULL'表示所有用户
SCHNAME 模式名,没有时指定为'NULL'
OBJNAME 对象名,没有时指定为'NULL'
WHENEVER 审计时机,取值ALL/SUCCESSFUL/FAIL
ALLOW_IP IP列表,以‟,‟隔开。例如'"192.168.0.1","127.0.0.1"'
ALLOW_DT 时间串,格式如下:
ALLOW_DT::= <时间段项>{,<时间段项>} <时间段项> ::= <具体时间段> | <规则时间段> <具体时间段> ::= <具体日期><具体时间> TO <具体日期><具体时间> <规则时间段> ::= <规则时间标志><具体时间> TO <规则时间标志><具体时间> <规则时间标志> ::= MON | TUE | WED | THURS | FRI | SAT | SUN
INTERVAL 时间间隔,单位为分钟
TIMES 次数
例1,创建一个审计实时侵害检测规则DANGEROUS_SESSION,该规则检测每个星期一8:00至9:00的所有非本地SYSDBA的登录动作。
SP_CREATE_AUDIT_RULE ('DANGEROUS_SESSION','CONNECT', 'SYSDBA', 'NULL', 'NULL', 'ALL', '"127.0.0.1"','MON "8:00:00" TO MON "9:00:00"',0, 0);
例2,创建一个审计实时侵害检测规则PWD_CRACK,该规则检测可能的口令暴力破解行为。
SP_CREATE_AUDIT_RULE ('PWD_CRACK','CONNECT', 'NULL', 'NULL', 'NULL', 'FAIL', 'NULL','NULL',1, 50);
例3,删除已创建的实时侵害检测规则DANGEROUS_SESSION。
SP_DROP_AUDIT_RULE ('DANGEROUS_SESSION');
删除审计
删除已创建的实时侵害检测规则DANGEROUS_SESSION。
SP_DROP_AUDIT_RULE ('DANGEROUS_SESSION');
实时侵害检测
当执行SP_SET_ENABLE_AUDIT (2);时,实时侵害检测系统会实时分析用户的操作,将其与系统中创建的实时侵害检测规则进行匹配,判断该用户操作是否是侵害行为。
为了界定不同侵害行为对系统的危害情况,实时侵害检测系统定义了四种级别的侵害等级,从四级到一级侵害行为严重程度递增。这样根据用户操作匹配的实时侵害检测规则来可以判断其属于哪一级的侵害行为。
四种侵害等级如下:
- 四级:操作只违反了IP或者时间段设置之一,且对应累计次数在规定时间间隔内没有达到门限值,或者没有门限值设置;
- 三级:操作同时违反了IP和时间段设置,且累计次数在规定时间间隔内没有达到门限值,或者没有门限值设置;
- 二级:操作的IP和时间段都正常,且累计次数在规定时间间隔内达到了门限值;
- 一级:操作只违反了IP或时间段设置之一,且对应累计次数在规定时间间隔内达到了门限值,或者操作同时违反了IP和时间段设置,且累计次数在规定时间间隔内达到了门限值。
实时侵害检测规则的设置,使得某些操作可能会触发多条审计分析规则,也就是说可能存在多条审计分析规则同时匹配的情况。在这种情况下,需要把操作记录保存到所有匹配的、同时规定了操作频率门限值的审计分析规则下,并且使用这些审计分析规则对该操作进行分析,从所有满足的侵害等级中选择一个最高的侵害等级进行响应。
DM实时侵害检测系统根据侵害检测结果做出相应的安全审计响应,由低到高四个等级分别为:
- 四级响应:实时报警生成,对四级侵害行为进行响应。当系统检测到四级侵害行为时,生成报警信息;
- 三级响应:违例进程终止,对三级侵害行为进行响应。当系统检测到三级侵害行为时,终止当前操作(用户当前连接仍然保持)。同时生成报警信息;
- 二级响应:服务取消,对二级侵害行为进行响应。当系统检测到二级侵害行为时,强制断开用户当前连接,退出登录。同时生成报警信息;
- 一级响应:账号锁定或失效,对一级侵害行为进行响应。当系统检测到一级侵害行为时,强制断开用户当前连接,退出登录,并且锁定账号或使账号失效。同时生成报警信息。
这些安全审计相应动作中除了生成报警信息,其余的都由DM数据库服务器即可完成。生成报警信息的实现包括DM数据库服务器将报警信息写入一个专门的日志文件,由DM的审计告警工具dmamon实时分析这个日志文件,发现报警信息并将报警信息以邮件的形式发送给指定的邮箱。
审计告警工具dmamon
审计告警工具dmamon用来在DM实时侵害检测系统检测到侵害事件且需要进行报警时可将报警信息以邮件的形式发送给指定邮箱。
dmamon的运行需要指定对应的配置文件dmamon.ini,此配置文件只能通过工具dmamon_ctl进行创建或修改。
创建或修改dmamon
使用dmamon_ctl工具创建或修改dmamon.ini。
启动dmamon_ctl工具的命令格式为: dmamon_ctl [FILE =value] 或 dmamon_ctl [FILE =value] DCR_INI= value
参数说明:
FILE:用来指定需要编辑的dmamon.ini的路径。创建dmamon.ini时,可以不指定FILE参数。
DCR_INI:在ASM环境中,用来指定dmdcr.ini路径。非ASM环境不用指定。
例如:
dmamon_ctl FILE=c:\dmamon.ini
命令 | 说明 |
---|---|
EDIT | 修改INI文件信息 |
ADD | 增加接收者的邮件地址信息 |
REMOVE | 删除接收者的邮件地址信息 |
SHOW | 显示当前控制文件的内容 |
SAVE | 保存,保存路径必须为dmamon.ini的绝对路径。退出之前须保存,否则修改无效 |
EXIT | 退出当前程序 |
HELP | 显示帮助信息 |
使用dmamon
例如:
dmamon USERID=SYSAUDITOR/SYSAUDITOR FILE=c:\dmamon.ini