日期:2014-05-16  浏览次数:20532 次

Oracle 审计失败的用户登陆(Oracle audit)

       对于在线交易系统,且Oracle用户在使用缺省的profile的情形下,多用户共享相同的数据库用户及密码,任意用户输入错误密码累计达到10次以上,其帐户会被自动锁定使得交易被迫临时终止将产生不小的损失。故有必要对那些失败的帐户登陆进行分析以预估是否存在恶意攻击等。Oracle提供了审计功能用于审计那些失败的Oracle用户登陆来进行风险评估。本文即是描述如何开启审计失败的用户登陆。本文不涉及审计的具体的描述信息,仅仅描述如何审计失败的用户登陆。详细完整的审计大家可以参考Oracle Database Security Guide。

 

1、帐户被锁定的情形
     通常情况下,帐户可以由DBA手动锁定,也可能是由于错误的密码输入次数超出了profile中failed_login_attempts 次数的限制而被锁定。

a、手动锁定的情形
sys@SYBO2SZ> select username,account_status,lock_date from dba_users where username like 'USR%';

USERNAME                       ACCOUNT_STATUS                   LOCK_DATE         
------------------------------ -------------------------------- ----------------- 
USR2                           OPEN
USR1                           OPEN

sys@SYBO2SZ> alter user usr1 account lock;

sys@SYBO2SZ> select username,account_status,lock_date from dba_users where username like 'USR%';

USERNAME                       ACCOUNT_STATUS                   LOCK_DATE
------------------------------ -------------------------------- -----------------
USR2                           OPEN
USR1                           LOCKED                           20131023 16:37:37

b、登陆失败超出的情形
sys@SYBO2SZ> select name,lcount from user$ where name='USR2';

NAME                               LCOUNT
------------------------------ ----------
USR2                                   10

sys@SYBO2SZ> select username,account_status,lock_date from dba_users where username like 'USR%';

USERNAME       ACCOUNT_STATUS     LOCK_DATE
-------------- ------------------ -----------------
USR2           LOCKED(TIMED)      20131023 16:41:48   -->用户usr2登陆10次之后帐户被锁定,其状态不同于手动锁定的用户,为LOCKED(TIMED)
USR1           LOCKED             20131023 16:37:37

2、如何开启审计失败的用户登陆
     开启审计需要做如下设置
         a、设置参数         audit_trail = { none | os | db [, extended] | xml [, extended] }
         b、设置参数         audit_file_dest = '<os_dir>'
         c、开启登陆失败审计 audit session whenever not successful;
         d、执行下面的SQL来查看那些用户经历了登陆失败的情形
             select userid, userhost, terminal, clientid from aud$ where returncode=1017;
  
     关于参数audit_trail,
     当值为DB时,非sys帐户的审计信息都会被记录到表SYS.AUD$,会占用system表空间,存在资源占用问题,当然也可将其部署到非系统表空间。sys帐户登陆成功与失败都会生成审计文件。
     当值为OS时,所有的审计记录被写入到操作系统文件,对于高度安全的数据库,Oracle建议采用该设置,理由很简单,高度安全,写入DB的话,整个系统忙得不亦乐乎。
     如果数据库处于只读模式且该参数值为DB时,Oracle 内部设置audit_trail为OS,细节可查看alert log。其余的几个值可参考Oracle Database Reference。
 
3、演示配置审计登陆失败(oracle 10g)

goex_admin@SYBO2SZ> select * from v$version where rownum<2;

BANNER
----------------------------------------------------------------
Oracle Database 10g Release 10.2.0.3.0 - 64bit Production

--Oracle 10g下当前数据库的配置,如下,也是缺省配置
goex_admin@SYBO2SZ> show parameter audit

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest                      string      /users/oracle/OraHome10g/rdbms