前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Oracle Database Server 'TNS Listener'远程数据投毒漏洞

Oracle Database Server 'TNS Listener'远程数据投毒漏洞

作者头像
Alfred Zhao
发布2019-05-24 20:18:53
2.2K0
发布2019-05-24 20:18:53
举报

环境:Windows 2008 R2 + Oracle 10.2.0.3 应用最新bundle patch后,扫描依然报出漏洞 Oracle Database Server 'TNS Listener'远程数据投毒漏洞(CVE-2012-1675)

  • 1.确定解决方案
  • 2.应用解决方案
  • 3.验证修补情况
  • 4.Reference

1.确定解决方案

安全厂家给出的解决办法: 链接:http://www.oracle.com/technetwork/topics/security/alert-cve-2012-1675-1608180.html

根据此链接得到解决方法:

Solution Recommendations for protecting against this vulnerability can be found at: My Oracle Support Note 1340831.1 for Oracle Database deployments that use Oracle Real Application Clusters (RAC). My Oracle Support Note 1453883.1 for Oracle Database deployments that do not use RAC.

目前这里环境不是RAC,参考文档1453883.1: Using Class of Secure Transport (COST) to Restrict Instance Registration (文档 ID 1453883.1) 找到两种解决方案:

SOLUTION There are two methods that can be used to protect the listener using COST "SECURE_REGISTER_listener_name =" in stand alone database installations. 1) Restricting registration to the TCP protocol (Requires the fix for BUG:12880299) - or - 2) Restricting registration to the IPC protocol (The patch for BUG:12880299 is NOT required for the IPC method) Either method accomplishes the same goal but it is your choice which type to implement subject to the restriction* noted below. Both methods will be discussed.

  • The second method (using IPC) cannot be used if the database is a member of an Oracle Data Guard broker configuration.

我这里选择第一种解决方案: 1) Restricting registration to the TCP protocol (Requires the fix for BUG:12880299)。

2.应用解决方案

2.1 确定现状

监听配置文件:listener.ora 存放路径:cd %ORACLE_HOME%/network/admin 内容(保证安全,所有IP相关信息已二次处理):

代码语言:javascript
复制
# listener.ora Network Configuration File: E:\oracle\product\10.2.0\db_1\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.

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

数据库监听信息,原始都是空值:

代码语言:javascript
复制
SQL> show parameter local_listener

NAME                                 TYPE        VALUE
------------------------------------ ----------- ---------------------------
local_listener                       string
SQL> show parameter remote_listener;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ---------------------------
remote_listener                      string
SQL>

2.2 尝试应用解决方案

2.2.1 停止监听 lsnrctl stop listener 2.2.2 修改监听配置文件

Add the COST TCP protocol restriction "SECURE_REGISTER_[listener_name] = (TCP)" to the listener.ora. Match the COST parameter variable listener_name with the name of the listener you are using in the listener.ora, e.g., If your listener name is "LISTENER_PROD" then use SECURE_REGISTER_LISTENER_PROD = (TCP)

实际修改过程: 切换到监听配置文件所在路径:

代码语言:javascript
复制
cd %ORACLE_HOME%/network/admin

直接修改listener.ora文件,在文件的末尾添加一行:

代码语言:javascript
复制
SECURE_REGISTER_LISTENER = (TCP)

2.2.3 启动监听 启动监听: lsnrctl start listener 立即注册动态监听: SQL> alter system register; 2.2.4 设置local_listener

代码语言:javascript
复制
alter system set local_listener='(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =192.168.1.138)(PORT = 1521)))' scope = both;
show parameter local_listener

2.2.5 查看监听服务信息 lsnrctl services listener

代码语言:javascript
复制
E:\oracle\product\10.2.0\db_1\network\ADMIN>lsnrctl services listener

LSNRCTL for 32-bit Windows: Version 10.2.0.3.0 - Production on 21-9月 -2016 10:2
2:02

Copyright (c) 1991, 2006, Oracle.  All rights reserved.

正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
服务摘要..
服务 "PLSExtProc" 包含 1 个例程。
  例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
    处理程序:
      "DEDICATED" 已建立:0 已被拒绝:0
         LOCAL SERVER
服务 "orcl" 包含 1 个例程。
  例程 "orcl", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
    处理程序:
      "DEDICATED" 已建立:3 已被拒绝:0
         LOCAL SERVER
命令执行成功

3.验证修补情况

3.1 注释COST规则验证监听情况

3.1.1 注释掉listener.ora文件的COST规则并重启监听 Comment the COST rule in listener.ora and restart the listener. 直接修改listener.ora文件,在之前添加的一行前面加上"#"注释此行。

代码语言:javascript
复制
#SECURE_REGISTER_LISTENER = (TCP)

重启监听:

代码语言:javascript
复制
lsnrctl stop listener
lsnrctl start listener

3.1.2 设置remote_listener后查看监听服务信息 设置remote_listener:

代码语言:javascript
复制
SQL> alter system set remote_listener='(ADDRESS = (PROTOCOL = TCP)(HOST =192.168.1.138)(PORT = 1521))' scope=memory;
SQL> show parameter remote_listener

