在测评过程中可能有很多细节的问题:比如数据库版本不一样,可能有些命令就不一样,还有就是大小写的注意。还要注意中英文符号。
对于oracle主要涉及五个方面的内容:身份鉴别,访问控制、安全审计、入侵防范、数据备份与恢复。
注:以下只是写了一些需要的命令相关的语句,不代表全部。
缺省登录:
root@dbserver1 dbhome_1]# su - oracle
[oracle@dbserver1 ~]$ sqlplus /nolog
SQL*Plus: Release 11.2.0.4.0 Production on Thu Feb 4 10:30:51 2021
Copyright (c) 1982, 2013, Oracle. All rights reserved.
SQL> conn / as sysdba; (密码账号登录:conn 用户名/密码@实例名 as sysdba)
Connected.
SQL> show user;
USER is "SYS"
SQL>
1.身份鉴别:
a) 应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换;
2)查看是否启用口令复杂度函数: select limit from dba_profiles where profile= ' DEFAULT' and resource_name=' PASSWORD_VERIF_FUNCTION' ;
(结果不应为UNLIMITED)
3)检查utlpwdmg. sql中“-- Check for the minimum length of thepassword“部分中“length (password)<”后的值;
(length(password)<后的值为8或以上)
4)select limit from dba_profiles where profile= 'DEFAULT' and resource_name=' PASSWORD_VERIF_FUNCTION' ;(口令过期时限)
dba_profiles策略中PASSWORD_LIFE_TIME不为UNLIMITED
b) 应具有登录失败处理功能,应配置并启用结束会话、限制非法登录次数和当登录连接超时自动退出等相关措施;
1)查看是否启用登录失败限制策略,执行:select limit from dba_profiles where profile='DEFAULT'and resource_name='FAILED_LOGIN_ATTEMPTS';
(结果不应为UNLIMITED)
2) 查看是否启用登录失败锁定策略,执行:select limit from dba_profiles where profile= ‘DEFAULT’ and resource_name= ‘PASSWORD_LOCK_TIME’;
(结果不应为UNLIMITED)
3)查看是否启用登录超时退出策略,执行: select limit from dba_profiles where profile= 'DEFAULT' and resource_name= 'IDLE_TIME';
(结果不应为UNLIMITED)
c) 当进行远程管理时,应采取必要措施防止鉴别信息在网络传输过程中被窃听
1)查看initSID.ora ( %ORACLE_HOME db_1 database)中REMOTE_OS_AUTHENT 的赋值。
(如果是FALSE,则符合。如果是TRUE,原厂操作系统认证。)
2)查看listener.ora(%ORACL_HOMEdb_ 1NETWORKADMIN)文件中的“LISTENER”- "DESCRIPTION"-"ADDRESS_LIST"-" ADDRESS"- "PROTOCOL"项目赋值。
(应存在PROTOCOL=TCPS(实际为TCP))
3)执行show parameter remote_login_ passwordfile。
(结果为NONE,远程无法登录。其中exclusive 是唯一的数据库密码文件登录。
Value值有三种:
1>NONE:默认值。在这种情况下,oracle会忽略口令文件,并且sysdba(系统管理员)访问只给予本地特许的登录。
2>EXCLUSIVE exclusive该参数说明只有一个数据库可以使用这个口令文件。在这种模式下,口令文件可以包含用于多个特许的oracle账户的口令。这是推荐的操作模式,特别是在运行RMAN时,如果希望将RMAN与来自于远程客户端的数据库连接,则必须使用该参数设置。(RMAN是一种用于备份、还原和恢复数据库的oracle工具)
3>SHARED:该参数说明多个数据库可以使用相同的口令文件。这种模式只能保存SYS用户账户的口令。)
dba_profiles各个字段含义:
Resource_parameter部分(RESOURCE_TYPE=KERNEL):
1.Session_per_user:指定限制用户的并发会话的数目。
2.Cpu_per_session:指定会话的CPU时间限制,单位为百分之一秒。
3.Cpu_per_call:指定一次调用(解析、执行和提取)的CPU时间限制,单位为百分之一秒。
4.Connect_time:指定会话的总的连接时间,以分钟为单位。
5.Idle_time:指定会话允许连续不活动的总的时间,以分钟为单位,超过该时间,会话将断开。
6.Logical_reads_per_session:指定一个会话允许读的数据块的数目,包括从内存和磁盘读的所有数据块。
7.Logical_read_per_call:指定一次执行SQL(解析、执行和提取)调用所允许读的数据块的最大数目。
8.Private_sga:指定一个会话可以在共享池(SGA)中所允许分配的最大空间,以字节为单位。
9.Composite_limit:指定一个会话的总的资源消耗,以service units单位表示。
Password_parameter部分(RESOURCE_TYPE=PASSWORD):
1.Failed_login_attempts:指定在帐户被锁定之前所允许尝试登陆的的最大次数。
2.Password_life_time:指定同一密码所允许使用的天数。
3.Password_reuse_time和password_reuse_max:这两个参数必须互相关联设置,password_reuse_time指定了密码不能重用前的天数, 而password_reuse_max则指定了当前密码被重用之前密码改变的次数。两个参数都必须被设置为整数。
4.Password_lock_time:指定登陆尝试失败次数到达后帐户的锁定时间,以天为单位。
5.Password_grace_time:指定宽限天数,数据库发出警告到登陆失效前的天数。如果数据库密码在这中间没有被修改,则过期会失效。
6.Password_verify_function:该字段允许将复杂的PL/SQL密码验证脚本做为参数传递到create profile语句。Oracle数据库提供了一个默认的脚本,
但是自己可以创建自己的验证规则或使用第三方软件验证。 对Function名称,指定的是密码验证规则的名称,指定为Null则意味着不使用密码验证功能
2.访问控制:
a) 应对登录的用户分配账户和权限;
查看每个登录用户的角色和权限,是否是该用户所需的最小权限
执行:select username,account_status from dba_users;
( Mgmt_uiew,sys,system,dbsnmp,sysman是open状态,其他用户都为锁定状态)
b) 应重命名或删除默认账户,修改默认账户的默认口令;
1)登录验证sys的口令是否为CHANGE_ON_INSTALL。
2)登录验证system的口令是否为manager。
3)登录验证dbsnmp的口令是否为dbsnmp。
验证系统用户的默认口令是否修改:
sys : CHANGE_ON_INSTALL
system:manager
dbsnmp:dbsnmp
c) 应及时删除或停用多余的、过期的账户,避免共享账户的存在;
1)在sqlplus中执行命:select username,account_status from dba_users。
查看结果中是否存在scott、outln、ordsys等范例数据库账号。应不存在account_status为“expired”的账户,所有账户均为必要的管理账户或数据库应用程序账户,不存在测试账户/临时账户。每一歌数据库账户与实际用户应为一一对应关系。不存在多人共享账户的情况。
g) 应对重要主体和客体设置安全标记,并控制主体对有安全标记信息资源的访问。
1)检查是否安装0racle Label Security模块
(如果安装,会有LBACSYS用户
1.首先使用下面脚本检查数据库实例是否安装了Oracle Label Security组件
col comp_name for a36;
col version for a30;
select comp_id ,comp_name,verion,ststus
from dba_registry where comp_name ='Oracle lable Security';
查看是否创建策略: select policy_name,status from DBA_SA_POLICIES;结果存在状态为‘enable’的标签策略
查看是否创建级别:select * from dba_sa_levels order by level_num;返回结果不为空
查看标签创建情况:select * from dba_sa_labels;返回结果不为空
查看策略与模式、表的对应关系:select * from dba_sa_tables_policies; 判断是否针对重要信息资源设置敏感标签,返回结果不为空,且包含重要数据存储表格名称
3.安全审计:
a) 应启用安全审计功能,审计覆盖到每个用户,对重要的用户行为和重要安全事件进行审计;
1)执行:select value from v$parameter where name='audit_trail',查看是否开启审计功能。
(audit_trail结果应不为none DB 表示开启了审计,参数取值为true或者db)
b) 审计记录应包括事件的日期和时间、用户、事件类型、事件是否成功及其他与审计相关的信息;
1) show parmeter audit_ trail。
2)show parmeter audit_sys_operations.
3)select sel,upd,del,ins,gra from dba_obj_audit_opts;
4)select sel,upd,del,ins,gra from dba_stmt_audit_opts;
5)select sel,upd,del,ins,gra from dba_priv_audit_opts;
( 1)应不为none
2)应为true
3)返回对象审计选项,应不全为:“- / -”
4) 返回语句审计选项,应不全为:“- / -”
5)返回特权审计选项,应不全为:“- / -”
c) 应对审计进程进行保护,防止未经授权的中断。
1)用户可以通过alter system set audit_trail=none并重启实例关闭审计功能,查看是否成
功 。
(并重启实例关闭审计功能,看是否能成功。测试其他人员无法对审计进程进行开启、关闭操作、并记录。)
4.入侵防范:
a) 应通过设定终端接入方式或网络地址范围对通过网络进行管理的管理终端进行限制;
1)查看在sqlnet,ora文件中是否配置参数:tcp.validnode_checking,tcp,invited_nodes;
tcp.validnode_checking=yes
tcp,invited_nodes=() #运维访问的ip列表,各ip直接用逗号分割。
Tcp,invited_nodes=() #运维访问的IP列表,各IP之间用逗号分隔。在sqlnet.ora文件中tcp.validnode_checking = yes
Tcp.invited_nodes 已配置参数ip列表。
C:oraclexeapporacleproduct11.2.0server
etworkADMINsample
(2) 访谈Oracle补丁升级机制,查看补丁安装情况:
#cd $ORACLE_HOME/Opatch
Opatch lsinventory
(返回Opatch version 信息和OUI version信息)