Oracle數據庫基本知識

Oracle Database,又名OracleRDBMS,或簡稱Oracle。是甲骨文公司的一款關係數據庫管理系統。本文爲大家分享的是Oracle數據庫的基本知識,希望對大家有所幫助!

Oracle數據庫基本知識

它是在數據庫領域一直處於領先地位的產品。可以說Oracle數據庫系統是目前世界上流行的關係數據庫管理系統,系統可移植性好、使用方便、功能強,適用於各類大、中、小、微機環境。它是一種高效率、可靠性好的適應高吞吐量的數據庫解決方案。

  介紹

ORACLE數據庫系統是美國ORACLE公司(甲骨文)提供的以分佈式數據庫爲核心的一組軟件產品,是目前最流行的客戶/服務器(CLIENT/SERVER)或B/S體系結構的數據庫之一。比如SilverStream就是基於數據庫的一種中間件。ORACLE數據庫是目前世界上使用最爲廣泛的數據庫管理系統,作爲一個通用的數據庫系統,它具有完整的數據管理功能;作爲一個關係數據庫,它是一個完備關係的產品;作爲分佈式數據庫它實現了分佈式處理功能。但它的所有知識,只要在一種機型上學習了ORACLE知識,便能在各種類型的機器上使用它。

Oracle數據庫最新版本爲OracleDatabase 12c。Oracle數據庫12c引入了一個新的多承租方架構,使用該架構可輕鬆部署和管理數據庫雲。此外,一些創新特性可最大限度地提高資源使用率和靈活性,如Oracle Multitenant可快速整合多個數據庫,而Automatic Data Optimization和Heat Map能以更高的密度壓縮數據和對數據分層。這些獨一無二的技術進步再加上在可用性、安全性和大數據支持方面的主要增強,使得Oracle數據庫12c 成爲私有云和公有云部署的理想平臺。

  就業前景

從就業與擇業的角度來講,計算機相關專業的大學生從事oracle方面的技術是職業發展中的最佳選擇。

其一、就業面廣:ORACLE幫助拓展技術人員擇業的廣度,全球前100強企業99家都在使用ORACLE相關技術,中國政府機構,大中型企事業單位都能有ORACLE技術的工程師崗位,大學生在校期間興趣廣泛,每個人興趣特長各異,不論你想進入金融行業還是電信行業或者政府機構,ORACLE都能夠在你的職業發展中給你最強有力的支撐,成爲你最貼身的金飯碗。

其二、技術層次深:如果期望進入IT服務或者產品公司,Oracle技術能夠幫助提高就業的深度。Oracle技術已經成爲全球每個IT公司必選的軟件技術之一,熟練掌握Oracle技術能夠爲從業人員帶來技術應用上的優勢,同時爲IT技術的深入應用起到非常關鍵的作用。掌握 Oracle技術,是IT從業人員瞭解全面信息化整體解決方案的基礎。

其三、職業方向多:Oracle數據庫管理方向、Oracle開發及系統架構方向、Oracle數據建模數據倉庫等方向。

  Oracle數據庫漏洞分析:無需用戶名和密碼進入你的數據庫

一般性的數據庫漏洞,都是在成功連接或登錄數據庫後實現入侵;本文介紹兩個在2012年暴露的Oracle漏洞,通過這兩種漏洞的結合,可以在不掌握用戶名/密碼的情況下入侵Oracle,從而完成對數據的竊取或者破壞。這兩個漏洞就是CVE-2012-1675和CVE-2012-3137。

  引言

國內外很多重要的系統都採用Oracle作爲數據存儲的數據庫;在Oracle中存儲着企業或政府大量敏感的信息,在金錢或政治的誘導下,內外部黑客會想法利用管理、網絡、主機或數據庫的自身漏洞嘗試入侵到數據庫中,以達到自身的目的。

本文的作者通過對Oracle倆種漏洞的組合研究,設計了一套在不掌握用戶名/密碼的方式入侵到Oracle中;這種方法,比傳統的需要登錄到數據庫中的入侵方法,具有更大的安全隱患和破壞性。

