Oracle安全手册

Oracle账户密码HASH在不同机器中是一样的
Oracle安装单个补丁的命令是opatch

1.数据库主机管理员账号

控制默认主机管理员账号,禁止使用orale作为数据库主机管理员账号
查看启动进程用户是否为oracle:

$ps -ef |grep ora_

删除或多顶与数据库运行/维护等工作无关的账号

Sql>select username from dba_users where account)status='OPEN'

2.删除无用账号

加固方法:锁定无用账号

SQL>alter user 用户名 account lock;

解锁

SQL>alter user 用户名 account unlock;

备注:可通过查询密码串列出使用默认密码的账户

3.默认账号修改口令

修改默认账户和密码
Oracle 10g

SQL>select username,password,account_status,profile from dba_users;

Oracle 11g 以上检查默认密码:

SQL>SELECT * FROM DBA_USERS_WITH_DEFPWD;

加固方法
修改密码:SQL>alter user 用户名 idetify by ‘密码’

4.限制数据库SYSDBA账号

限制具备数据库超级管理员(SYSDBA)权限的用户远程登陆及自动登陆
检测方法
检查remote_login)passwordfile 的值是否为NONE

SQL>show parameter REMOTE_LOGIN_PASSWORDFILE

加固方法

SQL> Alter system set remote_login_passwordfile=NONE scope=spfile

5.口令策略

对于采用静态口令认证技术的数据库,需对口令策略进行安全设置。
检测方法:查看各项值是否符合:
密码复杂度校验:PASSWORD_VERIFY_FUNCTION function_namme
密码到期宽限天数:PASSWORD_GRACE_TIME 5
密码使用周期天数:PAASSWORD_LIFE_TIME 180
重用密码最大数量:PASSWORD_REUSE_MAX 5

SQL>select resource_name,limit from dba_profile where profile='DEFAULT' and resource_type ='PASSWORD';

加固方法:
需要执行$ORACLE_HOME/rdbms/admin/utlpwdmg.sql建立密码校验函数
$sqlplus “/ as sysdba” @$ORACLE_HOME/rdbms/admin/utlpwdmg.sql
然后修改缺省profile:

#SQL>alter profile DEFAULT limit PASSWORD_LIFE_TIME 180 PASSWORD

………………..

6.账号锁定策略

尝试次数5次
锁定账户天数:PASSWORD_LOCK_TIME .0069
连续失败次数:FAILED_LOGIN_ATTEMPTS 5

SQL>select resource_name,limit from dba_profiles where profile='DEFAULT' and resource_tpe='PASSWORD';

加固方法
修改缺省profile:

SQL>alter profile default limit FAILED_LOGIN_ATTEMPTS 5 PASSWORD_LOCK_TIME 10/1440;

锁定账户的时间单位为天,所以计算10分钟为0.00694

7.public权限

清理public各种默认权限,攻击者可能利用程序包的public 角色执行权限获得非法访问,威胁系统安全/
检测方法

