码迷,mamicode.com
首页 > 数据库 > 详细

oracle加固

时间:2015-09-07 13:07:30      阅读:288      评论:0      收藏:0      [点我收藏+]

标签:listener   oracle   password   

一.   检查项名称:检查是否使用加密传输
判断条件:通过网络层捕获的数据库传输包为加密包,有设置sqlnet.encryption为符合要求
  1. 在Oracle Net Manager中选择“Oracle Advanced Security”。
2. 然后选择Encryption。
3. 选择Client或Server选项。
4. 选择加密类型。
5. 输入加密种子(可选)。
6. 选择加密算法(可选)。
7. 保存网络配置,sqlnet.ora被更新。
补充操作说明:存在sqlnet.encryption

二.   使用lsnrctl start或lsnrctl stop命令起停listener需要密码
通过下面命令设置密码:
$ lsnrctl
LSNRCTL> change_password
Old password:Not displayed
New password:Not displayed
Reenter new password:Not displayed
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=prolin1)(PORT=1521)(IP=FIRST)))
Password changed for LISTENER
The command completed successfully
LSNRCTL> save_config

补充操作说明:命令:cat network/admin/sqlnet.ora,回显中存在PASSWORDS_LISTENER

三.Oracle软件账户的安全策略
判断条件:每3个月自动提示更改密码,过期后不能登陆。
  使用操作系统一级的账户安全管理来保护Oracle软件账户。
补充操作说明:此项的判断方式同操作系统的口令生存周期项一致

四.检查是否限制可以访问数据库的地址
判断条件:在非信任的客户端以数据库账户登陆被提示拒绝。
只需在服务器上的文件$ORACLE_HOME/network/admin/sqlnet.ora中设置以下行:
tcp.validnode_checking = yes
tcp.invited_nodes = (ip1,ip2…)
补充操作说明:tcp.validnode_checking的值为yes

五.10分钟以上的无任何操作的空闲数据库连接被自动断开,SQLNET.EXPIRE_TIME有设置
  在sqlnet.ora中设置下面参数:
SQLNET.EXPIRE_TIME=10
补充操作说明:存在SQLNET.EXPIRE_TIME值大于等于1

六.检查是否配置最大认证失败次数
判断条件:连续6次用错误的密码连接用户,第7次时用户将被锁定

    为用户建profile,指定FAILED_LOGIN_ATTEMPTS为6
补充操作说明:如果连续6次连接该用户不成功,用户将被锁定
命令:select limit from dba_profiles t where resource_name= ‘FAILED_LOGIN_ATTEMPTS‘,回显中default值变成6

七.检查是否根据业务要求制定数据库审计策略
判断条件:对审计的对象进行一次数据库操作,检查操作是否被记录。
1. 通过设置参数audit_trail = db或os来打开数据库审计。
2. 然后可使用Audit命令对相应的对象进行审计设置。
补充操作说明:存在os,db,DB,OS

八.检查是否记录操作日志
判断条件:做相关操作,检查是否记录成功
创建ORACLE登录触发器,记录相关信息,但对IP地址的记录会有困难
1.建表LOGON_TABLE
2.建触发器
CREATE TRIGGER TRI_LOGON
  AFTER LOGON ON DATABASE
BEGIN
  INSERT INTO LOGON_TABLE VALUES(SYS_CONTEXT(‘USERENV‘, ‘SESSION_USER‘),
SYSDATE);
END;
补充操作说明:命令:select value from v$parameter t where t.name= ‘audit_trail‘,VALUE等于DB,OS中的一个

九.检查是否限制具备数据库超级管理员(SYSDBA)权限的用户远程登录
判断条件:1. 以SYSDBA用户不能远程连接到数据库。

    1. 在spfile中设置REMOTE_LOGIN_PASSWORDFILE=NONE来禁止SYSDBA用户从远程登陆。
补充操作说明:命令:select t.VALUE from v$parameter t whereupper(t.NAME) like  ‘%REMOTE_LOGIN_PASSWORDFILE%‘,回显中出现NONE

十.检查是否在数据库对象上设置了VPD和OLS
判断条件:通过视图来检查是否在数据库对象上设置了VPD和OLS。

    1. 在表上构建 VPD可以使用Oracle所提供的 PL/SQL 包 DBMS_RLS 控制整个 VPD 基础架构,具体设置方法较复杂,建议参考Oracle文档进行配置。
2. Oracle标签安全(OLS)是在相关表上通过添加一个标签列来实现复杂的数据安全控制,具体细节请参考Oracle文档。
补充操作说明:命令:select count(*) from v$vpd_policy,回显中COUNT值大于等于1

十一. 检查帐户口令生存周期
判断条件:到期不修改密码,密码将会失效。连接数据库将不会成功
修改profile,使所有profile的PASSWORD_LIFE_TIME参数小于等于90
补充操作说明:在90天内,需要修改密码
命令:select limit from dba_profiles t where resource_name= ‘PASSWORD_LIFE_TIME‘,回显值小于等于90

