數(shù)據(jù)安全治理關(guān)鍵技術(shù)之?dāng)?shù)據(jù)庫脫敏技術(shù)詳解
數(shù)據(jù)安全治理之API監(jiān)測系統(tǒng) ,解決API接口安全問題【安華金和】
新一代數(shù)據(jù)庫脫敏技術(shù),為敏感數(shù)據(jù)建立保護(hù)盾!
數(shù)據(jù)庫脫敏系統(tǒng)與金融行業(yè)案例解讀
數(shù)據(jù)安全治理建設(shè)思路的著力點(diǎn)——數(shù)據(jù)安全咨詢服務(wù)【安華金和】
數(shù)據(jù)庫防火墻功能有哪些?-數(shù)據(jù)安全-安華金和
數(shù)據(jù)安全關(guān)鍵技術(shù)之?dāng)?shù)據(jù)庫脫敏技術(shù)詳解【安華金和】
中國數(shù)據(jù)安全治理落地指導(dǎo)書籍《數(shù)據(jù)安全治理白皮書5.0》正式發(fā)布(附下載)
本文將向大家展示一種黑客入侵?jǐn)?shù)據(jù)庫的方法,希望能引起大家的警惕。想知道黑客入侵?jǐn)?shù)據(jù)庫的方法首先要深究黑客入侵?jǐn)?shù)據(jù)庫的目的。經(jīng)過調(diào)查發(fā)現(xiàn)黑客 入侵者入侵?jǐn)?shù)據(jù)庫的最終目標(biāo)要么是獲取數(shù)據(jù)庫敏感數(shù)據(jù)、要么是獲取數(shù)據(jù)庫控制權(quán)限、要么是獲取數(shù)據(jù)庫所在操作系統(tǒng)控制權(quán)限、要么是獲取數(shù)據(jù)庫所在網(wǎng)絡(luò)環(huán)境 的部分控制權(quán)限。其中獲得任意的訪問權(quán)限是達(dá)成上述目的的第一步(無論是數(shù)據(jù)庫控制權(quán)還是數(shù)據(jù)庫所在操作系統(tǒng)控制權(quán))。對于沒有用戶名和密碼的黑客來說, 繞過身份驗(yàn)證的過程成了整個(gè)過程的第一步。繞過身份驗(yàn)證的方法有很多,其中最常規(guī)的是利用數(shù)據(jù)字典離線或在線暴力破解用戶名密碼。本文給大家揭示的是高級 黑客采用的繞過身份驗(yàn)證的辦法——利用oracle組件XDB存在的緩沖區(qū)漏洞,直接繞過身份驗(yàn)證獲取ORACLE所在系統(tǒng)控制權(quán)限和oracle控制權(quán) 限。
在這里首先給大家解釋兩個(gè)關(guān)鍵名詞。
1.身份驗(yàn)證——通俗的說就是數(shù)據(jù)庫客戶端在登錄數(shù)據(jù)庫的時(shí)候,客戶端輸入的賬號和密碼通過數(shù)據(jù)庫校驗(yàn)的過程。一般黑客攻破身份驗(yàn)證有2種方式:方 式一,研究身份驗(yàn)證原理,通過破解的方式破解身份驗(yàn)證。方式二,想辦法不通過身份驗(yàn)證登錄數(shù)據(jù)庫,也就是說繞過身份驗(yàn)證。本文給大家揭示的利用XDB緩沖 區(qū)溢出漏洞就是繞過身份驗(yàn)證的方法之一。
2.Oracle的XDB組件。XDB組件是oracle上提供XML服務(wù)能力的組件,從Oracle9i之后,會(huì)作為缺省安裝項(xiàng)。安裝完XDB 后,在啟動(dòng)Oracle時(shí),有兩個(gè)服務(wù):HTTP(默認(rèn)端口為8080)和FTP(默認(rèn)端口2100)會(huì)缺省啟動(dòng)。這里的FTP服務(wù)是Oracle自身的 FTP服務(wù),不是標(biāo)準(zhǔn)的FTP服務(wù),在這個(gè)FTP服務(wù)中進(jìn)行的身份驗(yàn)證,將會(huì)使用Oracle數(shù)據(jù)庫的用戶名/密碼。在Oracle提供的這個(gè)版本的 FTP服務(wù)中存在一個(gè)巨大的緩沖區(qū)漏洞,通過這個(gè)漏洞我們即可以攻占Oracle所在的操作系統(tǒng)。
查詢TNS會(huì)看到該服務(wù)是否啟動(dòng)
上圖中紅色標(biāo)記的部分就顯示出XDB組件中的FTP服務(wù)的狀態(tài)和端口號。我們要利用的這個(gè)漏洞只需要知道目標(biāo)數(shù)據(jù)庫的ip地址和目標(biāo)數(shù)據(jù)庫確實(shí)存在 的用戶名(oracle有大量默認(rèn)用戶,所以真實(shí)的用戶名很好獲取。本例模擬黑客行為采用的是低權(quán)限用戶scott),但并不必知道該用戶名對應(yīng)的密碼。
通過一定的手段確定數(shù)據(jù)庫IP地址后(安華金和數(shù)據(jù)庫實(shí)驗(yàn)室其他文章會(huì)詳細(xì)描述如何獲取目標(biāo)數(shù)據(jù)庫的關(guān)鍵信息)用FTP訪問數(shù)據(jù)庫。FTP訪問的方 式是ftp://databasehost:端口號 用戶名/密碼的書寫格式。雖然oracle對用戶輸入的每一個(gè)參數(shù)都進(jìn)行的長度驗(yàn)證,但XDB身份驗(yàn)證操作中的PASS命令缺乏對由用戶名密碼等信息組合 成的字符串的長度進(jìn)行合理限制。導(dǎo)致當(dāng)向PASS命令的執(zhí)行函數(shù)中傳入過長字符串會(huì)造成函數(shù)緩沖區(qū)溢出,然后利用溢出的字符串去改變棧(棧緩沖區(qū)溢出可以 參考《windows緩沖區(qū)溢出原理(棧)》一文)的返回地址為shellcode的初始地址。通過shellcode黑客控制住了數(shù)據(jù)庫所在的操作系 統(tǒng)。
如下圖所示:
上圖采用的漏洞驗(yàn)證工具是安華金和的DBHaker工具。至此我們已經(jīng)模擬黑客完成了通過XDB中緩沖區(qū)溢出漏洞來繞過身份驗(yàn)證的過程。為了讓大家更加直觀的感受該漏洞的危害,請大家點(diǎn)擊右下角查看操作系統(tǒng)資源
這個(gè)shellcode會(huì)直接拉起目標(biāo)數(shù)據(jù)庫所在服務(wù)器的控制臺。我們通過這個(gè)控制臺就可以模擬黑客對目標(biāo)數(shù)據(jù)庫所在操作系統(tǒng)進(jìn)行控制。上圖中我們 執(zhí)行了net start 命令查詢目標(biāo)數(shù)據(jù)庫所在操作系統(tǒng)的所有服務(wù)。此時(shí)我們可以直接對服務(wù)狀態(tài)進(jìn)行修改,來造成服務(wù)器宕機(jī)。如下圖所示:
通過net stop OracleOraHome92TNSListener 來停止目標(biāo)數(shù)據(jù)庫上的TNS監(jiān)聽。模擬合法客戶端去訪問該數(shù)據(jù)庫,直接報(bào)錯(cuò)無法連上該服務(wù)器。因?yàn)檫@種方式我們可以控制管理員權(quán)限的系統(tǒng)賬號,所以可以整個(gè)操作系統(tǒng)做任何變化。
下面我們用獲得的操作系統(tǒng)權(quán)限來通過數(shù)據(jù)庫身份驗(yàn)證。Oracle數(shù)據(jù)庫支持2種身份驗(yàn)證方式。其中一種是通過本操作系統(tǒng)權(quán)限來驗(yàn)證。如下圖所示:
用本地操作系統(tǒng)賬號進(jìn)行oracle登錄身份驗(yàn)證。由于我們已經(jīng)控制了操作系統(tǒng)所以用這種方式可以直接用數(shù)據(jù)庫sysdba權(quán)限的sys賬號登錄。直接查詢只有sysdba可見的存儲數(shù)據(jù)庫全部用戶名和密碼視圖
圖中讀取的就是目標(biāo)機(jī)器上數(shù)據(jù)庫中的所有用戶名和密碼。密碼可以通過離線破解。當(dāng)然黑客都用SYS登上了數(shù)據(jù)庫,完全可以通過執(zhí)行“alter user scott identified by 新密碼” 直接修改任意用戶的密碼。
如果黑客無法通過sqlplus "/ as sysdba" 直接本地登錄。報(bào)錯(cuò)如下圖:
這是由于目標(biāo)機(jī)器上的sqlnet 中缺少 “SQLNET.AUTHENTICATION_SERVICES= (NTS)”。這句話導(dǎo)oracle不允許采用這種本地登錄的方式。黑客只需要執(zhí)行:
type C:\oacle地址\network\admin\sqlnet.ora 就可以查詢目標(biāo)數(shù)據(jù)庫是否允許采用通過本地操作系統(tǒng)權(quán)限驗(yàn)證的方法。如下圖:
刪除原來的sqlnet del/f/s/q C:\oacle地址\network\admin\sqlnet.ora 重新寫一個(gè)sqlnet 允許用本地操作系統(tǒng)登錄:
echo SQLNET.AUTHENTICATION_SERVICES= (NTS)> C:\oacle地址\network\admin\sqlnet.ora
一個(gè)小小的漏洞,黑客可以利用其一步一步控制整臺機(jī)器,整個(gè)數(shù)據(jù)庫甚至整個(gè)網(wǎng)絡(luò)。這個(gè)漏洞雖然是oracle上的,但卻最終直接獲取了操作系統(tǒng)權(quán) 限。同理,一些軟件或硬件的漏洞也可能最終危害到數(shù)據(jù)庫。所以我們需要警惕所有漏洞,或許這些漏洞和我們的核心業(yè)務(wù)關(guān)系不大,但這些漏洞如果沒有及時(shí)被修 復(fù),很可能是成為整個(gè)數(shù)據(jù)庫、服務(wù)器、乃至網(wǎng)絡(luò)的定時(shí)炸彈,隨時(shí)可能爆發(fā)。
在對抗XDB漏洞的時(shí)候,安華金和數(shù)據(jù)庫攻防實(shí)驗(yàn)室建議您:
1.若不需要Oracle的XML數(shù)據(jù)庫功能,建議不進(jìn)行安裝,若是已經(jīng)安裝了,但沒有用處,建議關(guān)閉XDB,關(guān)閉方法如下:
編輯$ORACLE_HOME/dbs/initSID.ora文件,去除如下行: dispatchers='(PROTOCOL=TCP) (SERVICE=XDB);然后重啟數(shù)據(jù)庫。
也可以在Oracle下,以system身份登錄,運(yùn)行:
drop user xdb cascade;
2.如果您需要XDB提供的服務(wù),那么請去oracle官網(wǎng)下載相關(guān)補(bǔ)丁
(http://otn.oracle.com/deploy/security/pdf/2003Alert58.pdf)來修復(fù)XDB可能存在的緩沖區(qū)溢出漏洞。
3.如果由于應(yīng)用等各種原因,無法對數(shù)據(jù)庫進(jìn)行補(bǔ)丁提升且還需要使用XDB提供的服務(wù),那么請您在您的數(shù)據(jù)庫和網(wǎng)絡(luò)之間加入帶有VPATCH功能的數(shù)據(jù)庫防火墻,來保護(hù)您的數(shù)據(jù)庫免受XDB漏洞攻擊。