本文希望通過對這兩個漏洞和攻擊方法的介紹,能夠引起相關人員的重視,完善對數據庫安全的措施。

  1、概要介紹

本文提供的方法是基於漏洞CVE-2012-1675和CVE-2012-3137對oracle數據庫的攻擊測試的方法。

CVE-2012-1675漏洞是Oracle允許攻擊者在不提供用戶名/密碼的情況下,向遠程“TNS Listener”組件處理的數據投毒的漏洞。攻擊者可利用此漏洞將數據庫服務器的合法“TNS Listener”組件中的數據轉向到攻擊者控制的系統,導致控制遠程組件的數據庫實例,造成組件和合法數據庫之間的中間人攻擊、會話劫持或拒絕服務攻擊。

CVE-2012-3137漏洞是Oracle Database 10g/11g身份驗證協議實現中存在一個設計缺陷,攻擊者無需認證即可遠程獲取數據庫用戶密碼哈希相關數據,從而可以離線暴力破解用戶密碼,進一步控制數據庫系統。

我們通過如下的步驟和過程可以實現對Oracle的入侵:

(1)利用CVE-2012-1675進行TNS劫持,在監聽下利用遠程註冊,註冊同名數據庫實例;

(2)新登陸的用戶,在TNS的負載均衡策略下,有可能流量登錄到僞造的監聽服務上;

(3)該監聽服務對用戶的登陸過程進行監控,並將相關數據流量轉發到真實的數據庫上;

(4)利用CVE-2012-3137獲得通訊過程中的認證相關信息;

(5)對認證相關信息進行離線的暴力破解,獲得登陸的密碼;

(6)試用破解的用戶名/密碼登陸Oracle,完成對Oracle中數據的訪問;

  2、通過CVE-2012-1675進行TNS劫持

該漏洞存在於Oracle的所有版本,並且Oracle至今僅是發佈了警告性通知,並未提供解決方案。

要想利用CVE-2012-1675漏洞做TNS劫持,首先需要了解TNS機制。如下圖所示oracle 通過在本地解析網絡服務名到目標主機IP地址,服務端口號,目標數據庫名,把這些信息發送到oracle服務器端監聽程序,最後再由監聽程序遞送DBMS。

其中關鍵點在於監聽會按照目標數據庫名遞送到名稱正確的數據庫。那麼如果一個監聽下有2個同名數據庫。監聽將自動按照負載均衡把這次訪問發送到負載低的數據庫上,進行連接訪問。數據庫註冊到監聽的方法就決定了,能否同時註冊同名數據庫在同一個監聽下。註冊方式分爲本地註冊和遠程註冊,通過修改參數可以調整爲遠程註冊。

  下面是一段可用的TNS劫持的過程:

1.在劫持機上創建一個和目標數據庫實例同名的數據庫實例。

2.在劫持機上修改 文件

添加

listener_name=

(DESCRIPTION=

(ADDRESS=(PROTOCOL=tcp)(HOST=目標機器IP)(PORT=目標機器端口)))

3.在劫持機上用SQL*Plus 順序執行下面步驟。

1.$ sqlplus / as sysdba

2. SQL> ALTER SYSTEM SETREMOTE_LISTENER='LISTENER_NAME';

3. SQL> ALTER SYSTEM REGISTER;

4.多個客戶端,向數據庫發起登錄。會劫持到一部分客戶端的登錄信息。

最終達到效果如下圖所示:

按照猜想同一個監聽下有2個同名實例。客戶端訪問監聽,監聽按照客戶端中的'數據庫名信息分配數據庫,由於監聽下有2個同名數據庫,客戶端鏈接很可能會被分配到劫持者的數據庫實例下,再通過配置劫持者的本地監聽把客戶端請求指回原數據庫。結構圖如下:

測試客戶端鏈接196次。目標數據庫實例獲得113次,劫持數據庫實例獲得83次基本滿足負載均衡的假設。(註上面實例是local server 下面實例是 remote server)

