oracle安全基线.docx
- 文档编号:5777132
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:26
- 大小:571.92KB
oracle安全基线.docx
《oracle安全基线.docx》由会员分享,可在线阅读,更多相关《oracle安全基线.docx(26页珍藏版)》请在冰豆网上搜索。
oracle安全基线
Oracle数据库安全配置基线加固操作指导书
佛山供电局信息中心
2014年4月
一.1Oracle数据库安全配置基线
一.1.1确保数据库多余用户已锁定
基线要求
查看Oracle用户列表,确保数据库多余用户已锁定
基线标准
SYS/SYSMAN/SYSTEM和单独创建的业务账户外,其余账户均已锁定
检查方法
利用sqlplus登录进oracle数据库
执行下列语句查看所有用户:
select*fromall_users;
加固方法
根据需要执行下列语句:
alteruserusername(需要锁定的用户名)lock;(锁定用户)
dropuserusername(需要删除的用户名)cascade;(删除用户)一般不要去删除
一.1.2口令加密
基线要求
口令加密
基线标准
Sqlnet.ora文件中的ORA_ENCRYPT_LOGIN=TRUE
init.ora文件中的dblink_encrypt_long=TRUE
检查方法
检测$ORACLE_HOME\network\admin目录下的Sqlnet.ora文件中的ORA_ENCRYPT_LOGIN参数确保设为TRUE,保证客户端口令加密
检测$ORACLE_HOME/dbs目录下的init.ora文件中的dblink_encrypt_long参数确保设为TRUE,保证服务器口令加密
加固方法
设置$ORACLE_HOME\network\admin目录下的Sqlnet.ora文件中的ORA_ENCRYPT_LOGIN参数为TRUE,保证客户端口令加密
设置$ORACLE_HOME/dbs目录下的init.ora文件中的dblink_encrypt_long参数为TRUE,保证服务器口令加密
一.1.3数据库SYSDBA帐号登录控制
基线要求
数据库SYSDBA帐号登录控制
基线标准
禁止远程登录(同时禁止远程和自动登录会sys用户无法登录数据库)
检查方法
1、远程登录
利用sqlplus登录进oracle数据库
使用showparameter命令来检查参数REMOTE_LOGIN_PASSWORDFILE确保设置为NONE。
执行语句:
ShowparameterREMOTE_LOGIN_PASSWORDFILE;
2、自动登录
在服务器上查找SQLNET.ORA文件,一般是$ORACLE_HOME/network/admin目录中,不过有时路径会不一样(按实际情况查找,直接采用搜索功能也可)。
查看该文件SQLNET.AUTHENTICATION_SERVICES的值,确保为none
加固方法
1、远程登录
在spfile中设置REMOTE_LOGIN_PASSWORDFILE=NONE来禁止SYSDBA用户从远程登陆。
alterspfileREMOTE_LOGIN_PASSWORDFILE=NONE
执行下列四个步骤:
1、conn/assysdba;
2、altersystemsetremote_login_passwordfile=nonescope=spfile;
3、shutdownimmediate;(注意这里要重启才生效)
4、Startup;
2、自动登录
在$ORACLE_HOME\network\admin目录下的Sqlnet.ora文件中设置SQLNET.AUTHENTICATION_SERVICES=(NONE)
一.1.4口令应有复杂度要求
基线要求
数据库系统管理用户身份标识应具有不易被冒用的特点,口令应有复杂度要求并定期更换;
基线标准
PASSWORD_LIFE_TIME:
口令有效时间
password_life_time=90
PASSWORD_LOCK_TIME:
登录超过有效次数锁定时间password_lock_time=10*1/1440
PASSWORD_REUSE_MAX:
口令历史记录保留次数
password_reuse_max=5
PASSWORD_REUSE_TIME:
口令再次被使用的间隔时间
password_reuse_time=365
检查方法
利用sqlplus登录进oracle数据库
查询视图dba_profiles和dba_usres来检查profile确保已修改。
执行语句查看:
select*fromdba_profilesorderbyPROFILE;
加固方法
密码长度检测:
创建函数
CREATEORREPLACEFUNCTIONmy_verify_function
(usernamevarchar2,
passwordvarchar2,
old_passwordvarchar2)
RETURNbooleanIS
nboolean;
minteger;
differinteger;
isdigitboolean;
ischarboolean;
ispunctboolean;
digitarrayvarchar2(20);
punctarrayvarchar2(25);
chararrayvarchar2(52);
BEGIN
digitarray:
='0123456789';
chararray:
='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
punctarray:
='!
"#$%&()``*+,-/:
;<=>?
_';
--Checkifthepasswordissameastheusername
IFNLS_LOWER(password)=NLS_LOWER(username)THEN
raise_application_error(-20001,'Passwordsameasorsimilartouser');
ENDIF;
--Checkfortheminimumlengthofthepassword
IFlength(password)<8THEN
raise_application_error(-20002,'Passwordlengthlessthan4');
ENDIF;
--Checkifthepasswordistoosimple.Adictionaryofwordsmaybe
--maintainedandacheckmaybemadesoasnottoallowthewords
--thataretoosimpleforthepassword.
IFNLS_LOWER(password)IN('welcome','database','account','user','password','oracle','computer','abcd')THEN
raise_application_error(-20002,'Passwordtoosimple');
ENDIF;
--Checkifthepasswordcontainsatleastoneletter,onedigitandone
--punctuationmark.
--1.Checkforthedigit
isdigit:
=FALSE;
m:
=length(password);
FORiIN1..10LOOP
FORjIN1..mLOOP
IFsubstr(password,j,1)=substr(digitarray,i,1)THEN
isdigit:
=TRUE;
GOTOfindchar;
ENDIF;
ENDLOOP;
ENDLOOP;
IFisdigit=FALSETHEN
raise_application_error(-20003,'Passwordshouldcontainatleastonedigit,onecharacterandonepunctuation');
ENDIF;
--2.Checkforthecharacter
<
ischar:
=FALSE;
FORiIN1..length(chararray)LOOP
FORjIN1..mLOOP
IFsubstr(password,j,1)=substr(chararray,i,1)THEN
ischar:
=TRUE;
GOTOfindpunct;
ENDIF;
ENDLOOP;
ENDLOOP;
IFischar=FALSETHEN
raise_application_error(-20003,'Passwordshouldcontainatleastone
digit,onecharacterandonepunctuation');
ENDIF;
--3.Checkforthepunctuation
<
ispunct:
=FALSE;
FORiIN1..length(punctarray)LOOP
FORjIN1..mLOOP
IFsubstr(password,j,1)=substr(punctarray,i,1)THEN
ispunct:
=TRUE;
GOTOendsearch;
ENDIF;
ENDLOOP;
ENDLOOP;
IFispunct=FALSETHEN
raise_application_error(-20003,'Passwordshouldcontainatleastone
digit,onecharacterandonepunctuation');
ENDIF;
<
--Checkifthepassworddiffersfromthepreviouspasswordbyatleast
--3letters
IFold_passwordISNOTNULLTHEN
differ:
=length(old_password)-length(password);
IFabs(differ)<3THEN
IFlength(password) m: =length(password); ELSE m: =length(old_password); ENDIF; differ: =abs(differ); FORiIN1..mLOOP IFsubstr(password,i,1)! =substr(old_password,i,1)THEN differ: =differ+1; ENDIF; ENDLOOP; IFdiffer<3THEN raise_application_error(-20004,'Passwordshoulddifferbyat least3characters'); ENDIF; ENDIF; ENDIF; --Everythingisfine;returnTRUE; RETURN(TRUE); END; / 引用密码复杂度函数: alterprofileDEFAULTlimitPASSWORD_VERIFY_FUNCTIONmy_verify_function; 临时性取消密码长度策略命令: alterprofileDEFAULTlimitPASSWORD_VERIFY_FUNCTIONNULL; 口令有效期: 修改命令: ALTERPROFILEDEFAULTLIMITPASSWORD_LIFE_TIME180; 查询命令: select*fromdba_profileswhereresource_name='PASSWORD_LIFE_TIME'; 一.1.5应启用登录失败处理功能 基线要求 应启用登录失败处理功能,可采取结束会话、限制非法登录次数和自动退出等措施; 基线标准 连续5次登录失败后锁定用户 检查方法 利用sqlplus登录进oracle数据库。 执行语句查看: select*fromdba_profilesorderbyPROFILE; 查看FAILED_LOGIN_ATTEMPTS的值。 加固方法 执行下列语句: ALTERPROFILEDEFAULTLIMIT FAILED_LOGIN_ATTEMPTS5; 修改后: 再次查看 一.1.6网络通信加密 基线要求 网络通信加密 基线标准 启用网络通信加密 检查方法 如果采取远程管理,确保采用加密的方式。 Oracle远程管理加密可以通过OracleNetManager(网络管理器)工具实现,确保使用该工具进行远程管理 加固方法 Oracle远程管理通过OracleNetManager(网络管理器)工具实现 一.1.7应对数据库主机管理员帐号进行控制 基线要求 应对数据库主机管理员帐号进行控制。 基线标准 禁止使用oracle或administrator作为数据库主机管理员帐号 检查方法 首先,利用sqlplus登录进oracle数据库 方法一: cmd--输入命令sqlplus/assysdba进入到数据库中 方法二: 登录方式一: 1、打开oracle客户端: 2、登录oracle: 3、注意: hoststring(主机字符串)就是准备登录的数据库名,一般默认登录开启的那个数据库,所以通常不用填。 4、登入后界面: 运行---输入sqlplusw。 加固方法 一.1.8依据安全策略控制用户对资源的访问 基线要求 应启用访问控制功能,依据安全策略控制用户对资源的访问; 基线标准 1、数据库相关文件目录权限设置 2、关闭XDB服务,禁止PL/SQL外部过程(独立) 3、数据库安装、数据文件、备份等目录的权限应<755,windows平台则everyone用户没有写权限; 检查方法 1、检查数据库安装、数据文件、备份等目录,权限应<=755,windows则everyone用户没有写权限; 2、确保没有开启XDB服务、不准许PL/SQL外部过程: a)在SQL*Plus: showparameterdispatcher;或者通过安信通数据库扫描,查看确保没有“开启XDB服务”漏洞。 b)查看侦听器配置文件$ORACLE_HOME\network\admin目录下的LISTENER.ORA文件,是否存在ExtProc项,或者通过安信通数据库扫描,查看确保没有“注册了ExtProc服务”漏洞。 " 加固方法 1、linux下用chmod设置相应目录权限 2.修改dispatchers参数, Altersystemsetdispatchers=’’scope=spfile; 3、编辑$ORACLE_HOME\network\admin目录下的LISTENER.ORA文件,删除或注释如下内容: icache_extproc、PLSExtproc、Extproc 一.1.9实现管理用户的权限分离 基线要求 应根据管理用户的角色分配权限,实现管理用户的权限分离,仅授予管理用户所需的最小权限; 基线标准 应用账户没有DBA组权限 public角色权限设置 检查方法 1、查看确保不存在应用账户属于DBA组权限, 在SQL*Plus: selectgranteefromdba_role_privswheregranted_role='DBA'andgranteenotin('SYS','SYSTEM','CTXSYS','WKSYS','SYSMAN'); 2、使用命令: select*fromdba_role_privs;查看用户 对于如下权限: EXECUTE_CATALOG_ROLE DELETE_CATALOG_ROLE DBA_(all), 查看确保只赋DBAs(dba_role_privs) 3、使用命令,connsys/change_on_install; select*fromV$PWFILE_USERS;检查哪些用户具有SYSDBA、SYSOPER权限 4、使用命令查看哪些权限授予给了public角色: SELECTGRANTOR,OWNER,TABLE_NAME,PRIVILEGEFROMDBA_TAB_PRIVSWHEREGRANTEE='PUBLIC'; 确保PUBLIC用户组没有不需要的权限和角色(如: UTL_SMTP、UTL_TCP、UTL_HTTP、UTL_FILE、DBMS_RANDON、DBMS_SQL、DBMS_SYS_SQL、DBMS_BACKUP_RESTORE)(注: 允许部分模块单独开放) 加固方法 1、锁定不应该赋予dba权限的应用账户 alteruserusername(需要锁定的用户名)lock;(锁定用户) 2、使用命令撤销用户相应权限,如revokeEXECUTE_CATALOG_ROLEfrom<用户名> 3、使用命令,connsys/change_on_install; select*fromV$PWFILE_USERS;检查哪些用户具有SYSDBA、SYSOPER权限 并记录结果。 4、从PUBLIC用户组撤销所有不需要的权限和角色(如: UTL_SMTP、UTL_TCP、UTL_HTTP、UTL_FILE、DBMS_RANDON、DBMS_SQL、DBMS_SYS_SQL、DBMS_BACKUP_RESTORE) 使用revokeselect(权限)on表名frompublic撤销相应权限 一.1.10应对数据库数据字典保护 基线要求 应对数据库数据字典保护。 基线标准 限制只有SYSDBA权限的用户才能访问数据字典 检查方法 利用sqlplus登录进oracle数据库。 使用showparameter命令来检查参数O7_DICTIONARY_ACCESSIBILITY确保设置为FALSE。 执行语句: ShowparameterO7_DICTIONARY_ACCESSIBILITY; 加固方法 通过设置下面初始化参数 执行: conn/assysdba; altersystemsetO7_DICTIONARY_ACCESSIBILITY=FALSEscope=spfile; shutdownimmediate;(注意这里要重启才生效) Startup; 修改后: ShowparameterO7_DICTIONARY_ACCESSIBILITY; 一.1.11确保安全审计配置符合安全审计策略的要求 基线要求 应检查主要数据库管理系统,查看确保安全审计配置符合安全审计策略的要求; 基线标准 审计记录符合安全策略要求 检查方法 1、查看确保开启审计,在SQL*Plus: Selectvaluefromv$parameterwherename='audit_trail'; 2、审计日志应包括: 登录日志记录(建议),并检查$ORACLE_BASE/admin/adump目录下确保有数据 3、日志审计策略应OS级别,在SQL*Plus: Selectvaluefromv$parameterwherename='audit_trail'; (注: 此项会导致日志暴涨,严重影响数据库性能) 4、通过第三方审计管理数据库,包括Pl/sql工具 (南网IT安全基线) 加固方法 1、执行语句: Conn/assysdba; altersystemsetaudit_trail=db(os)scope=spfile; 修改后要重启: shutdownimmediate; Startup; 查看: showparameteraudit_trail; 通过设置参数audit_trail=db或os来启用数据库审计 注意: (DB启用数据库审计并引导所有审计记录到数据库的审计跟踪 OS启用数据库审计并引导所有审计记录到操作系统的审计跟踪。 可以用AUDIT_FILE_DEST 初始化参数来指定审计文件存储的目录。 2、createtablelogin_log--登入登出信息表 ( session_idintnotnull,--sessionid login_on_timedate,--登入时间 login_off_timedate,--登出时间 user_in_dbvarchar2(30),--登入的dbuser machinevarchar2(20),--机器名 ip_addressvarchar2(20),--ip地址 run_programvarchar2(20)--以何程序登入 ); createorreplacetriggerlogin_on_info--记录登入信息的触发器 afterlogonondatabase Begin insertintologin_log(session_id,login_on_time,login_of f_time,user_in_db,machine,ip_address,run_program) selectAUDSID,sysdate,null,sys.login_user,machine,SYS_CO NTEXT('USERENV','IP_ADDRESS'),program fromv$sessionwhereAUDSID=USERENV('SESSIONID');--當前SESSION END; createorreplacetriggerlogin_off_info--记录登出信息的触发器 beforelogoffondatabase Begin updatelogin_logsetlogin_off_time=sysdate wheresession_id=USERENV('SESSIONID');--当前SESSION exception whenothersthen null
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- oracle 安全 基线