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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle盲注結合XXE漏洞遠端獲取資料Oracle
- Listener refused the connection with the following error:ORA-12514, TNS:listenerError
- TNS問題排查 The listener supports no services
- Oracle expdp資料泵遠端匯出Oracle
- ORACLE 配置連線遠端資料庫Oracle資料庫
- PL/SQL Developer連線遠端Oracle資料庫SQLDeveloperOracle資料庫
- Oracle案例04——TNS-12547: TNS:lost contactOracle
- (詳細)ubuntu18.04建立mysql資料庫並本地database遠端連線UbuntuMySql資料庫Database
- SQL Server 2014如何使用遊標迴圈向遠端資料庫插入資料SQLServer資料庫
- SQL Server資料庫遠端更新目標表資料的儲存過程SQLServer資料庫儲存過程
- Oracle TNS報錯大全Oracle
- ORA-12514:TNS:listener does not currently know of service requested in connect descriptor
- MySQL server的安裝以及增刪改查遠端資料庫MySqlServer資料庫
- Oracle 監聽投毒COST解決Oracle
- ORACLE TNS Io異常End of TNS data channel&ORA-12518Oracle
- 主流域名解析庫曝重大DNS投毒漏洞,如何有效應對DNS投毒?DNS
- Oracle WebLogic 曝 0day 漏洞,攻擊者可遠端執行命令OracleWeb
- Postgresql Linked server遠端伺服器取資料的執行計劃原理SQLServer伺服器
- ORACLE database vaultOracleDatabase
- Oracle clone databaseOracleDatabase
- 最新漏洞:Spring Framework遠端程式碼執行漏洞SpringFramework
- Oracle Database Cloud - Database as a Service Quick StartOracleDatabaseCloudUI
- 資料同步——rsync遠端同步
- 遠端, 資料夾遍歷
- 使用Xmanager軟體遠端呼叫圖形化安裝Oracle資料庫Oracle資料庫
- ThinkPHP遠端程式碼執行漏洞PHP
- Apache SSI 遠端命令執行漏洞Apache
- phpunit 遠端程式碼執行漏洞PHP
- Oracle OCP(43):listener.oraOracle
- Oracle listener log配置與管理Oracle
- oracle-listener 4GOracle
- Oracle 建立PDB-遠端克隆Oracle
- RCE(遠端程式碼執行漏洞)原理及漏洞利用
- VNC遠端控制軟體:VNC Server for MacVNCServerMac
- 允許本地Sql Server 遠端連線SQLServer
- Win Server 2019遠端桌面服務部署Server
- VNC Server for Mac(VNC遠端控制軟體)VNCServerMac
- Oracle Database Scheduler整理OracleDatabase