數(shù)據(jù)庫(kù)安全漏洞分析
數(shù)據(jù)庫(kù)漏洞的存在有多種方式,由于每一個(gè)現(xiàn)實(shí)的場(chǎng)景由多維組合而成,因此數(shù)據(jù)庫(kù)漏洞對(duì)應(yīng)也可以從不同角度歸類(lèi)劃分。這種分類(lèi)將更有利于我們掌握對(duì)每種漏洞的防護(hù)技術(shù)。
??????安華金和數(shù)據(jù)庫(kù)安全實(shí)驗(yàn)室主要從以下九個(gè)角度對(duì)數(shù)據(jù)庫(kù)漏洞進(jìn)行分類(lèi)介紹:????
??1.從漏洞作用范圍劃分
????遠(yuǎn)程漏洞:攻擊者可以利用并直接通過(guò)網(wǎng)絡(luò)發(fā)起對(duì)數(shù)據(jù)庫(kù)攻擊的漏洞。這類(lèi)漏洞危害極大,攻擊者能隨心所欲的通過(guò)此漏洞危害網(wǎng)絡(luò)上可辨識(shí)的數(shù)據(jù)庫(kù)。此類(lèi)漏洞為黑客利用漏洞的主力。
??????本地攻擊:攻擊者必須在本機(jī)擁有訪問(wèn)權(quán)限的前提下才能發(fā)起攻擊的漏洞。比較典型有本地權(quán)限提升漏洞,這類(lèi)漏洞在數(shù)據(jù)庫(kù)中廣泛存在,能讓普通用戶獲得最高管理員權(quán)限。??
????2. 從漏洞危害等級(jí)劃分
????漏洞危害等級(jí)主要按照CVE的評(píng)分來(lái)劃分,分為三個(gè)檔次:0-3(LOW);4-6(MEDIUM)、7-10(HIGH)。 洞的危害等級(jí)劃分是根據(jù)一個(gè)漏洞對(duì)數(shù)據(jù)庫(kù)造成什么影響來(lái)劃分的。對(duì)數(shù)據(jù)庫(kù)的響的機(jī)密性、安全性、可用性影響越大威脅等級(jí)越高,反之危險(xiǎn)等級(jí)越低。舉例說(shuō)明:
CVE-2006-1705危險(xiǎn)等級(jí)是低。它對(duì)數(shù)據(jù)庫(kù)系統(tǒng)文件無(wú)任何影響,可能會(huì)導(dǎo)致數(shù)據(jù)庫(kù)某些配置文件被修改,對(duì)數(shù)據(jù)庫(kù)運(yùn)行無(wú)任何影響。
CVE-2006-1871危險(xiǎn)等級(jí)是中。它只是很可能造成某些信息泄露,有可能導(dǎo)致數(shù)據(jù)庫(kù)某些配置文件被修改,可能導(dǎo)致數(shù)據(jù)庫(kù)性能下降或小幾率出現(xiàn)斷鏈接。
CVE-2006-3702危險(xiǎn)等級(jí)是高。它可以導(dǎo)致所有數(shù)據(jù)庫(kù)系統(tǒng)文件泄露,數(shù)據(jù)庫(kù)完全被破壞,可能導(dǎo)致數(shù)據(jù)庫(kù)徹底宕機(jī)。
??3. 從受影響系統(tǒng)劃分
????現(xiàn)有的操作系統(tǒng)多種多樣,并且每種系統(tǒng)對(duì)應(yīng)多個(gè)版本。操作系統(tǒng)主要分為以下五類(lèi):dos 系統(tǒng)、windows 系統(tǒng)、unix 系統(tǒng)、linux 系統(tǒng)和其他操作系統(tǒng)。由于漏洞注入點(diǎn)地址和操作系統(tǒng)具體版本有著直接的關(guān)系,所以需要按照操作系統(tǒng)的具體版本來(lái)劃分。以oracle為例,由于不同的操作系統(tǒng)對(duì)緩沖區(qū)溢出的防守機(jī)制不同,導(dǎo)致這類(lèi)漏洞基本不存在跨平臺(tái)的可能。??
??4.從漏洞的危害范圍劃分
??????漏洞危害是指漏洞被利用后造成的各種危害。本文的危害是指對(duì)數(shù)據(jù)庫(kù)的直接危害或利用數(shù)據(jù)庫(kù)對(duì)其他系統(tǒng)造成的危害。這些危害可以分為三類(lèi):
??????危害數(shù)據(jù)庫(kù)自身,這類(lèi)漏洞主要是對(duì)數(shù)據(jù)庫(kù)自身進(jìn)行攻擊。這類(lèi)漏洞在下文中的“5. 從黑客入侵?jǐn)?shù)據(jù)庫(kù)的技術(shù)劃分”一節(jié)中有詳細(xì)講解。
????危害數(shù)據(jù)庫(kù)所在服務(wù)器,這類(lèi)漏洞通過(guò)數(shù)據(jù)庫(kù)對(duì)服務(wù)器進(jìn)行攻擊。其中手段可分為:通過(guò)pl/SQL運(yùn)行OS命令、通過(guò)JAVA運(yùn)行OS命令、直接通過(guò)任務(wù)調(diào)度程序運(yùn)行OS命令、使用ALTER SYSTEM運(yùn)行OS命令,在oracle的某些版本中可以利用oracle編譯本地pl/SQL應(yīng)用程序的方式來(lái)運(yùn)行OS命令。
??危害數(shù)據(jù)庫(kù)所在系統(tǒng)的文件系統(tǒng),這類(lèi)漏洞通過(guò)數(shù)據(jù)庫(kù)對(duì)服務(wù)器上的文件系統(tǒng)做攻擊。其中手段可分為:使用 UTL_FILE包訪問(wèn)文件系統(tǒng)、用JAVA訪問(wèn)文件系統(tǒng)、利用操作系統(tǒng)環(huán)境變量訪問(wèn)文件系統(tǒng)。
危害數(shù)據(jù)庫(kù)所在網(wǎng)絡(luò)上的其他平臺(tái),這類(lèi)漏洞通過(guò)數(shù)據(jù)庫(kù)對(duì)網(wǎng)絡(luò)上的其他數(shù)據(jù)庫(kù)和服務(wù)進(jìn)行入侵。
??5. 從黑客入侵?jǐn)?shù)據(jù)庫(kù)技術(shù)劃分
??????5.1 SQL注入
??????SQL本文說(shuō)所的SQLSQL注入不是web端的,而是針對(duì)數(shù)據(jù)庫(kù)自身的SQLSQL注入漏洞。兩者差異很大。 pl/SQL注入的思想非常簡(jiǎn)單,
????在正常的sql語(yǔ)句中通過(guò)嵌入、注釋、轉(zhuǎn)義符等手段加入針對(duì)數(shù)據(jù)庫(kù)漏洞或數(shù)據(jù)庫(kù)設(shè)置缺陷的畸形字符串或其他畸形輸入。通過(guò)單次或多次這種畸形輸入逐步獲取數(shù)據(jù)庫(kù)中更高權(quán)限,最終獲取數(shù)據(jù)庫(kù)中敏感信息或直接奪取數(shù)據(jù)庫(kù)DBA權(quán)限。進(jìn)而可能對(duì)數(shù)據(jù)庫(kù)所在的網(wǎng)絡(luò)環(huán)境和本地服務(wù)器造成危害。
??手段具體分為:
代碼注入。代碼注入攻擊多在支持多條SQL語(yǔ)句執(zhí)行的數(shù)據(jù)中存在。它是通過(guò)黑客在正常語(yǔ)句中加入惡意EXECUTE命令完成攻擊的。
函數(shù)調(diào)用注入。函數(shù)調(diào)用注入是代碼注入的變體,但確是整個(gè)SQL注入的核心。它利用數(shù)據(jù)庫(kù)存在漏洞將惡意語(yǔ)句注入其中。具體手法分為:
注入select /delete/insert/update語(yǔ)句
注入函數(shù)
注入匿名pl/SQL塊
游標(biāo)注入
利用觸發(fā)器
lateral提權(quán)技術(shù)
????????其中每種技術(shù)中還有細(xì)分,例如lateral提權(quán)技術(shù)中最著名的是CREATE ANT TRIGGER 權(quán)限提DBA、CREATE ANT VIEW 權(quán)限提DBA、EXECUTE ANY PROCEDURE權(quán)限提DBA、CREATE PROCEDUER 權(quán)限提DBA。
??????????緩沖區(qū)溢出注入。????這個(gè)緩沖區(qū)溢出和下文的緩沖區(qū)溢出不是一種。這種緩沖區(qū)溢出是數(shù)據(jù)庫(kù)系統(tǒng)函數(shù)中某些參數(shù)被傳入了超過(guò)參數(shù)長(zhǎng)度限制的值,而引發(fā)的緩沖區(qū)溢出。
??針對(duì)SQL操作的注入。??最常見(jiàn)的是利用where子句修改SQL語(yǔ)句返回不同的結(jié)果集,來(lái)達(dá)到獲取數(shù)據(jù)庫(kù)敏感信息的目的。
????5.2 緩沖區(qū)溢出
??????緩沖區(qū)溢出:這里所說(shuō)的緩沖區(qū)溢出是指源緩沖區(qū)的數(shù)據(jù)向小于自身位數(shù)的緩沖區(qū)復(fù)制數(shù)據(jù)時(shí),超越目標(biāo)緩沖區(qū)的位數(shù)邊界,并且數(shù)據(jù)庫(kù)未對(duì)存入數(shù)據(jù)進(jìn)行邊界判斷,最終導(dǎo)致目標(biāo)緩沖區(qū)爆滿。目標(biāo)緩沖區(qū)內(nèi)存改變程序控制流、奪取操作系統(tǒng)、禁止訪問(wèn)等多種結(jié)果。緩沖區(qū)溢出主要可以分成四種:靜態(tài)數(shù)據(jù)溢出、棧溢出、堆溢出和格式化串。
????????手段具體分為:
?????? 棧溢出 。????緩沖區(qū)溢出的一種主要是通過(guò)利用截取函數(shù)返回值來(lái)進(jìn)行棧溢出。方式主要分為兩種,一種是通過(guò)緩沖區(qū)溢出改變函數(shù)邏輯流程;另一種方式是通過(guò)緩沖區(qū)溢出改變函數(shù)返回地址。其中比較常見(jiàn)的為第二種。
???? 堆溢出 。????緩沖區(qū)溢出的一種,利用原理類(lèi)似棧溢出,但由于堆中地址是動(dòng)態(tài)分配的,無(wú)法準(zhǔn)確定位,所以黑客要利用堆溢出需要通過(guò)DWORD SHOOT技術(shù)來(lái)對(duì)堆進(jìn)行掃描,獲取堆溢出中可利用的地址。
????靜態(tài)數(shù)據(jù)區(qū)溢出。????靜態(tài)數(shù)據(jù)區(qū)域存放連續(xù)的全局變量和未初始化的靜態(tài)變量,緩沖區(qū)在這發(fā)生溢出稱(chēng)為靜態(tài)數(shù)據(jù)區(qū)溢出。
???? 格式化串 。????格式化串漏洞最顯著的例子,就是在*printf()系列函數(shù)中按照一定的格式對(duì)數(shù)據(jù)進(jìn)行輸出。黑客主要是利用printf()系列函數(shù)有三條特殊的性質(zhì),首先,第一個(gè)可以被利用的性質(zhì)是:*printf()系列函數(shù)的參數(shù)的個(gè)數(shù)是不固定的。其次,利用*printf()的一個(gè)特殊的格式符%n,黑客就向內(nèi)存中寫(xiě)入exploit。再次,利用附加格式符控制跳轉(zhuǎn)地址的值。
????5.3 其他
???? 弱口令 。通常指容易被別人猜測(cè)到或被解除工具解除的口令均為弱口令,其中很大一部分是數(shù)據(jù)庫(kù)默認(rèn)口令,其中有一部分是因?yàn)槿笔∶艽a產(chǎn)生的。
????撞庫(kù)。通過(guò)已收集到的在其他服務(wù)中注冊(cè)的用戶名和密碼,對(duì)目標(biāo)數(shù)據(jù)庫(kù)進(jìn)行訪問(wèn)嘗試。由于很多人習(xí)慣用相同密碼和賬號(hào),因此成功登陸到目標(biāo)數(shù)據(jù)庫(kù)的可能性大大提高,達(dá)成盜取大量敏感信息的目的。????
暴力解除。通過(guò)數(shù)據(jù)字典(密碼庫(kù))對(duì)數(shù)據(jù)庫(kù)的用戶名進(jìn)行碰撞,最終碰出可以用于訪問(wèn)數(shù)據(jù)庫(kù)的用戶和密碼組合。????
6. 從數(shù)據(jù)庫(kù)漏洞成因劃分
????輸入驗(yàn)證錯(cuò)誤。????????????這種錯(cuò)誤主要來(lái)源于字符串、包等輸入值缺乏正確合理的驗(yàn)證,從而導(dǎo)致畸形的輸入值進(jìn)入數(shù)據(jù)庫(kù)系統(tǒng)函數(shù)中,對(duì)數(shù)據(jù)庫(kù)造成不可預(yù)計(jì)的后果。
???????????? 邊界條件錯(cuò)誤 。????由于數(shù)據(jù)庫(kù)屬于大型復(fù)雜的軟件,軟件內(nèi)部函數(shù)調(diào)用過(guò)于復(fù)雜,有時(shí)會(huì)出現(xiàn)對(duì)某個(gè)傳入值的邊界,不同地方限制不同,可能對(duì)數(shù)據(jù)庫(kù)造成不良影響。
???? 緩沖區(qū)溢出錯(cuò)誤 。????由于數(shù)據(jù)庫(kù)中某些函數(shù)中的參數(shù)值缺乏邊界限制和檢查,從而暴露出的數(shù)據(jù)庫(kù)漏洞。
???? 訪問(wèn)驗(yàn)證錯(cuò)誤 。????訪問(wèn)驗(yàn)證錯(cuò)誤主要在數(shù)據(jù)庫(kù)的網(wǎng)絡(luò)監(jiān)聽(tīng)上,黑客通過(guò)發(fā)送欺詐數(shù)據(jù)包,來(lái)騙取數(shù)據(jù)庫(kù)重要信息。
???? 意外條件錯(cuò)誤 。????由于數(shù)據(jù)庫(kù)中邏輯比較復(fù)雜,某些很少被觸發(fā)的邏輯分支由于軟件周期等原因,未被及時(shí)發(fā)現(xiàn)而導(dǎo)致的數(shù)據(jù)庫(kù)漏洞。
???? 其他錯(cuò)誤 。??????除了以上五類(lèi)原因錯(cuò)誤導(dǎo)致的數(shù)據(jù)庫(kù)漏洞,大部分其他錯(cuò)誤是由于用戶在使用數(shù)據(jù)庫(kù)時(shí),未能按照數(shù)據(jù)庫(kù)官方要求進(jìn)行操作和配置,或者是數(shù)據(jù)庫(kù)本身的設(shè)計(jì)缺陷所引發(fā)的漏洞。????
??7. 從漏洞利用的結(jié)果劃分
???? 越權(quán)訪問(wèn) 。訪問(wèn)原本不可訪問(wèn)的數(shù)據(jù),包括讀和寫(xiě)。這一條通常是攻擊者的核心目的,而且可造成非常嚴(yán)重的災(zāi)難(如銀行數(shù)據(jù)被人可寫(xiě))。
???? 提權(quán) 。通過(guò)越權(quán)等方式,對(duì)一個(gè)低權(quán)限用戶提升權(quán)限,一步一步直到提升為DBA權(quán)限。利用提權(quán)后的賬號(hào)竊取數(shù)據(jù)庫(kù)中核心數(shù)據(jù)。
???? 拒絕服務(wù) 。攻擊者強(qiáng)制目標(biāo)數(shù)據(jù)庫(kù)停止提供服務(wù),是黑客常用的攻擊手段之一。其中數(shù)據(jù)庫(kù)端口進(jìn)行的消耗性攻擊只是拒絕服務(wù)攻擊的一小部分,凡是使數(shù)據(jù)庫(kù)服務(wù)被暫停甚至所處主機(jī)死機(jī),都屬于拒絕服務(wù)攻擊。
?????? 奪取操作系統(tǒng) 。當(dāng)黑客通過(guò)網(wǎng)絡(luò)對(duì)數(shù)據(jù)庫(kù)進(jìn)行攻擊,利用緩沖區(qū)漏洞的攻擊會(huì)通過(guò)劫持被入侵函數(shù)中的棧中的函數(shù)返回值,來(lái)奪取??????函數(shù)控制,跳轉(zhuǎn)到黑客編寫(xiě)的shellcode。當(dāng)shellcode打開(kāi)CMD(windows)即可通過(guò)數(shù)據(jù)庫(kù)賬號(hào)來(lái)操控操作系統(tǒng),從而奪取整個(gè)操作系統(tǒng)的過(guò)程。
???? 認(rèn)證繞過(guò) 。通常利用認(rèn)證系統(tǒng)??????的漏洞不用受權(quán)就能進(jìn)入系統(tǒng)。通常認(rèn)證繞過(guò)都是為權(quán)限提升或直接的數(shù)據(jù)訪問(wèn)服務(wù)的。??
????8. 從數(shù)據(jù)庫(kù)??存漏洞的位置劃分
????由于不同數(shù)據(jù)庫(kù)類(lèi)似功能的名稱(chēng)不同本文依oracle為例說(shuō)明:按照漏洞位置可以分為T(mén)NS(監(jiān)聽(tīng))漏洞 、Aurora GIOP server漏洞、XDB組件漏洞、DBMS_CDC_IMPDP漏洞、LT組件漏洞、DBMS_CDC_SUBSCRIBE漏洞、DBMS_CDC_ISUBSCRIBE漏洞、MDSYS.SDO_GEOM_TRIG_INSI漏洞、SYS.CDC_DROP_CTABLE_BEFORE漏洞、DBMS_SCHRDULER漏洞、UTL_FILE漏洞、Data Redaction漏洞、審計(jì)漏洞等。??
????9. 從漏洞產(chǎn)生的時(shí)序上劃分
?????????????????????????? 已發(fā)現(xiàn)很久的漏洞 。數(shù)據(jù)庫(kù)廠商已經(jīng)發(fā)布補(bǔ)丁或修補(bǔ)方法,很多人已經(jīng)知曉。這類(lèi)漏洞通常很多人已經(jīng)進(jìn)行了修改,宏觀上看,危??????害較小。
??????剛發(fā)現(xiàn)的漏洞。數(shù)據(jù)庫(kù)廠????商剛發(fā)布補(bǔ)丁或修補(bǔ)方法,知道的人還不多。相對(duì)于上一種漏洞其危害性較大,如果此時(shí)出現(xiàn)了蠕蟲(chóng)或傻??瓜化的利用程序,那么會(huì)????????導(dǎo)致大批數(shù)據(jù)庫(kù)受到攻擊。這也是一般黑客最多利用的漏洞。??????????????
????0day漏洞。還沒(méi)有公開(kāi)的漏洞,在私下交易中的。這類(lèi)漏洞通常是最危險(xiǎn)的,往往是有組織黑客所采用的。