十二. 检查口令强度设置
判断条件:修改密码为不符合要求的密码,将失败.profile中对于口令强度有定义
为用户建profile,调整PASSWORD_VERIFY_FUNCTION,指定密码复杂度
CREATE PROFILE "TEST_PROFILE"
LIMIT PASSWORD_VERIFY_FUNCTION VERIFY_FUNCTION;
ALTER USER "USER_NAME"  PROFILE"TEST_PROFILE";
补充操作说明:命令:select count(*) from dba_profiles whereresource_name = ‘PASSWORD_VERIFY_FUNCTION‘ and limit = ‘NULL‘,回显中COUNT值为0

十三.检查是否使用数据库角色(ROLE)来管理对象的权限
判断条件:对应用用户不要赋予DBA Role或不必要的权限。

  1. 1.  使用Create Role命令创建角色。
    2. 使用用Grant命令将相应的系统、对象或Role的权限赋予应用用户。

    除了默认用户(sys、system和sysman),其他用户都没有赋予dba角色
    补充操作说明:获取拥有dba权限的非默认管理员用户,用户数等于0

十四.检查是否在配置用户所需的最小权限
判断条件:非默认的具有DBA权限用户个数为0
      grant 权限 to username;
revoke 权限 from username;
补充操作说明:用第一条命令给用户赋相应的最小权限
用第二条命令收回用户多余的权限
获取拥有dba权限的非默认管理员用户,用户数等于0

十五.检查是否配置日志功能
判断条件:登录测试,检查相关信息是否被记录

      创建ORACLE登录触发器,记录相关信息,但对IP地址的记录会有困难1.建表LOGON_TABLE2.建触发器CREATE TRIGGER TRI_LOGON AFTER LOGON ON DATABASEBEGIN INSERT INTO LOGON_TABLE VALUES (SYS_CONTEXT(‘USERENV‘,‘SESSION_USER‘),SYSDATE);END;
补充操作说明:触发器与AUDIT会有相应资源开消,请检查系统资源是否充足。特别是RAC环境,资源消耗较大。
命令:select count(*) from dba_triggers t wheretrim(t.triggering_event) = trim(‘LOGON‘),回显中COUNT值大于等于1

十六. 检查是否记录安全事件日志
判断条件:做相关测试,检查是否记录成功
创建ORACLE登录触发器,记录相关信息,但对IP地址的记录会有困难
1.建表LOGON_TABLE
2.建触发器
CREATE TRIGGER TRI_LOGON
  AFTER LOGON ON DATABASE
BEGIN
  INSERT INTO LOGON_TABLE VALUES(SYS_CONTEXT(‘USERENV‘, ‘SESSION_USER‘),
SYSDATE);
END;

补充操作说明:命令:select count(*) from dba_triggers t wheretrim(t.triggering_event) = trim(‘LOGON‘)。回显中COUNT值大于等于1

十七. 检查是否设置记住历史密码次数
判断条件:重用修改5次内的密码,将不能成功。profile中对于次数有定义

      为用户建profile,指定PASSWORD_REUSE_MAX为5
补充操作说明:当前使用的密码,必需在密码修改5次后才能再次被使用
命令:select limit from dba_profiles t where resource_name= ‘PASSWORD_REUSE_MAX‘,回显中default值变成5

十八. 检查是否对用户的属性进行控制
判断条件:1. 可通过设置profile来限制数据库账户口令的复杂程度,口令生存周期和账户的锁定方式等。
2. 可通过设置profile来限制数据库账户的CPU资源占用。

      为每个新用户赋予非默认的profile。

可通过下面类似命令来创建profile,并把它赋予一个用户
CREATE PROFILE app_user2 LIMIT
  FAILED_LOGIN_ATTEMPTS 6
   PASSWORD_LIFE_TIME 60
   PASSWORD_REUSE_TIME 60
   PASSWORD_REUSE_MAX 5
   PASSWORD_VERIFY_FUNCTIONverify_function
   PASSWORD_LOCK_TIME 1/24
   PASSWORD_GRACE_TIME 90;
ALTER USER jd PROFILE app_user2;
补充操作说明:命令:select * from dba_users t where profile notin (‘DEFAULT‘,‘MONITORING_PROFILE‘),回显中的值大于0

十九. 检查是否存在dvsys用户dbms_macadm对象
判断条件:以DBA用户登陆,不能查询其它用户下面的数据
Oracle Data Vault是作为数据库安全解决方案的一个单独选件,主要功能是将数据库管理账户的权限和应用数据访问的权限分开, Data Vault可限制有DBA权限的用户访问敏感数据。设置比较复杂,具体细节请参考Oracle文档。
补充操作说明:命令:select count(*) from dba_users whereusername=‘DVSYS‘,回显中COUNT值等于1


oracle加固

标签:listener   oracle   password   

原文地址:http://sjitwant.blog.51cto.com/3661219/1692168

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!