UTL_FILE,UTL_TCP,UTL_HTTP,UTL_SMTP,DBMS_LOB,DBMS_SYS_SQL
SQL>select table_name from dba_tab_privs where grantee='PUBLIC' and privilege='EXECUTE' and table_name in ('
UTL_FILE','UTL_TCP,UTL_HTTP,UTL_SMTP,DBMS_LOB,DBMS_SYS_SQL',dbms_job','dbms_scheduler'

8.数据库角色管理

使用数据库角色来管理对象的权限
加固方法:
使用create role 命令创建角色并赋予系统/对象或Role的权限到此角色

SQL>create role Role_ZXQ;
Grant create table to Role_ZXQ;
Grant EXP_FULL_DATABASE table to Role_ZXQ;

再将此角色赋予对象“

grant Roles_ZXQ to app_user;

回退方法:
删除创建角色:

SQL>drop role …

9.启用日志审计

数据库应配置日志功能,记录对于数据库相关的安全事件
SQL>show parameter audit
检查AUDIT_TRAIL取值是否启用,是否设置蛇和级别,在syslog里是否记录对应的事件

加固方法:设置AUDIT_TRAIL-OS ,记录到系统日志中/

SQL>alter system set audit_trail='OS' scope =spfile

回退方法:

SQL>alter system set audit_trail='NONE' scope =spfile

10.日志记录及保存

打开sys日志开关:

SQL>alter system set audit+sys_operations=true scope=spfile

设置审核级别:

SQL>alter system set audit_syslog_level='user.notice' scope=spfile

打开系统日志:

#echo user.notice /var/log/ora_dba.log>>/etc/syslog.conf

关闭系统日志

SQL>alter system set audit+sys_operations=false scope=spfile

取消审核级别

SQL>alter system set audit_syslog_level=''scope=spfile

关闭系统日志

#vi /etc/syslog.conf

11.日志文件保护

设置日志访问权限
加固方法

$chmod o-rw filename
$chmod u-s filename

12.开启监听器日志

开启监听器日志功能是为了捕获监听器命令和防止密码被暴力破解
检测方法
查看$ORACLE_HOME/network/admin/listener.ora中是否设置日志舰艇,
例如

LOGGING_LISTERNER=ON
LOG_FILE_LISTER=1.log
LOG_DIRECTORY_LISTER=/ora/prod/100.1.0/Db1/network/admin

也可执行下列命令差:

$lsnrctl show log_status
$lsnrctl show log_file

加固方法:
切换到管理员执行

$ORACLE_HOKE/bin/lsnrctl
LSNRCTL>set log_dirctory >oracle_home路径>network/admin
LSNRCTL>set log_file <sid名称>.log
LSNRCTL>set log_status on
LSNRCTL>save config

13.数据字典保护

启用数据字典保护,只有SYSDBA用户才能访问数据查字典基础表
检测方法:检查参数O7_DICTIONARY_ACCESSIBILITY是否设置为FALSE

SQL>show paramter O7_DICTIONARY_ACCESSIBILITY

14.监听器口令

为数据库监听器的关闭和启动设置密码
检测方法:
检查$ORACLE_HOME/network/admin/lister/ora文件中是否设置参数

PASSWORDS_LISTSENER
$cat $ORACLE HOME/network/admin/listener.ora

加固方法“
设置密码

$lsnrctl
LSNRCTL>change_password
Old password:
New password:密码
Reenter new password:密码
LSNRCTL>save_config

回退方法
设置为空的方法

$lsnrctl
LSNRCTL>change_passord
Old password:原密码
New password:空
Reenter new password:空
LSNRCTL>save_config

15.监听服务连接超时

设置监听器连接超时,连接后未进行请求则断开连接
检查方法:检查$ORACLE_HOME/network/admin/listener.ora文件中是否设置参数INBOUND_CONNECT_TIMEOUT_listener_name
加固方法:
编辑$ORACLE_HOME/network/adin/listenet/ora.在listener.ora文件中手动加入下面这样一行

INBOUND_CONNECT_TIMEOUT_listener_name=3

回退方法:删除这样一行INBOUND_CONNECT_TIMEOUT_listener_name=3

16.监听器管理限制

17.禁止远程操作系统认证

设置登录认证方式禁止远程操作系统认证。攻击者可能利用数据库对远程操作系统的信任关系威胁系统安全
检测方法:SQL?show parameter REMOTE_OS_AUTHENT
加固方法:设置禁止远程操作系统认证

SQL>alter system set REMOTE_OS_AUTHENT=FALSE scope=file

18.网络连接限制

设置网络连接限制,只允许安全的IP地址链接数据库进行操作。
检测方法:检查$ORACLE_HOME/network/admin/sqlnet/ora文件中是否设置参数tcp.validnode_checking和tcp.invited_nodes
加固方法:修改$ORACLE_HOME/network/admin/sqlnet/ora文件

tcp.validnode_checking=YES
tcp.invited_nodes=(192.168.0.1,10.180.*,10.111.0.0/16)

关闭方法

tcp.validnode_checking=YES