Oracle基线检查

身份鉴别

(一)采用用户名密码等身份认证方式

风险等级

评估方法

  • Linux/Unix下输入sqlplus,看是否提示输入帐号密码
  • windows,在cmd中输入sqlplus看是否要求帐号密码
  • 使用连接软件,例如sqldeveloper/sqlplus连接数据库1521端口,输入默认帐号看是否可以登录

整改建议

建议采用用户名密码等身份认证方式

(二)配置口令复杂度策略

风险等级

评估方法

  1. 查看utlpwdmg.sql

    cat $ORACLE_HOME/rdbms/admin/utlpwdmg.sql | grep -i "password_"
    

  2. 验证配置是否生效

    2.1 查看的用户所对应的profile名称

    select username,profile from dba_users;
    

    图中用户对应的profile名称为DEFAULT

    2.2 查看profile下的配置(替换DEFAULT为检查中发现对应用户的profile名称)

    • PASSWORD_LIFE_TIME <= 180 (同一密码可用于身份验证的天数)📷合规

      select limit from dba_profiles where profile='DEFAULT' and resource_name='PASSWORD_LIFE_TIME';
      
    • PASSWORD_GRACE_TIME <= 10 (宽限期开始后发出警告并允许登录的天数)📷合规

      select limit from dba_profiles where profile='DEFAULT' and resource_name='PASSWORD_GRACE_TIME';
      
    • PASSWORD_REUSE_TIME >= 1800 (密码不能重复使用的天数)📷不合规

      select limit from dba_profiles where profile='DEFAULT' and resource_name='PASSWORD_REUSE_TIME';
      
    • PASSWORD_REUSE_MAX >= 5 (在重新使用当前密码之前需要更改密码的次数)📷不合规

      select limit from dba_profiles where profile='DEFAULT' and resource_name='PASSWORD_REUSE_MAX';
      
    • PASSWORD_VERIFY_FUNCTION (在指定的连续登录尝试失败次数后帐户将被锁定的天数)📷不合规

      select limit from dba_profiles where profile='DEFAULT' and resource_name='PASSWORD_VERIFY_FUNCTION';
      

