Oracle Database Server 'TNS Listener'遠端資料投毒漏洞
關於CVE-2012-1675
綠盟掃描系統,報告了一個安全漏洞,研究了下
Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE
oracle 安全警告
在安全警告CVE-2012-1675中進行了描述:
http://www.oracle.com/technetwork/topics/security/alert-cve-2012-1675-1608180.html
這個漏洞的發現者和描述
該漏洞主要影響監聽器。
最主要的危害為,攻擊者可以自行建立一個和當前生產資料庫同名的資料庫,將其向生產資料庫的監聽註冊。
這樣將導致使用者連線被路由指向攻擊者建立的例項,造成業務響應中斷
應用程式報告 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協議,需要安裝Patch12880299,各版本最新的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]
需要服務端負載均衡的RAC,參考
Using Class of Secure Transport (COST) to Restrict Instance Registration in Oracle RAC [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)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25469263/viewspace-2642451/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 修復oracle10.2.0.4 Listener遠端資料投毒漏洞(非RAC)Oracle
- Oracle盲注結合XXE漏洞遠端獲取資料Oracle
- 遠端客戶端連線資料庫時提示TNS-12541: TNS: 無監聽程式客戶端資料庫
- listener的ORACLE_HOME配置出錯導致無法遠端登陸資料庫Oracle資料庫
- ORA-12500: TNS:listener failed to start a dedicated server processAIServer
- ORA-12500 TNS : listener failed to start a dedicated server processAIServer
- TNS Listener Hang, New Child Listener Process Forked
- [Shell] monitor oracle database listener & instance statusOracleDatabase
- Oracle expdp資料泵遠端匯出Oracle
- ORACLE 配置連線遠端資料庫Oracle資料庫
- 7.monitor oracle database listener & instance statusOracleDatabase
- oracle database增加密碼檔案,遠端sys訪問。OracleDatabase加密密碼
- TNS-12541: TNS:no listener錯誤處理
- 遠端登入server匯出linux下oracle資料庫中的資料並從本地下載ServerLinuxOracle資料庫
- TNS問題排查 The listener supports no services
- oracle資料庫遠端不落地匯入本地資料庫Oracle資料庫
- Oracle資料鏈+同義詞+訪問遠端資料庫Oracle資料庫
- PL/SQL Developer連線遠端Oracle資料庫SQLDeveloperOracle資料庫
- Oracle 11g連線遠端資料庫Oracle資料庫
- 在CentOS6.0上配置Oracle資料庫可以遠端使用的遠端配置。CentOSOracle資料庫
- Intermittent TNS Listener Hang, New Child Listener Process Forked [ID 340091.1]MIT
- SQL Server 2005 自動遠端資料庫備份SQLServer資料庫
- 主流域名解析庫曝重大DNS投毒漏洞,如何有效應對DNS投毒?DNS
- SQL Server資料庫遠端更新目標表資料的儲存過程SQLServer資料庫儲存過程
- YoungzsoftCMailServer遠端棧溢位漏洞AIServer
- Sql Server遠端還原SQLServer
- 遠端連線SQL ServerSQLServer
- sqlserver採用link server方式遠端連線ORACLESQLServerOracle
- 新裝11GRAC遠端連線不上資料庫,報TNS-12547: TNS:lost contact故障處理資料庫
- MySQL server的安裝以及增刪改查遠端資料庫MySqlServer資料庫
- 【LISTENER】Oracle監聽TNS-12545及TNS-00515錯誤處理一例Oracle
- TNS-12518: TNS:listener could not hand off client connection For ORACLE 10G (AIX6.1)clientOracle 10gAI
- TNS-12518: TNS:listener could not hand off client connectionclient
- TNS-12518 TNS listener could not hand off client connectionclient
- ThinkPHP遠端程式碼執行漏洞PHP
- phpunit 遠端程式碼執行漏洞PHP
- Apache SSI 遠端命令執行漏洞Apache
- linux遠端桌面(NX server)LinuxServer