Oracle漏洞扫描安全加固.docx
《Oracle漏洞扫描安全加固.docx》由会员分享,可在线阅读,更多相关《Oracle漏洞扫描安全加固.docx(19页珍藏版)》请在冰豆网上搜索。
Oracle漏洞扫描安全加固
关于操作系统和数据库合规检查漏洞的解决方案Oracle数据库分册
适用软件版本
Oracle10g、11g
适用硬件版本
主题
关于操作系统和数据库合规检查漏洞的解决方案Oracle数据库分册
1、问题描述与原因:
Oracle数据库在合规检查时被扫描出漏洞,要求对这些漏洞进行解决。
2、应对措施:
对存在漏洞进行定制的安全加固操作。
3、执行条件/注意事项:
Ø加固前确保服务器、数据库、网管运行均正常。
最好重启下服务器、数据库和网管查看重启后网管是否能运行正常。
如果加固前服务器本身有问题,加固后服务器运行异常会加大排查难度。
Ø本解决方案执行完成后,需要重启Oracle数据库来生效某些操作。
Ø本解决方案不必完全执行,请根据系统扫描出的漏洞选择对应的漏洞条目进行操作。
Ø如无特殊说明,本文中的执行用户均为oracle
4、操作步骤:
漏洞清单(单击可跳转):
(注:
漏洞名称与配置项信息中的配置项名称对应。
)
漏洞1.检查是否对用户的属性进行控制(5)
漏洞2.检查是否配置Oracle软件账户的安全策略
(2)
漏洞3.检查是否启用数据字典保护
漏洞4.检查是否在数据库对象上设置了VPD和OLS(6)
漏洞5.检查是否存在dvsys用户dbms_macadm对象(14)
漏洞6.检查是否数据库应配置日志功能(11)
漏洞7.检查是否记录操作日志(13)
漏洞8.检查是否记录安全事件日志(7)
漏洞9.检查是否根据业务要求制定数据库审计策略
漏洞10.检查是否为监听设置密码
漏洞11.检查是否限制可以访问数据库的地址
(1)
漏洞12.检查是否使用加密传输(4)
漏洞13.检查是否设置超时时间(15)
漏洞14.检查是否设置DBA组用户数量限制(3)
漏洞15.检查是否删除或者锁定无关帐号
漏洞16.检查是否限制具备数据库超级管理员(SYSDBA)权限的用户远程登录(10)
漏洞17.检查口令强度设置(17)
漏洞18.检查帐户口令生存周期(12)
漏洞19.检查是否设置记住历史密码次数(8)
漏洞20.检查是否配置最大认证失败次数
漏洞21.检查是否在配置用户所需的最小权限(9)
漏洞22.检查是否使用数据库角色(ROLE)来管理对象的权限(16)
漏洞23.检查是否更改数据库默认帐号的密码
执行Oracle安全加固操作前备份文件:
bash-3.2$cp$ORACLE_HOME/network/admin/listener.ora$ORACLE_HOME/network/admin/listener.ora.org
bash-3.2$cp$ORACLE_HOME/network/admin/sqlnet.ora$ORACLE_HOME/network/admin/sqlnet.ora.org
Oracle数据库漏洞的解决方案全部执行完成后,需要重启Oracle实例来生效某些操作。
漏洞1.检查是否对用户的属性进行控制
类型:
Oracle数据库类
问题:
SQL>selectcount(t.username)fromdba_userstwhereprofilenotin('DEFAULT','MONITORING_PROFILE');
COUNT(T.USERNAME)-----------------0
解决方案:
暂时不处理。
漏洞2.检查是否配置Oracle软件账户的安全策略
类型:
Oracle数据库类
问题:
略
解决方案:
暂时不处理
漏洞3.检查是否启用数据字典保护
类型:
Oracle数据库类
问题:
SQL>selectvaluefromv$parameterwherenamelike'%O7_DICTIONARY_ACCESSIBILITY%';selectvaluefromv$parameterwherenamelike'%O7_DICTIONARY_ACCESSIBILITY%'
*
ERRORatline1:
ORA-01034:
ORACLEnotavailable
ProcessID:
0
SessionID:
0Serialnumber:
0
解决方案:
在数据库启动的情况下,通过下面的命令检查o7_dictionary_accessibility的参数值:
bash-3.2$sqlplussystem/oracle@
SQL*Plus:
Release10.2.0.4.0-ProductiononThuJan911:
33:
562014
Copyright(c)1982,2007,Oracle.AllRightsReserved.
Connectedto:
OracleDatabase10gEnterpriseEditionRelease10.2.0.4.0-Production
WiththePartitioning,OLAP,DataMiningandRealApplicationTestingoptions
SQL>showparametero7_dictionary_accessibility;
NAMETYPEVALUE
-----------------------------------------------------------------------------
O7_DICTIONARY_ACCESSIBILITYbooleanFALSE
检查出默认的结果是FALSE后,使用下面的命令退出SQL*PLUS:
SQL>exit
DisconnectedfromOracleDatabase11gEnterpriseEditionRelease11.2.0.3.0-64bitProduction
WiththePartitioning,OLAP,DataMiningandRealApplicationTestingoptions
漏洞4.检查是否在数据库对象上设置了VPD和OLS
类型:
Oracle数据库类
问题:
SQL>selectcount(*)fromv$vpd_policy;
COUNT(*)
----------
0
解决方案:
暂时不处理。
漏洞5.检查是否存在dvsys用户dbms_macadm对象
类型:
Oracle数据库类
问题:
SQL>selectcount(*)fromdba_userswhereusername='DVSYS';
COUNT(*)
----------
0
解决方案:
暂时不处理。
漏洞6.检查是否数据库应配置日志功能
类型:
Oracle数据库类
问题:
SQL>selectcount(*)fromdba_triggerstwheretrim(t.triggering_event)=trim('LOGON');
COUNT(*)
----------
0
解决方案:
暂时不处理。
漏洞7.检查是否记录操作日志
类型:
Oracle数据库类
问题:
SQL>selectvaluefromv$parametertwheret.name='audit_trail';
selectvaluefromv$parametertwheret.name='audit_trail'
*
ERRORatline1:
ORA-01034:
ORACLEnotavailable
ProcessID:
0
SessionID:
0Serialnumber:
0
解决方案:
暂时不处理。
漏洞8.检查是否记录安全事件日志
类型:
Oracle数据库类
问题:
SQL>selectcount(*)fromdba_triggerstwheretrim(t.triggering_event)=trim('LOGON');COUNT(*)
----------
0
解决方案:
暂时不处理。
漏洞9.检查是否根据业务要求制定数据库审计策略
类型:
Oracle数据库类
问题:
SQL>selectvaluefromv$parametertwheret.name='audit_trail';
selectvaluefromv$parametertwheret.name='audit_trail'
*
ERRORatline1:
ORA-01034:
ORACLEnotavailable
ProcessID:
0
SessionID:
0Serialnumber:
0
解决方案:
暂时不处理。
漏洞10.检查是否为监听设置密码
类型:
Oracle数据库类
问题:
$cat`find$ORACLE_HOME-namesqlnet.ora`|grep-v"#"|grep-v"^$"find:
0652-081cannotchangedirectoryto:
:
Thefileaccesspermissionsdonotallowthespecifiedaction.
$cat`find$ORACLE_HOME-namelistener.ora`|grep-v"#"|grep-v"^$"find:
0652-081cannotchangedirectoryto:
:
Thefileaccesspermissionsdonotallowthespecifiedaction.SID_LIST_LISTENER=(SID_LIST=(SID_DESC=(SID_NAME=PLSExtProc)(ORACLE_HOME=/oracle/app/oracle/dbhome_1)(PROGRAM=extproc))(SID_DESC=(GLOBAL_DBNAME=minos)(ORACLE_HOME=/oracle/app/oracle/dbhome_1)(SID_NAME=minos)))LISTENER=(DESCRIPTION_LIST=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=100.92.255.141)(PORT=1521))))ADR_BASE_LISTENER=/oracle/app/oracle
解决方案:
bash-3.2$lsnrctl
LSNRCTLforIBM/AIXRISCSystem/6000:
Version11.2.0.3.0-Productionon08-JAN-201415:
11:
21
Copyright(c)1991,2011,Oracle.Allrightsreserved.
WelcometoLSNRCTL,type"help"forinformation.
LSNRCTL>change_password
Oldpassword:
<如果之前没有密码则这里不填,直接按Enter键>
Newpassword:
Reenternewpassword:
Connectingto(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.92.243.82)(PORT=1521)))
PasswordchangedforLISTENER
Thecommandcompletedsuccessfully
LSNRCTL>save_config
Connectingto(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.92.243.82)(PORT=1521)))
SavedLISTENERconfigurationparameters.
ListenerParameterFile/oracle/app/oracle/11.2.0.3/dbhome_1/network/admin/listener.ora
OldParameterFile/oracle/app/oracle/11.2.0.3/dbhome_1/network/admin/listener.bak
Thecommandcompletedsuccessfully
LSNRCTL>exit
bash-3.2$
设置完成后通过下面的命令检查:
bash-3.2$cat$ORACLE_HOME/network/admin/listener.ora|grep"^PASSWORDS"
有输出则说明已经设置成功了。
漏洞11.检查是否限制可以访问数据库的地址
类型:
Oracle数据库类
问题:
$cat`find$ORACLE_HOME-namesqlnet.ora`|grep-v"#"|grep-v"^$"find:
0652-081cannotchangedirectoryto:
:
Thefileaccesspermissionsdonotallowthespecifiedaction.
$cat`find$ORACLE_HOME-namelistener.ora`|grep-v"#"|grep-v"^$"find:
0652-081cannotchangedirectoryto:
:
Thefileaccesspermissionsdonotallowthespecifiedaction.SID_LIST_LISTENER=(SID_LIST=(SID_DESC=(SID_NAME=PLSExtProc)(ORACLE_HOME=/oracle/app/oracle/dbhome_1)(PROGRAM=extproc))(SID_DESC=(GLOBAL_DBNAME=minos)(ORACLE_HOME=/oracle/app/oracle/dbhome_1)(SID_NAME=minos)))LISTENER=(DESCRIPTION_LIST=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=100.92.255.141)(PORT=1521))))ADR_BASE_LISTENER=/oracle/app/oracle
解决方案:
检查$ORACLE_HOME/network/admin/sqlnet.ora文件中是否有以下行:
TCP.VALIDNODE_CHECKING=YES
TCP.INVITED_NODES=(,,…)
其中是允许访问本数据库的IP地址。
如果没有,则根据需要在文件中添加,随后重启数据库。
重启完成后,则数据库只允许TCP.INVITED_NODES列出的IP来访问。
如果不存在sqlnet.ora文件,请使用以下命令创建此文件后再实施上面的操作:
bash-3.2$touch$ORACLE_HOME/network/admin/sqlnet.ora
漏洞12.检查是否使用加密传输
类型:
Oracle数据库类
问题:
$cat`find$ORACLE_HOME-namesqlnet.ora`|grep-v"#"|grep-v"^$"find:
0652-081cannotchangedirectoryto:
:
Thefileaccesspermissionsdonotallowthespecifiedaction.
$cat`find$ORACLE_HOME-namelistener.ora`|grep-v"#"|grep-v"^$"find:
0652-081cannotchangedirectoryto:
:
Thefileaccesspermissionsdonotallowthespecifiedaction.SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=PLSExtProc)
(ORACLE_HOME=/oracle/app/oracle/dbhome_1)
(PROGRAM=extproc)
)
(SID_DESC=
(GLOBAL_DBNAME=minos)
(ORACLE_HOME=/oracle/app/oracle/dbhome_1)
(SID_NAME=minos)
)
)
LISTENER=
(DESCRIPTION_LIST=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=100.92.255.141)(PORT=1521))
)
)
ADR_BASE_LISTENER=/oracle/app/oracle
解决方案:
暂时不处理。
漏洞13.检查是否设置超时时间
类型:
Oracle数据库类
问题:
$cat`find$ORACLE_HOME-namesqlnet.ora`|grep-v"#"|grep-v"^$"
find:
0652-081cannotchangedirectoryto:
:
Thefileaccesspermissionsdonotallowthespecifiedaction.
$cat`find$ORACLE_HOME-namelistener.ora`|grep-v"#"|grep-v"^$"
find:
0652-081cannotchangedirectoryto:
:
Thefileaccesspermissionsdonotallowthespecifiedaction.
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=PLSExtProc)
(ORACLE_HOME=/oracle/app/oracle/dbhome_1)
(PROGRAM=extproc)
)
(SID_DESC=
(GLOBAL_DBNAME=minos)
(ORACLE_HOME=/oracle/app/oracle/dbhome_1)
(SID_NAME=minos)
)
)
LISTENER=
(DESCRIPTION_LIST=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=100.92.255.141)(PORT=1521))
)
)
ADR_BASE_LISTENER=/oracle/app/oracle
解决方案:
通过下面的命令检查是否设置了SQLNET.EXPIRE_TIME的参数值为10:
bash-3.2$grep-i"SQLNET.EXPIRE_TIME"$ORACLE_HOME/network/admin/sqlnet.ora
如果没有设置,在$ORACLE_HOME/network/admin/sqlnet.ora文件中添加一行:
SQLNET.EXPIRE_TIME=10
随后重新启动监听和数据库。
如果不存在sqlnet.ora文件,请使用以下命令创建此文件后再实施上面的操作:
bash-3.2$touch$ORACLE_HOME/network/admin/sqlnet.ora
漏洞14.检查是否设置DBA组用户数量限制
类型:
Oracle数据库类
问题:
略
解决方案:
手动将其他非oracle的用户从dba组中删除,将oracle用户从root或system组中删除。
查询用户所属组的命令是groups。
改变用户所属组的命令是usermod-G,。
漏洞15.检查是否删除或者锁定无关帐号
类型:
Oracle数据库类
问题:
SQL>selectt.usernamefromdba_userstwheret.account_status='OPEN';selectt.usernamefromdba_userstwheret.account_status='OPEN'*ERRORatline1:
ORA-01034:
ORACLEnotavailableProcessID:
0SessionID:
0Serialnumber:
0
解决方案:
暂时不处理。
漏洞16.检查是否限制具备数据库超级管理员(SYSDBA)权限的用户远程登录
类型:
Oracle数据库类
问题:
SQL>selectt.VALUEfromv$parametertwhereupper(t.NAME)like'%REMOTE_LOGIN_PASSWORDFILE%';
VALUE
--------------------------------------------------------------------------------
EXCLUSIVE
解决方案:
在数据库启动时,通过下面的命令检查remote_login_passwordfile的参数值:
bash-3.2$sqlplussys/oracle@assysdba
SQL*Plus:
R