整改建议

  • 更改PASSWORD_LIFE_TIME参数值为建议值180

    alter profile DEFAULT limit PASSWORD_LIFE_TIME 180;
    
  • 更改PASSWORD_GRACE_TIME 参数值为建议值10

    alter profile DEFAULT limit PASSWORD_GRACE_TIME 10;
    
  • 更改PASSWORD_REUSE_TIME参数值为建议值1800

    alter profile DEFAULT limit PASSWORD_REUSE_TIME 1800;
    
  • 更改PASSWORD_REUSE_MAX参数值为建议值5

    alter profile DEFAULT limit PASSWORD_REUSE_MAX 5;
    
  • 更新PASSWORD_VERIFY_FUNCTION参数值为合规函数名称

    使用自带函数:

    1. 查看utlpwdmg.sql中的函数,查看是否存在length(password)>8(如存在则记录CREATE OR REPLACE FUNCTION中函数名称,不存在则修改为length(password)>8

      cat $ORACLE_HOME/rdbms/admin/utlpwdmg.sql | grep -i "length(password)"
      
    2. 更改PASSWORD_VERIFY_FUNCTION的值为符合的CREATE OR REPLACE FUNCTION中函数名称

      alter profile DEFAULT limit PASSWORD_VERIFY_FUNCTION verify_function;
      

(三)登录失败限制策略

风险等级

评估方法

  1. 登录失败限制策略

    • FAILED_LOGIN_ATTEMPTS <= 5(帐户被锁定之前尝试登录该用户帐户的失败次数)📷不合规

      select limit from dba_profiles where profile='DEFAULT' and resource_name='FAILED_LOGIN_ATTEMPTS';
      
  2. 登录失败锁定策略

    • PASSWORD_LOCK_TIME >= 1(在指定的连续登录尝试失败次数后帐户将被锁定的天数)📷合规

      select limit from dba_profiles where profile='DEFAULT' and resource_name='PASSWORD_LOCK_TIME';
      
  3. 登录超时退出策略

    • IDLE_TIME !=UNLIMIT(会话期间允许的连续不活动时间段,以分钟为单位)📷不合规

      select limit from dba_profiles where profile='DEFAULT' and resource_name='IDLE_TIME';
      

整改建议

  1. 更改FAILED_LOGIN_ATTEMPTS参数值为建议值5

    alter profile DEFAULT limit FAILED_LOGIN_ATTEMPTS 5;
    
  2. 更改PASSWORD_LOCK_TIME 参数值为建议值1

    alter profile DEFAULT limit PASSWORD_LOCK_TIME 1;
    
  3. 更改IDLE_TIME 的值不为UNLIMIT

    alter profile DEFAULT limit IDLE_TIME 2;
    

(四)采用加密的方式进行远程管理

风险等级

评估方法

  1. 查看initsSID.ora文件中的REMOTE_0S _AUTHENT的赋值

    cat $ORACLE_HOME/network/admin/initsSID.ora
    
  2. 查看listene.ora文件中的”LISTENER”-“DESCRIPTION “-“ADDRESS_LIST”-“ADDRESS”- “PROTOCOL”项目的赋值是否存在TCPS

    cat $ORACLE_HOME/network/admin/listener.ora
    

  3. 查看REMOTE_LOGIN_PASSWORDFILE参数值是否为EXCLUSIVE

    show parameter remote_login_passwordfile;
    

整改建议

建议采用加密的方式进行远程管理,REMOTE_LOGIN_PASSWORDFILE参数设置为EXCLUSIVE方式

alter system set remote_login_passwordfile = 'EXCLUSIVE' scope = spfile;

(五)不与操作系统不共用一个管理员账号

风险等级

评估方法

windows中查看管理员组是否有oracle专属帐号
linux中查看oracle是否为普通帐号安装

整改建议

应为操作系统和数据库系统的不同用户分配不同的用户名\应禁止多人共用一个管理员帐号的现象。

(六)配置监听服务空闲连接超时时间

评估方法

  1. 查看sqlnet.ora,是否配置SQLNET.EXPIRE_TIME参数并小于等于建议值10

    cat $ORACLE_HOME/network/admin/sqlnet.ora | grep -i "EXPIRE_TIME"
    

整改建议

数据库sqlnet.ora文件中应配置SQLNET.EXPIRE_TIME参数,建议值为10分钟

SQLNET.EXPIRE_TIME = 10

访问控制

(一)操作系统和数据库系统特权用户的权限分离

评估方法

查看oracel进程应不以root启动

整改建议

应在宿主操作系统中设置本地数据库专用帐号,并赋予该账户除运行各种数据库服务外的最低权限。
应实现操作系统和数据库系统特权用户的权限分离,定期检查和调整用户访问数据库的权限。
(注:此项要求仅针对非Windows系统)

(二)禁止SYS’、‘SYSTEM’以外的dba权限账号

评估方法

  1. 从结果中判断是否有多余帐号

    select grantee from dba_role_privs where granted_role='dba' and grantee not in ('SYS','SYSTEM');
    

    SQL语句运行结果

整改建议

应禁止SYS’,’SYSTEM’,以外的dba权限账号。应用系统账户应按照最小权限的原则,不应具有dba权限。

(三)限制默认账号的访问权限

风险等级

评估方法

使用sqlplus测试 sys system等重要用户是否为默认帐号。常用默认密码有oracle,system,等自行组合

整改建议

应限制默认账户的访问权限,修改SYS’,’SYSTEM‘,’SYSMAN’等账户的默认口令;

(四)删除无用帐号

风险等级

评估方法

  1. 禁用TEST、HR、SCOTT、OE、 PM、SH等默认用户,删除无用帐号

    select username, lock_date, expiry_date from dba_users;
    

数据字典保护功能

show parameter O7_DICTIONARY_ACCESSIBILITY;

整改建议

建议数据库数据字典进行保护,设置DICTIONARY_ACCESSIBILIT参数值为FALSE

访问控制功能

lsnrctl status

show parameter dispatcher;


安全审计

审计功能

show parameter audit_sys_operations;

日志级别

select value from v$parameter where name='audit_trail';

show parameter audit;

!ls 日志目录

审计记录

select * from dba_obj_audit_opts;

select * from dba_stmt_audit_opts;

select * from dba_priv_audit_opts;


入侵防范

补丁更新

$ORACLE_HOME/OPatch/opatch lsinventory


资源控制

最大连接数

评估方法

  1. 查看最大进程数(processes<=200)

    show parameter processes;
    

    processes大于200,不合规

  2. 查看最大会话数(sessions<=400)

    show parameter sessions;
    

    sessions大于400,不合规

整改建议

  1. 以管理员身份登录数据库,修改进程连接数

    alter system set processes=200 scope=spfile;
    
  2. 修改会话数

    alter system set sessions=400 scope=spfile;
    
  3. 关闭数据库

    shutdown immediate;
    
  4. 启动数据库

    startup;
    

(可能需要同时修改UNIX系统参数:/etc/proc/kernel 中semmns)

限制单个用户对系统资源的最大或最小使用限度

select * from dba_profiles where resource_name='SESSIONS_PER_USER';

select * from dba_profiles where resource_name='CPU_PER_SESSION';

select * from dba_profiles where resource_name='IDLE_TIME';

archive log list;


参考文章

Oracle 10.2:CREATE PROFILEALTER PROFILE

Oracle 21:Initialization Parameters - Database Reference

Oracle身份鉴别 - 起于凡而非于凡:


转载请注明来源,欢迎对文章中的引用来源进行考证,文章可能具有时效性,欢迎指出任何有错误、已失效或不够清晰的表达 ,可通过[邮件](mailto:cnlnnn@qq.com)联系垃圾堆主人

文章标题:Oracle基线检查

字数:1.7k

本文作者:cnlnn

发布时间:2022-05-24, 17:25:01

最后更新:2022-05-24, 17:25:01

原始链接:https://cnlnn.ml/posts/c167b4e8/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。