Oracle Database Server 'TNS Listener'远程数据投毒漏洞(CVE-2012-1675)的完美解决方法
环境:Windows2008R2+Oracle10.2.0.3
应用最新bundlepatch后,扫描依然报出漏洞OracleDatabaseServer'TNSListener'远程数据投毒漏洞(CVE-2012-1675)
•1.确定解决方案
•2.应用解决方案
•3.验证修补情况
•4.Reference
1.确定解决方案
安全厂家给出的解决办法:
链接:http://www.oracle.com/technetwork/topics/security/alert-cve-2012-1675-1608180.html
根据此链接得到解决方法:
Solution Recommendationsforprotectingagainstthisvulnerabilitycanbefoundat: MyOracleSupportNote1340831.1forOracleDatabasedeploymentsthatuseOracleRealApplicationClusters(RAC). MyOracleSupportNote1453883.1forOracleDatabasedeploymentsthatdonotuseRAC.
目前这里环境不是RAC,参考文档1453883.1:
UsingClassofSecureTransport(COST)toRestrictInstanceRegistration(文档ID1453883.1)
找到两种解决方案:
SOLUTION TherearetwomethodsthatcanbeusedtoprotectthelistenerusingCOST"SECURE_REGISTER_listener_name="instandalonedatabaseinstallations. 1)RestrictingregistrationtotheTCPprotocol(RequiresthefixforBUG:12880299) -or- 2)RestrictingregistrationtotheIPCprotocol(ThepatchforBUG:12880299isNOTrequiredfortheIPCmethod) Eithermethodaccomplishesthesamegoalbutitisyourchoicewhichtypetoimplementsubjecttotherestriction*notedbelow.Bothmethodswillbediscussed. •Thesecondmethod(usingIPC)cannotbeusedifthedatabaseisamemberofanOracleDataGuardbrokerconfiguration.
我这里选择第一种解决方案:
1)RestrictingregistrationtotheTCPprotocol(RequiresthefixforBUG:12880299)。
2.应用解决方案
2.1确定现状
监听配置文件:listener.ora
存放路径:cd%ORACLE_HOME%/network/admin
内容(保证安全,所有IP相关信息已二次处理):
#listener.oraNetworkConfigurationFile:E:\oracle\product\10.2.0\db_1\NETWORK\ADMIN\listener.ora #GeneratedbyOracleconfigurationtools. LISTENER= (DESCRIPTION_LIST= (DESCRIPTION= (ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)) (ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.138)(PORT=1521)) ) ) SID_LIST_LISTENER= (SID_LIST= (SID_DESC= (SID_NAME=PLSExtProc) (ORACLE_HOME=E:\oracle\product\10.2.0\db_1) (PROGRAM=extproc) (ENVS="EXTPROC_DLLS=ANY") ) (SID_DESC= (GLOBAL=orcl) (ORACLE_HOME=E:\oracle\product\10.2.0\db_1) (SID_NAME=orcl) ) ) ADR_BASE_LISTENER=E:\oracle
数据库监听信息,原始都是空值:
SQL>showparameterlocal_listener NAMETYPEVALUE -------------------------------------------------------------------------- local_listenerstring SQL>showparameterremote_listener; NAMETYPEVALUE -------------------------------------------------------------------------- remote_listenerstring SQL>
2.2尝试应用解决方案
2.2.1停止监听
lsnrctlstoplistener
2.2.2修改监听配置文件
AddtheCOSTTCPprotocolrestriction"SECURE_REGISTER_[listener_name]=(TCP)"tothelistener.ora. MatchtheCOSTparametervariablelistener_namewiththenameofthelisteneryouareusinginthelistener.ora,e.g.,Ifyourlistenernameis"LISTENER_PROD"thenuseSECURE_REGISTER_LISTENER_PROD=(TCP)
实际修改过程:
切换到监听配置文件所在路径:
cd%ORACLE_HOME%/network/admin
直接修改listener.ora文件,在文件的末尾添加一行:
SECURE_REGISTER_LISTENER=(TCP)
2.2.3启动监听
启动监听:
lsnrctlstartlistener
立即注册动态监听:
SQL>altersystemregister;
2.2.4设置local_listener
altersystemsetlocal_listener='(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.138)(PORT=1521)))'scope=both; showparameterlocal_listener
2.2.5查看监听服务信息
lsnrctlserviceslistener E:\oracle\product\10.2.0\db_1\network\ADMIN>lsnrctlserviceslistener LSNRCTLfor32-bitWindows:Version10.2.0.3.0-Productionon21-9月-201610:2 2:02 Copyright(c)1991,2006,Oracle.Allrightsreserved.
正在连接到(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521))) 服务摘要.. 服务"PLSExtProc"包含1个例程。 例程"PLSExtProc",状态UNKNOWN,包含此服务的1个处理程序... 处理程序: "DEDICATED"已建立:0已被拒绝:0 LOCALSERVER 服务"orcl"包含1个例程。 例程"orcl",状态UNKNOWN,包含此服务的1个处理程序... 处理程序: "DEDICATED"已建立:3已被拒绝:0 LOCALSERVER 命令执行成功
3.验证修补情况
3.1注释COST规则验证监听情况
3.1.1注释掉listener.ora文件的COST规则并重启监听
CommenttheCOSTruleinlistener.oraandrestartthelistener.
直接修改listener.ora文件,在之前添加的一行前面加上"#"注释此行。
#SECURE_REGISTER_LISTENER=(TCP)
重启监听:
lsnrctlstoplistener lsnrctlstartlistener
3.1.2设置remote_listener后查看监听服务信息
设置remote_listener:
SQL>altersystemsetremote_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.138)(PORT=1521))'scope=memory; SQL>showparameterremote_listener
快速动态监听注册:
SQL>altersystemregister;
查看监听服务信息,发现有“REMOTESERVER”字样,说明此时漏洞存在:
E:\oracle\product\10.2.0\db_1\network\ADMIN>lsnrctlserviceslistener LSNRCTLfor32-bitWindows:Version10.2.0.3.0-Productionon21-9月-201610:4 4:18 Copyright(c)1991,2006,Oracle.Allrightsreserved. 正在连接到(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521))) 服务摘要.. 服务"PLSExtProc"包含1个例程。 例程"PLSExtProc",状态UNKNOWN,包含此服务的1个处理程序... 处理程序: "DEDICATED"已建立:0已被拒绝:0 LOCALSERVER 服务"orcl"包含2个例程。 例程"orcl",状态UNKNOWN,包含此服务的1个处理程序... 处理程序: "DEDICATED"已建立:0已被拒绝:0 LOCALSERVER 例程"orcl",状态READY,包含此服务的2个处理程序... 处理程序: "DEDICATED"已建立:0已拒绝:0状态:ready LOCALSERVER "DEDICATED"已建立:0已拒绝:0状态:ready REMOTESERVER (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521))) 服务"orclXDB"包含1个例程。 例程"orcl",状态READY,包含此服务的1个处理程序... 处理程序: "D000"已建立:0已被拒绝:0当前:0最大:1002状态:ready DISPATCHER<machine:INSPUR-IRMS-138,pid:6728> (ADDRESS=(PROTOCOL=tcp)(HOST=INSPUR-IRMS-138)(PORT=52676)) 服务"orcl_XPT"包含1个例程。 例程"orcl",状态READY,包含此服务的2个处理程序... 处理程序: "DEDICATED"已建立:0已拒绝:0状态:ready LOCALSERVER "DEDICATED"已建立:0已拒绝:0状态:ready REMOTESERVER (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521))) 命令执行成功
3.2取消注释COST规则验证监听情况
3.2.1取消注释COST规则重启监听并快速注册,验证监听服务信息
去掉监听文件末尾行前的“#”号:
SECURE_REGISTER_LISTENER=(TCP)
重启监听:
lsnrctlstoplistener lsnrctlstartlistener
快速注册动态监听:
SQL>altersystemregister;
验证监听服务信息,按官档描述,正常应该没有“REMOTESERVER”字样:
E:\oracle\product\10.2.0\db_1\network\ADMIN>lsnrctlserviceslistener LSNRCTLfor32-bitWindows:Version10.2.0.3.0-Productionon21-9月-201611:0 0:23 Copyright(c)1991,2006,Oracle.Allrightsreserved. 正在连接到(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521))) 服务摘要.. 服务"PLSExtProc"包含1个例程。 例程"PLSExtProc",状态UNKNOWN,包含此服务的1个处理程序... 处理程序: "DEDICATED"已建立:0已被拒绝:0 LOCALSERVER 服务"orcl"包含2个例程。 例程"orcl",状态UNKNOWN,包含此服务的1个处理程序... 处理程序: "DEDICATED"已建立:1已被拒绝:0 LOCALSERVER 例程"orcl",状态READY,包含此服务的1个处理程序... 处理程序: "DEDICATED"已建立:0已拒绝:0状态:blocked REMOTESERVER (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521))) 服务"orclXDB"包含1个例程。 例程"orcl",状态READY,包含此服务的1个处理程序... 处理程序: "D000"已建立:0已被拒绝:0当前:0最大:1002状态:ready DISPATCHER<machine:INSPUR-IRMS-138,pid:6728> (ADDRESS=(PROTOCOL=tcp)(HOST=INSPUR-IRMS-138)(PORT=52676)) 服务"orcl_XPT"包含1个例程。 例程"orcl",状态READY,包含此服务的1个处理程序... 处理程序: "DEDICATED"已建立:0已拒绝:0状态:blocked REMOTESERVER (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521))) 命令执行成功 实际发现有“REMOTESERVER”字样,但是对应的监听都是blocked.
3.2.2查看监听日志
cd%ORACLE_HOME%/network/log
listener.log日志文件已经有TNS-01194信息,跟官档一致:
21-9月-201611:00:23*(CONNECT_DATA=(CID=(PROGRAM=)(HOST=)(USER=Administrator))(COMMAND=services)(ARGUMENTS=64)(SERVICE=listener)(VERSION=169870080))*services*0 21-9月-201611:00:54*service_register_NSGR*1194 TNS-01194:监听程序命令未到达安全传输 21-9月-201611:01:54*service_register_NSGR*1194 TNS-01194:监听程序命令未到达安全传输 21-9月-201611:02:54*service_register_NSGR*1194 TNS-01194:监听程序命令未到达安全传输
3.2.3还原remote_listener设置
测试完成,还原remote_listener设置
altersystemsetremote_listener=''scope=memory; SQL>altersystemsetremote_listener=''scope=memory;
3.2.4查看监听服务信息
E:\oracle\product\10.2.0\db_1\network\ADMIN>lsnrctlserviceslistener LSNRCTLfor32-bitWindows:Version10.2.0.3.0-Productionon21-9月-201611:2 2:17 Copyright(c)1991,2006,Oracle.Allrightsreserved. 正在连接到(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521))) 服务摘要.. 服务"PLSExtProc"包含1个例程。 例程"PLSExtProc",状态UNKNOWN,包含此服务的1个处理程序... 处理程序: "DEDICATED"已建立:0已被拒绝:0 LOCALSERVER 服务"orcl"包含1个例程。 例程"orcl",状态UNKNOWN,包含此服务的1个处理程序... 处理程序: "DEDICATED"已建立:1已被拒绝:0 LOCALSERVER 命令执行成功
4.Reference
•UsingClassofSecureTransport(COST)toRestrictInstanceRegistration(文档ID1453883.1)