隨著《政府采購法實施條例》正式實施,雖然安全行業(yè)迎來了數(shù)據(jù)庫國產(chǎn)化的春天,但現(xiàn)今Oracle依舊是中國政府機關(guān)使用最廣泛的數(shù)據(jù)庫。其安全性受到廣泛關(guān)注。
Oracle數(shù)據(jù)庫必須使用TNS Listener(數(shù)據(jù)庫監(jiān)聽器)來完成數(shù)據(jù)庫和客戶端之間的通訊。因此TNS Listener的漏洞成了很多黑客的主要目標。這些TNS Listener的漏洞如果不及時處理,將對用戶的信息資產(chǎn)造成重大損失,同時也使許多敏感信息處于危險境地。本文主要對TNS Listener的漏洞帶來的安全威脅和防護措施進行介紹,希望管理者和數(shù)據(jù)庫的維護人員能夠提高警惕,加強針對TNS Listener漏洞的防護措施。
根據(jù)安華金和數(shù)據(jù)庫安全實驗室統(tǒng)計,2001年至2012年間,針對TNS LISTENER的漏洞有15個,其中高危漏洞9個,中危漏洞6個。TNS Listener漏洞總數(shù)并不多,但其具備威脅大,跨越數(shù)據(jù)庫版本多,適合通過網(wǎng)絡(luò)遠程攻擊的特點。本文將針對這15個TNS漏洞按照攻擊原理進行分類,并最終給出對應(yīng)防護技術(shù)。
TNS Listener作為ORACLE的必備組件,TNS Listener不僅定義了數(shù)據(jù)庫和客戶端之間的通訊協(xié)議,更負責對客戶端進行身份驗證(確認客戶端用于通訊的用戶名和密碼是否合法)。根據(jù)TNS這2條主要功能可以把漏洞分成三大類:
第一類漏洞,TNS Listener被觸發(fā)緩沖區(qū)重寫,導致服務(wù)器無法響應(yīng)客戶端。造成通訊失敗。簡單說就是使TNS Listener崩潰。例如漏洞CVE-2007-5507就是這個類型的代表。
第二類漏洞,繞過TNS身份驗證,獲得合法數(shù)據(jù)庫賬號和密碼。這個類型具體可以分三種:
1.通過劫持TNS信息,把oracle的登錄信息劫持到攻擊者機器,獲取敏感信息,甚至獲取oracle管理員賬號密碼。具體請參考安華金和數(shù)據(jù)庫安全實驗室發(fā)表的《Oracle數(shù)據(jù)庫漏洞隱患無需user/password快速入侵 》一文。
2.直接對在TNS中加密的oracle登錄密鑰進行破解具體請參考安華金和數(shù)據(jù)庫安全實驗室發(fā)表《破解oracle9i、oracle10g、oracle11g密碼》一文。
3.在遠程登陸過程中對服務(wù)器進行sql注入。利用某些特殊函數(shù),創(chuàng)建新的數(shù)據(jù)庫賬號,并為新賬號創(chuàng)建DBA權(quán)限。例如漏洞CVE-2006-0552就是這個類型的代表。
第三類漏洞,通過緩沖區(qū)溢出控制數(shù)據(jù)庫所在操作系統(tǒng)。這個類型具體可分兩種方式:
1.直接通過向TNS Listener發(fā)送含有異常字段的包,當oracle調(diào)用含有異常字段的包的時候,觸發(fā)緩沖區(qū)溢出。具體可以參考安華金和數(shù)據(jù)庫安全實驗室發(fā)表《通過OracleTNS漏洞攻占oracle所在操作系統(tǒng),進而入侵oracle》一文。
2.向TNS Listener發(fā)送含有異常數(shù)據(jù)的包,直接觸發(fā)緩沖區(qū)溢出,奪取數(shù)據(jù)庫所在操作系統(tǒng)控制權(quán)限。例如漏洞CVE-2002-0965就是這個類型的代表。
其中第三類漏洞在15個漏洞中分布最廣泛。下面我們按照類型進行原理介紹。
第一類漏洞中的代表是CVE-2007-5507。GIOP格式的消息中的DWORD被用來描述后面的字段的長度。當DWORD被惡意的修改后,如果DWORD所指出的長度比實際的字段的長度要長。TNS Listener會按照DWORD的數(shù)值來分配內(nèi)存,把實際的字段考入。再讀取的時候按照DWPRD的長度去讀取,就會導致讀取失敗。TNS Listener服務(wù)崩潰,無法接受客戶端的請求。導致服務(wù)器無法響應(yīng)客戶端。
該問題幾乎存在于Oracle的所有版本,并且Oracle至今僅是發(fā)布了警告性通知,并未提供解決方案。TNS劫持的核心點在于監(jiān)聽會按照目標數(shù)據(jù)庫名遞送到名稱正確的數(shù)據(jù)庫。通過遠程注冊的方法可以讓一個監(jiān)聽下同時存在2個同名數(shù)據(jù)庫(1個黑客的機器1個目標機器)。監(jiān)聽將自動按照負載均衡把每次訪問發(fā)送到負載低的數(shù)據(jù)庫上,進行連接訪問。也就是說有高過一半的幾率TNS Listener有可能把客戶端的請求錯誤的發(fā)送到黑客的機器上。黑客的機器再配置listener_name=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=目標機器IP)(PORT=目標機器端口)))
就可以變成客戶端和目標機器的中間站。自己發(fā)送信息給目標機器,讓目標機器誤以為是客戶端發(fā)送的信息。
雖然11g在登錄信息加密上做了較大改善。但算法主體思想還是客戶端和數(shù)據(jù)庫分別以O(shè)racle_hash為基礎(chǔ)生成S_AUTH_SESSKEY和C_AUTH_SESSKEY。客戶端對傳過來的S_AUTH_SESSKEY。做AES192解密處理拿到server_sesskey。把server_sesskey和自己的client_sesskey做md5生成combine。用combine生成AUTH_PASSWORD。服務(wù)器端最后用combine對AUTH_PASSWORD解密。對比密碼,如果一致登陸成功。所以oracle的默認加密算法基本已經(jīng)被破。一旦登錄包被截獲則可能直接被離線暴力破解出用戶名和密碼。
這種漏洞是利用的協(xié)議認證的機制,在Oracle Database的登錄過程時,遠程攻擊者在登錄過程中對服務(wù)器進行SQL注入攻擊。協(xié)議認證由兩個步驟組成,包含有兩個不同的客戶端請求和兩個服務(wù)器響應(yīng)。第一個請求僅包含有用戶名,而第二個請求包含有用戶名和亂碼的口令。第二個請求(下圖)還包含有”名稱-值”對列表,描述客戶端的各種屬性,其中AUTH_ALTER_SESSION就是這個sql注入的目標。AUTH_ALTER_SESSION的值中可以包含有任意SQL語句。并且AUTH_ALTER_SESSION是以O(shè)racle訪問控制機制之外的SYS用戶環(huán)境執(zhí)行的,因此通過將AUTH_ALTER_SESSION值改為創(chuàng)建用戶語句,并給予新用戶DBA權(quán)限。簡單說就是,攻擊者可以通過這類的漏洞創(chuàng)建新的數(shù)據(jù)庫帳號并為帳號創(chuàng)建DBA權(quán)限。
通過緩沖區(qū)溢出攻占數(shù)據(jù)庫所在操作系統(tǒng)的控制權(quán)。以CVE-2002-0965為例,
上圖為正常的的會話,CVE-2002-0965就是把上圖中的SERVICE_NAME用超過20字節(jié)的字符串代替。導致TNS在調(diào)RVICE_NAME的時候出現(xiàn)緩沖區(qū)溢出,緩沖區(qū)溢出后調(diào)用寫好的shellcode。奪取操作系統(tǒng)權(quán)限(具體可以參考安華金和數(shù)據(jù)庫實驗室發(fā)辮的《windows緩沖區(qū)溢出原理(棧)》一文)。
buff=”超過20字節(jié)的串”
sploit=”(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=#{rhost}(PORT=#{rport}))(CONNECT_DATA=(SERVICE_NAME=#{buff})(CID=(PROGRAM=MSF))))”
上面按照2001年到2012年間15個漏洞,總結(jié)了TNS Listener漏洞主要被利用的5種方式。(類型3的2種子類方式一樣,只是緩沖區(qū)溢出的用法有差別,這里就不作區(qū)分了)
TNS Listener作為oracle的核心組件和安全門戶。如果被黑客用上述任何一種方式入侵都很可能產(chǎn)生,類似2013年CSDN公司用戶信息大規(guī)模泄漏事件。而且由于TNS Listener位置的特殊性,對TNS Listener的防護手段有別于其他數(shù)據(jù)庫組件的安全防護手段。對TNS Listener的防護手段主要分為四個層次:
第一層是:通過數(shù)據(jù)庫弱口令掃描產(chǎn)品和定期更換安全密碼進行預防。
第二層是:對TNS Listener進行密碼設(shè)置防止遠程注冊被黑客利用。(阻止來自網(wǎng)絡(luò)的非法注冊)
最三層是:通過下載官方補丁或者使用含有VPATH的防火墻產(chǎn)品對已知漏洞進行修復。
最后一層:是通過數(shù)據(jù)局保險箱對數(shù)據(jù)庫進行全庫或者敏感字段加密。保證即便TNS Listener被攻破,核心數(shù)據(jù)依舊不會泄露。
大多數(shù)黑客通過TNS Listener入侵數(shù)據(jù)庫并非因為漏洞,而是通過默認口令、弱口令、撞庫等方式。數(shù)據(jù)庫弱口令掃描工具就是專門用來檢測oracle的賬號口令安全強度。利用探測到的賬號以數(shù)據(jù)庫管理員特權(quán)身份或其他特權(quán)身份進入被掃描的數(shù)據(jù)庫系統(tǒng),從內(nèi)部檢查數(shù)據(jù)庫的認證、授權(quán)與系統(tǒng)完整性等內(nèi)部配置信息,全面地分析、評估數(shù)據(jù)庫的安全弱點和安全風險。
針對第二類第二種,截獲通訊包線下暴力破解。雖然這個密碼是通過模擬oracle加密的過程算出來的。但是本質(zhì)上還是需要足夠大的密碼庫進行比對。所以只要定期更換長度和復雜度滿足oracle官方要求的密碼,就基本可以應(yīng)付線下暴力破解問題。關(guān)鍵是不要用不滿足oracle的密碼,和長期不換密碼。
雖然TNS Listener默認是不設(shè)置密碼的,但是其本身是支持加密的。加密后可以杜絕外來黑客對TNS Listener進行的非法注冊。從根本上杜絕了第二類中的第一種漏洞。
TNS Listener加密方法如下:
LSNRCTL> start
LSNRCTL> change_password
Old password:
New password:
Reenter new password:
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=test)(PORT=1521)))
Password changed for listener_demo92
The command completed successfully
LSNRCTL> save_config
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=test)(PORT=1521)))
TNS-01169: The listener has not recognized the password
LSNRCTL> set password
TNS Listener是oracle 的重要組件,所以盡可能第一時間安裝Oracle公司會定期地公布的補丁包,這些補丁包也會修復TNS Listener中存在的漏洞。有些數(shù)據(jù)庫漏洞掃描工具能夠掃描出這些缺陷,并提醒用戶下載補丁包。當然更為安全的策略,是定期到Oracle官方網(wǎng)站上進行訪問,看是否有新的補丁包發(fā)布并進行安裝。
3.5、數(shù)據(jù)庫防火墻(第三層)
當然有些生產(chǎn)或測試環(huán)境因為種種原因無法對數(shù)據(jù)庫進行補丁升級,那么建議在數(shù)據(jù)庫服務(wù)器和應(yīng)用服務(wù)器之間加入帶有虛擬補丁(可以起到打oracle升級包效果)功能的數(shù)據(jù)庫防火墻產(chǎn)品。這樣既不對數(shù)據(jù)庫服務(wù)器有任何變化,還同時能阻止黑客使用未修復的TNS Listener漏洞。數(shù)據(jù)庫防火墻還可以通過設(shè)置對SQL語句、客戶端IP地址、應(yīng)用服務(wù)請求等進行人為禁止。為數(shù)據(jù)庫搭建可信的安全訪問環(huán)境。
當數(shù)據(jù)庫防火墻被部署于上圖所示的位置的時,將把數(shù)據(jù)庫從整個網(wǎng)絡(luò)環(huán)境中隔離出去。禁止一切對數(shù)據(jù)庫的非法偵測。
最壞的情況是黑客通過TNS Listener的漏洞,獲取了數(shù)據(jù)庫本地操作系統(tǒng)權(quán)限或是數(shù)據(jù)庫DBA權(quán)限。批量導出數(shù)據(jù)庫內(nèi)存儲的核心信息。為了保護那些核心信息,我們可以通過數(shù)據(jù)庫保險箱對整個數(shù)據(jù)庫進行加密操作。只要未獲取加密時對應(yīng)的KEY。即便是DBA權(quán)限也只能看到的是加密后的亂碼無法從中獲取有用信息。從源頭上保護了數(shù)據(jù)庫中存儲的敏感信息。
本文提供了四個層次的防護手段。這四個層次涵蓋了六種應(yīng)對TNS Listener安全威脅的防護手段。如果管理者或管理員能把這六種防護手段結(jié)合使用,將杜絕TNS Listener帶來的安全威脅。
本文分析了TNS Listener漏洞帶來的五種安全威脅:TNS Listener服務(wù)崩潰漏洞(第一類)、TNS 劫持(第二類第一種)、破解TNS默認加密方式(第二類第二種)、遠程非法創(chuàng)建新DBA權(quán)限用戶(第二類第三種)、通過TNS奪取操作系統(tǒng)(第三類)。同時提出了四層防護手段:數(shù)據(jù)庫弱口令檢查、定期更換oracle推薦的密碼、TNS Listener加密、下載對應(yīng)官方補丁包、數(shù)據(jù)庫防火墻、數(shù)據(jù)庫加密。當然對TNS Listener漏洞的安全威脅和防護的研究,需要持續(xù)不斷地進行下去,更關(guān)鍵的是要不斷地普及防護意識和技術(shù),才能有效保護政府部門的信息安全。