環境: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
根據此鏈接得到解決方法:
1
2
3
4
|
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)
找到兩種解決方案:
1
2
3
4
5
6
7
|
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相關信息已二次處理):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
# 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 |
數據庫監聽信息,原始都是空值:
1
2
3
4
5
6
7
8
9
|
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 修改監聽配置文件
1
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文件,在文件的末尾添加一行:
1
|
SECURE_REGISTER_LISTENER = (TCP) |
2.2.3 啟動監聽
啟動監聽:
1
|
lsnrctl start listener |
立即注冊動態監聽:
1
|
SQL> alter system register; |
2.2.4 設置local_listener
1
2
|
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 查看監聽服務信息
1
2
3
4
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. |
1
2
3
4
5
6
7
8
9
10
11
12
13
|
正在連接到 (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規則并重啟監聽
1
|
Comment the COST rule in listener.ora and restart the listener. |
直接修改listener.ora文件,在之前添加的一行前面加上"#"注釋此行。
1
|
#SECURE_REGISTER_LISTENER = (TCP) |
重啟監聽:
1
2
|
lsnrctl stop listener lsnrctl start listener |
3.1.2 設置remote_listener后查看監聽服務信息
設置remote_listener:
1
2
|
SQL> alter system set remote_listener= '(ADDRESS = (PROTOCOL = TCP)(HOST =192.168.1.138)(PORT = 1521))' scope=memory; SQL> show parameter remote_listener |
快速動態監聽注冊:
1
|
SQL> alter system register; |
查看監聽服務信息,發現有“REMOTE SERVER”字樣,說明此時漏洞存在:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
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規則重啟監聽并快速注冊,驗證監聽服務信息
去掉監聽文件末尾行前的“#”號:
1
|
SECURE_REGISTER_LISTENER = (TCP) |
重啟監聽:
1
2
|
lsnrctl stop listener lsnrctl start listener |
快速注冊動態監聽:
1
|
SQL> alter system register; |
驗證監聽服務信息,按官檔描述,正常應該沒有“REMOTE SERVER”字樣:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
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信息,跟官檔一致:
1
2
3
4
5
6
7
|
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設置
1
2
|
alter system set remote_listener= '' scope=memory; SQL> alter system set remote_listener= '' scope=memory; |
3.2.4 查看監聽服務信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
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://www.cnblogs.com/jyzhao/p/5892006.html