您好,登錄后才能下訂單哦!
綠盟掃描系統,報告了一個安全漏洞,研究了下
Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE
在安全警告CVE-2012-1675中進行了描述:
http://www.oracle.com/technetwork/topics/security/alert-cve-2012-1675-1608180.html
http://seclists.org/fulldisclosure/2012/Apr/204
該漏洞主要影響監聽器。
最主要的危害為,攻擊者可以自行創建一個和當前生產數據庫同名的數據庫,將其向生產數據庫的監聽注冊。
這樣將導致用戶連接被路由指向攻擊者創建的實例,造成業務響應中斷
應用程序報告 ORA-12545: Connect failed because target host or object does not exist
雖然安全警告描述的是10203開始,但是實際是從8i開始的任何版本
如果遭遇到攻擊,查看攻擊者機器不太方便。
當時測試出可行的方法為關閉數據庫實例和所有的連接,檢查仍然連接到1521端口的機器
監聽日志中沒有注冊者的IP和主機名信息
TRC 監聽無法找到注冊監聽者的IP和主機名
如何避免受該安全漏洞影響?
1. 設置監聽器不接受動態注冊,所有實例靜態注冊(單實例以及不做load_balance的RAC)
2. 設置只允許特定的IP訪問監聽器
3. 設置Class of Secure Transport,用來只允許本機實例或特定機器的實例注冊到監聽器。
該特性是10203引入,但存在Bug 12880299 - TCP handlers block if listener registration is restricted to IPC with COST [ID 12880299.8]
如果不安裝補丁,只允許限制IPC協議的動態監聽注冊,無法限制默認的TCP協議動態監聽注冊
如果監聽與數據庫間使用TCP協議,需要安裝Patch22880299,各版本最新的PSU中都有包含(10203不包含)
11.2.0.4. Patch Set Update
11.2.0.3.3 Patch Set Update
11.2.0.2.7 Patch Set Update
11.1.0.7.12 Patch Set Update
10.2.0.5.8 Patch Set Update
10.2.0.4.13 Patch Set Update
單實例,不準備啟用服務端負載均衡的RAC,參考
Using Class of Secure Transport (COST) to Restrict Instance Registration [ID 1453883.1]
https://support.oracle.com/CSP/main/article?cmd=show&type=NOT&id=1453883.1
需要服務端負載均衡的RAC,參考
Using Class of Secure Transport (COST) to Restrict Instance Registration in Oracle RAC [ID 1340831.1]
https://support.oracle.com/CSP/main/article?cmd=show&type=NOT&id=1340831.1
?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)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。