通過以上方式我們可以截獲約一半左右客戶端發送到服務器的合法鏈接。其中獲得了服務器IP、端口號、數據庫位置、實例名、登錄用戶名等一系列明文信息和4組密文信息(AUTH_SESSKEY,AUTH_SESSKEY_CLIENT,AUTH_PASSWORD,AUTH_VFR_DATA)。

  3、通過CVE-2012-3137進行密碼破解

CVE-2012-3137受影響的數據庫版本有,,,有使用了SHA-1加密算法的和,還有使用了SHA-1的(運行在z/OS下)版本。

雖然這個漏洞在中已經解決,但是僅僅數據庫客戶端和服務器都升級到並且文件中增加WED_LOGON_VERSION=12纔有效。

正如CVE-2012-3137所描述Oracle爲了防止第三方通過網絡獲取登錄信息包。而對密碼進行了加密處理。本部分只以oracle11.1密碼如何破解爲例進行說明。

在發起連接之後(oracle牽手完成),客戶端和服務器經過協商確定要使用的驗證協議。要完成這個任務,客戶端首先向數據庫發送一個包。包中包含客戶端主要信息和所請求的加密方式。數據庫確認加密方式有效後,發送一個確認服務包如下圖所示:

在通過安全網絡服務完成任何所要求的協議之後,數據庫用戶被O3logon(oracle驗證方式) 進行驗證,這個協議執行一個序列來向數據庫證明客戶端擁有密碼。爲了避免網絡第三方截獲到密碼。首先客戶端發送用戶名到數據庫來表明用戶身份。數據庫端根據加密協議,其中96位的作爲數據庫端密鑰,20位的作爲偏移量,它對每個連接都是不同的。一個典型的數據庫端發給客戶端的密鑰如下:

AUTH_D89FIGODKWASDF……………………

客戶端根據加密算法向服務器端發送96位的客戶端密鑰和64位的密碼密鑰。服務器端計算客戶端傳入的密碼密鑰。如果計算後密碼密文和數據庫中存儲的16位密碼密文一致則驗證通過。

根據這個過程可知上面TNS劫持包中取得的加密信息:AUTH_SESSKEY,AUTH_SESSKEY_CLIENT,AUTH_PASSWORD,AUTH_VFR_DATA這四個值是解密的關鍵。我們把他們按照SHA1,MD5,AES192進行一系列處理。最終通過數據字典碰撞得到密碼明文。

下面這段網上公佈的一段示例代碼,這段代碼與筆者的思路不完全相同,但也能大概地說明這個漏洞的攻擊過程:

import hashlib

from er import AES

def decrypt(session,salt,password):

pass_hash= 1(password+salt)

key =pass_st() + 'x00x00x00x00'

decryptor= (key,_CBC)

plain =ypt(session)

returnplain

session_hex ='EA2043CB8B46E3864311C68BDC161F8CA170363C1E6F57F3EBC6435F541A8239B6DBA16EAAB5422553A7598143E78767'

salt_hex = 'A7193E546377EC56639E'

passwords = ['test','password',''oracle','demo']

for password in passwords:

session_id= decrypt(session_de('hex'),salt_de('hex'),password)

print'Decrypted session_id for password "%s" is %s' %(password,session_de('hex'))

ifsession_id[40:] == 'x08x08x08x08x08x08x08x08':

print'PASSWORD IS "%s"' % password

break

  4、建議的預防措施

根據以上兩段分析,我們可以有如下的預防措施:

(1)在條件許可的情況下,對Oracle進行補丁升級,對Oracle打cpuoct2012-1515893補丁;注意對於cpuoct2012-1515893補丁要求服務器端和應用服務器端同時升級,否則應用系統將無法訪問Oracle;

(2)若無法對Oracle升級,要購買或安裝具備虛擬補丁功能的數據庫安全產品,防止對CVE-2012-3137和CVE-2012-1675的利用;

(3)建立足夠強健的口令,不要使用8位以下密碼,或者字典庫中的口令。