Oracle Database Server 'TNS Listener'遠程數據投毒漏洞(CVE-2012-1675)解決

分類:IT技術 時間:2016-10-18

環境: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相關信息已二次處理):

# 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

數據庫監聽信息,原始都是空值:

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)

實際修改過程:
切換到監聽配置文件所在路徑:

cd %ORACLE_HOME%/network/admin

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

SECURE_REGISTER_LISTENER = (TCP)

2.2.3 啟動監聽
啟動監聽:
lsnrctl start listener
立即註冊動態監聽:
SQL> alter system register;
2.2.4 設置local_listener

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

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文件,在之前添加的一行前面加上"#"註釋此行。

#SECURE_REGISTER_LISTENER = (TCP)

重啟監聽:

lsnrctl stop listener
lsnrctl start listener

3.1.2 設置remote_listener後查看監聽服務信息
設置remote_listener:

SQL> alter system set remote_listener='(ADDRESS = (PROTOCOL = TCP)(HOST =192.168.1.138)(PORT = 1521))' scope=memory;
SQL> show parameter remote_listener

快速動態監聽註冊:

SQL> alter system register;

查看監聽服務信息,發現有“REMOTE SERVER”字樣,說明此時漏洞存在:

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規則重啟監聽並快速註冊,驗證監聽服務信息
去掉監聽文件末尾行前的“#”號:

SECURE_REGISTER_LISTENER = (TCP)

重啟監聽:

lsnrctl stop listener
lsnrctl start listener

快速註冊動態監聽:

SQL> alter system register;

驗證監聽服務信息,按官檔描述,正常應該沒有“REMOTE SERVER”字樣:

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信息,跟官檔一致:

21-9月 -2016 11:00:23 * (CONNECT_DATA=http://www.cnblogs.com/jyzhao/p/(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;

SQL> alter system set remote_listener='' scope=memory;

3.2.4 查看監聽服務信息

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

  • Using Class of Secure Transport (COST) to Restrict Instance Registration (文檔 ID 1453883.1)
  • http://blog.itpub.net/17997/viewspace-763695/

Tags: listener Windows database protocol required

文章來源:


ads
ads

相關文章
ads

相關文章

ad