數(shù)據(jù)安全防范不可忽視 提升需從今日做起
2011年底,眾多席卷而來的密碼泄露事件彌漫整個(gè)網(wǎng)絡(luò),當(dāng)我注視著最常用的幾個(gè)密碼都在互聯(lián)網(wǎng)上被公開時(shí),除了手忙腳亂的在各大網(wǎng)站修改密碼,剩下的就是深深的遺憾。幾乎所有從事IT行業(yè)的人,都深知安全的重要,可是放在實(shí)際執(zhí)行中,又往往習(xí)慣性失明,忽視了自己周圍本應(yīng)能夠達(dá)到的力所能及之安全,很多專業(yè)人士就以這樣或者那樣的僥幸心理放任了風(fēng)險(xiǎn)的存在,并一步一步走向了安全危機(jī)。
筆者從事數(shù)據(jù)庫工作超過十年,并且在一直不遺余力的推廣數(shù)據(jù)庫技術(shù)與數(shù)據(jù)庫安全知識,在此我愿意和大家分享一下我對于數(shù)據(jù)庫安全的理解。
基于對于數(shù)據(jù)安全的服務(wù)和思考,本文將數(shù)據(jù)庫安全概括為五大方面(如下圖所示),即:
軟件安全、備份安全、訪問安全、防護(hù)安全和管理安全:
在這五大安全方向中,可能出現(xiàn)兩種性質(zhì)的安全問題,第一,由于內(nèi)部管理不善而導(dǎo)致的數(shù)據(jù)安全問題;第二,由于外部惡意攻擊入侵所帶來的安全安問題。通常我們把安全問題狹義化為后者,這實(shí)際上是片面的,在數(shù)據(jù)安全問題上,前者造成的數(shù)據(jù)損失、數(shù)據(jù)損毀,其發(fā)生率和影響度都遠(yuǎn)遠(yuǎn)超過后者。
下面我們對數(shù)據(jù)安全的五大方面做一下簡要的分析和探討:
1.軟件安全是指我們選擇的數(shù)據(jù)庫產(chǎn)品、版本是否穩(wěn)定安全;廠商所能提供的補(bǔ)丁集和BUG修正是否及時(shí)。很多用戶在部署數(shù)據(jù)庫軟件時(shí),僅僅選擇了最容易獲得的初始版本發(fā)布(如Oracle Database 10.2.0.1或者Oracle Database 11.2.0.1等),遺漏了可能已經(jīng)存在的補(bǔ)丁修正,并且在運(yùn)行維護(hù)中并不能夠及時(shí)跟蹤軟件更新,也無法獲得BUG信息、補(bǔ)丁修正和安全告警,這就使得軟件本身的很多風(fēng)險(xiǎn)隱患得不到修正。如果軟件安全無法保證,數(shù)據(jù)庫安全的基礎(chǔ)也就喪失了。
2.備份安全是指用戶數(shù)據(jù)能否得到及時(shí)有效的備份保全,能否在故障災(zāi)難之后獲得及時(shí)的恢復(fù)和挽救。很多企業(yè)在數(shù)據(jù)災(zāi)難之后因?yàn)槿狈τ行浞荻货瓴徽?,根?jù)Gartner 2009年的一份調(diào)查報(bào)告顯示,在經(jīng)歷了數(shù)據(jù)完全丟失而導(dǎo)致系統(tǒng)停運(yùn)的企業(yè)中,有2/5再也沒能恢復(fù)運(yùn)營,余下的企業(yè)也有1/3在兩年內(nèi)宣告破產(chǎn),由此可見,由于備份安全問題導(dǎo)致的企業(yè)傷害可能遠(yuǎn)遠(yuǎn)大于黑客攻擊。
3.訪問安全是指用戶數(shù)據(jù)庫的訪問來源和訪問方式是否安全可控。通常數(shù)據(jù)庫系統(tǒng)處于IT系統(tǒng)的核心,其安全架構(gòu)涉及主機(jī)、系統(tǒng)、存儲、網(wǎng)絡(luò)等諸多方面,如果沒有明確的訪問控制,缺乏足夠的訪問分析與管理,那么數(shù)據(jù)庫的安全將是混亂和無法控制的,最基本的訪問安全要實(shí)現(xiàn)程序控制、網(wǎng)絡(luò)隔離、來源約束等。
4.安全防范是指通過主動(dòng)的安全手段對數(shù)據(jù)庫安全進(jìn)行增強(qiáng)、監(jiān)控、防護(hù)、屏蔽或阻斷,諸如數(shù)據(jù)加密、審計(jì)、數(shù)據(jù)防火墻等技術(shù)都在這一范疇之內(nèi)。我們必須認(rèn)識到,在IT技術(shù)高度發(fā)展的今天,風(fēng)險(xiǎn)是無處不在、層出不窮的,可能我們從未思考過的安全問題,每天都在不斷涌現(xiàn),所以在數(shù)據(jù)庫環(huán)境中采取主動(dòng)式防護(hù),可以幫助我們監(jiān)控分析和屏蔽很多未知風(fēng)險(xiǎn),已經(jīng)有很多成熟的產(chǎn)品和技術(shù)可以用于安全防范。
5.管理安全是指在企業(yè)數(shù)據(jù)的日常管理維護(hù)范疇內(nèi),能否充分保證數(shù)據(jù)安全。諸如DBA的維護(hù)、文件的管理、參數(shù)或數(shù)據(jù)結(jié)構(gòu)的變更等等都可能引入數(shù)據(jù)風(fēng)險(xiǎn),管理安全要求我們通過規(guī)范、制度以及技術(shù)手段去確保維護(hù)管理安全。2011年陜西移動(dòng)曾經(jīng)發(fā)生過近1400萬手機(jī)用戶數(shù)據(jù)泄露的安全事故,最終查明就是因?yàn)榫S護(hù)人員的數(shù)據(jù)竊取導(dǎo)致的數(shù)據(jù)泄露,而除此之外,很多維護(hù)性誤刪除、誤更新等故障也威脅過無數(shù)用戶的數(shù)據(jù)安全。
對于數(shù)據(jù)庫安全來說,通常我們認(rèn)為缺乏的并非技術(shù)手段,更多的是缺乏規(guī)范和安全認(rèn)知,如果用戶都能夠嚴(yán)格的遵循安全守則并應(yīng)用現(xiàn)有的安全技術(shù)手段,數(shù)據(jù)庫的安全性就能夠大幅增強(qiáng),我們的安全事故發(fā)生率也會大大降低。
下面就讓我們以O(shè)racle數(shù)據(jù)庫為例,探索一下Oracle數(shù)據(jù)庫的安全機(jī)制和安全實(shí)現(xiàn)。
Oracle數(shù)據(jù)庫自1977年肇始之初,就一直將安全置于首位,"Oracle"這個(gè)名字就是來自于美國中央情報(bào)局投資的項(xiàng)目代碼,而CIA也正是Oracle最早期的用戶之一。接觸過Oracle數(shù)據(jù)庫的人都應(yīng)當(dāng)熟悉一個(gè)類似如下圖所示的錯(cuò)誤"ORA-00942:表或視圖不存在",這個(gè)簡單的錯(cuò)誤提示,最初就是在CIA的要求之下作為一項(xiàng)安全防范設(shè)定的,這個(gè)提示的安全意義在于:避免提供任何具體的實(shí)質(zhì)性提示性信息,以預(yù)防黑客的攻擊性嘗試。由此可見,安全防范可以從每一個(gè)細(xì)節(jié)入手,安全是一項(xiàng)全面整體的技術(shù)實(shí)現(xiàn),并非孤立的存在。
接下來讓我們從Oracle數(shù)據(jù)庫的密碼機(jī)制上來深入了解一下Oracle的加密機(jī)制,雖然我們知道早在Oracle 數(shù)據(jù)庫版本8的年代,就已經(jīng)提供了強(qiáng)大豐富的數(shù)據(jù)庫加密功能,但是直至今日,恐怕半數(shù)以上的數(shù)據(jù)庫中,仍然存放著用戶的明文密碼,并且未采用任何數(shù)據(jù)庫安全增強(qiáng)機(jī)制。這也就是我認(rèn)為最重要的安全問題:我們并不缺乏安全防范手段,而是缺乏對于安全風(fēng)險(xiǎn)的認(rèn)知。
誠然,我們對于安全的認(rèn)識是隨著不斷出現(xiàn)的安全事故逐步增強(qiáng)的,但是希望大家都能夠有計(jì)劃的逐步增強(qiáng)對于數(shù)據(jù)庫的安全防范,主動(dòng)規(guī)劃推進(jìn)數(shù)據(jù)安全與從挫折中學(xué)習(xí)提高實(shí)有天壤之別。對于2011年底的密碼泄露事件,如果各大網(wǎng)站能夠采取基本的技術(shù)手段對用戶密碼進(jìn)行一定的加密,那么這次密碼泄露的安全事件就不會顯得那么初級和惹人恐慌,想一想明文密碼和MD5加密串的區(qū)別?前者基本上意味著數(shù)據(jù)庫從未從安全角度進(jìn)行過任何思考和增強(qiáng)。
Oracle數(shù)據(jù)庫的用戶信息及密碼存儲于一個(gè)名為USER$的數(shù)據(jù)表中(所有者為SYS用戶),我們可以通過基于USER$表建立的DBA_USERS視圖來查詢和獲得這些信息,包括加密的口令串。
在Oracle Database 11g之前,用戶口令通過DES加密算法進(jìn)行加密,使用用戶名作為"Salt"(Salt指加密過程對加密數(shù)據(jù)額外使用的干擾字串,可以使用隨機(jī)或固定的Salt),密碼最長為30個(gè)字符,所有字母被強(qiáng)制轉(zhuǎn)換為大寫。從Oracle 7 至 Oracle 10g,加密一直使用username和password串連之后進(jìn)行HASH運(yùn)算,例如sys/temp1和system/p1將會獲得相同的HASH加密輸出。
從Oracle Database 11g開始,Oracle允許最多使用30個(gè)字符、大小寫混合方式作為密碼,同時(shí)支持DES和SHA-1算法進(jìn)行加密(SHA-1算法支持大小寫混合,通過初始化參數(shù)SEC_CASE_SENSITIVE_LOGON開關(guān)),使用password||salt的方式進(jìn)行HASH加密。
以下是Oracle 9i數(shù)據(jù)庫中口令的加密形式,DBA_USERS視圖的PASSWORD字段顯示了加密后的密鑰:
在Oracle 11g中,密碼從DBA_USERS視圖中隱藏起來,這進(jìn)一步的增強(qiáng)了安全性,即便具有訪問視圖權(quán)限的用戶,也無法獲得口令的加密串,由此我們也可以看出Oracle數(shù)據(jù)庫軟件的安全增強(qiáng)歷程:
口令的加密內(nèi)容存儲在底層的核心表(USER$是Oracle數(shù)據(jù)庫的元數(shù)據(jù)表之一,僅超級用戶或DBA用戶才能訪問)中,以下PASSWORD字段存儲的是DES加密值,SPARE4存儲的是SHA-1加密信息:
關(guān)于口令的維護(hù),Oracle支持各種約束性限制(通過 utlpwdmg.sql 腳本啟用),諸如復(fù)雜程度、長度、有效期、失敗登陸次數(shù)等等,通過這些增強(qiáng),Oracle的口令限制可以定制出非常穩(wěn)固的安全解決方案,如果你從未接觸和研究過這些手段,那么可能就說明你的數(shù)據(jù)庫還缺乏足夠的第一層的安全防守。
如果我們能夠從Oracle的安全策略入手,學(xué)習(xí)一下Oracle的口令安全解決方案,那么就能夠構(gòu)建一套較為完善的基本安全解決方案。從Oracle的第一個(gè)Internet版本 Oracle 8i(1998年發(fā)布)開始,Oracle就提供了一個(gè)加密包DBMS_OBFUSCATION_TOOLKIT 用于數(shù)據(jù)安全防護(hù),這個(gè)加密包支持DES , 3DES 和MD5加密算法。
通過非常簡單的封裝調(diào)用,DBMS_OBFUSCATION_TOOLKIT 包就能夠?qū)崿F(xiàn)數(shù)據(jù)加密,以下是一個(gè)簡單的示例輸出,對于給定字符串進(jìn)行MD5加密,以RAW方式返回加密結(jié)果(通過創(chuàng)建穩(wěn)固的函數(shù),可以實(shí)現(xiàn)用戶登陸時(shí)的即時(shí)加密、比較、認(rèn)證):
從Oracle Database 10g開始,DBMS_CRYPTO包被引入到數(shù)據(jù)庫中,該程序包支持更廣泛的加密算法,并用于替代DBMS_OBFUSCATION_TOOLKIT包,在新的版本中,諸如DES, 3DES, AES, RC4, MD5, SHA-1, MD4, HMAC_MD5, HMAC_SH1等等加密算法和加密方式都被支持。
通過選定的加密算法和加密方式,可以對重要數(shù)據(jù)進(jìn)行加密和解密,我們不僅可以實(shí)現(xiàn)對于密碼或數(shù)值、字符數(shù)據(jù)的加密,甚至可以對類似LOB等非結(jié)構(gòu)化數(shù)據(jù)進(jìn)行加密。以下范例是使用DES算法CBC模式和PKCS5補(bǔ)碼規(guī)則的加密解密實(shí)現(xiàn),示例模擬對于信用卡卡號的處理過程,金融類企業(yè)數(shù)據(jù)的安全性更為突出,需要進(jìn)行安全加密的類型更為豐富:
在本文最后我想重申的是,對于不同的數(shù)據(jù)庫產(chǎn)品,都存在足夠成熟的安全實(shí)現(xiàn)手段,應(yīng)用這些安全手段就能夠?qū)崿F(xiàn)對于數(shù)據(jù)的基本保護(hù),對于我們技術(shù)人最重要的是:認(rèn)識和重視數(shù)據(jù)安全問題,并逐步推動(dòng)企業(yè)或組織應(yīng)用安全手段進(jìn)行數(shù)據(jù)安全增強(qiáng)。
重視數(shù)據(jù),保護(hù)數(shù)據(jù),重視數(shù)據(jù)安全問題,這是每一位技術(shù)人的共同使命!