快速动态监听注册:

代码语言:javascript
复制
SQL> alter system register;

查看监听服务信息,发现有“REMOTE SERVER”字样,说明此时漏洞存在:

代码语言:javascript
复制
E:\oracle\product\10.2.0\db_1\network\ADMIN>lsnrctl services listener

LSNRCTL for 32-bit Windows: Version 10.2.0.3.0 - Production on 21-9月 -2016 10:4
4:18

Copyright (c) 1991, 2006, Oracle.  All rights reserved.

正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
服务摘要..
服务 "PLSExtProc" 包含 1 个例程。
  例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
    处理程序:
      "DEDICATED" 已建立:0 已被拒绝:0
         LOCAL SERVER
服务 "orcl" 包含 2 个例程。
  例程 "orcl", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
    处理程序:
      "DEDICATED" 已建立:0 已被拒绝:0
         LOCAL SERVER
  例程 "orcl", 状态 READY, 包含此服务的 2 个处理程序...
    处理程序:
      "DEDICATED" 已建立:0 已拒绝:0 状态:ready
         LOCAL SERVER
      "DEDICATED" 已建立:0 已拒绝:0 状态:ready
         REMOTE SERVER
         (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
         LOCAL SERVER
      "DEDICATED" 已建立:0 已拒绝:0 状态:ready
         REMOTE SERVER
         (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
命令执行成功

3.2 取消注释COST规则验证监听情况

3.2.1 取消注释COST规则重启监听并快速注册,验证监听服务信息 去掉监听文件末尾行前的“#”号:

代码语言:javascript
复制
SECURE_REGISTER_LISTENER = (TCP)

重启监听:

代码语言:javascript
复制
lsnrctl stop listener
lsnrctl start listener

快速注册动态监听:

代码语言:javascript
复制
SQL> alter system register;

验证监听服务信息,按官档描述,正常应该没有“REMOTE SERVER”字样:

代码语言:javascript
复制
E:\oracle\product\10.2.0\db_1\network\ADMIN>lsnrctl services listener

LSNRCTL for 32-bit Windows: Version 10.2.0.3.0 - Production on 21-9月 -2016 11:0
0:23

Copyright (c) 1991, 2006, Oracle.  All rights reserved.

正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
服务摘要..
服务 "PLSExtProc" 包含 1 个例程。
  例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
    处理程序:
      "DEDICATED" 已建立:0 已被拒绝:0
         LOCAL SERVER
服务 "orcl" 包含 2 个例程。
  例程 "orcl", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
    处理程序:
      "DEDICATED" 已建立:1 已被拒绝:0
         LOCAL SERVER
  例程 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
    处理程序:
      "DEDICATED" 已建立:0 已拒绝:0 状态:blocked
         REMOTE SERVER
         (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
         REMOTE SERVER
         (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
命令执行成功

实际发现有“REMOTE SERVER”字样,但是对应的监听都是blocked. 3.2.2 查看监听日志 cd %ORACLE_HOME%/network/log listener.log日志文件已经有TNS-01194信息,跟官档一致:

代码语言:javascript
复制
21-9月 -2016 11:00:23 * (CONNECT_DATA=(CID=(PROGRAM=)(HOST=)(USER=Administrator))(COMMAND=services)(ARGUMENTS=64)(SERVICE=listener)(VERSION=169870080)) * services * 0
21-9月 -2016 11:00:54 * service_register_NSGR * 1194
TNS-01194: 监听程序命令未到达安全传输
21-9月 -2016 11:01:54 * service_register_NSGR * 1194
TNS-01194: 监听程序命令未到达安全传输
21-9月 -2016 11:02:54 * service_register_NSGR * 1194
TNS-01194: 监听程序命令未到达安全传输

3.2.3 还原remote_listener设置 测试完成,还原remote_listener设置 alter system set remote_listener='' scope=memory;

代码语言:javascript
复制
SQL> alter system set remote_listener='' scope=memory;

3.2.4 查看监听服务信息

代码语言:javascript
复制
E:\oracle\product\10.2.0\db_1\network\ADMIN>lsnrctl services listener

LSNRCTL for 32-bit Windows: Version 10.2.0.3.0 - Production on 21-9月 -2016 11:2
2:17

Copyright (c) 1991, 2006, Oracle.  All rights reserved.

正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
服务摘要..
服务 "PLSExtProc" 包含 1 个例程。
  例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
    处理程序:
      "DEDICATED" 已建立:0 已被拒绝:0
         LOCAL SERVER
服务 "orcl" 包含 1 个例程。
  例程 "orcl", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
    处理程序:
      "DEDICATED" 已建立:1 已被拒绝:0
         LOCAL SERVER
命令执行成功

4.Reference

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-09-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.确定解决方案
  • 2.应用解决方案
    • 2.1 确定现状
      • 2.2 尝试应用解决方案
      • 3.验证修补情况
        • 3.1 注释COST规则验证监听情况
          • 3.2 取消注释COST规则验证监听情况
          • 4.Reference
          相关产品与服务
          对象存储
          对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档