Oracle 數(shù)據(jù)庫(kù)經(jīng)歷了幾十年的演進(jìn),無數(shù)個(gè)版本更新和漏洞修復(fù),但天下沒有無懈可擊的完美程序,風(fēng)險(xiǎn)仍然存在,并且往往是多個(gè)角度和多個(gè)層面共同作用的結(jié)果。我們?cè)褂脭?shù)據(jù)庫(kù)掃描工具為用戶數(shù)據(jù)庫(kù)進(jìn)行安全檢查,發(fā)現(xiàn)在Oracle的數(shù)據(jù)庫(kù)運(yùn)維中存在很多問題,包括:弱口令、默認(rèn)密碼、數(shù)據(jù)庫(kù)后門、數(shù)據(jù)庫(kù)配置不當(dāng)、敏感數(shù)據(jù)、高危審計(jì)、版本失去安全支持、數(shù)據(jù)庫(kù)漏洞以及數(shù)據(jù)庫(kù)勒索病毒等。這些安全風(fēng)險(xiǎn)的存在讓數(shù)據(jù)泄露或被篡改等安全事件一觸即發(fā)。
11月21日20:00,安華金和攻防實(shí)驗(yàn)室安全專家劉思成作客雷鋒網(wǎng),直播講解《Oracle數(shù)據(jù)庫(kù)攻防案例分享》,通過數(shù)據(jù)庫(kù)攻防實(shí)戰(zhàn)演練,介紹數(shù)據(jù)庫(kù)運(yùn)維側(cè)可能存在的安全風(fēng)險(xiǎn)和隱患。今天我們將公開課內(nèi)容分享出來,希望能為數(shù)據(jù)庫(kù)運(yùn)維人員提供參考,進(jìn)一步提高數(shù)據(jù)庫(kù)安全運(yùn)維能力。
目前,運(yùn)維側(cè)最常會(huì)遇到的安全問題主要為以下三類:
數(shù)據(jù)庫(kù)配置不當(dāng)
數(shù)據(jù)庫(kù)安全漏洞
數(shù)據(jù)庫(kù)勒索病毒
數(shù)據(jù)庫(kù)配置不當(dāng)
Oracle數(shù)據(jù)庫(kù)存在幾千個(gè)參數(shù)配置項(xiàng),難免在配置中出現(xiàn)錯(cuò)誤或者不合理的情況。當(dāng)發(fā)生錯(cuò)誤配置時(shí),帶來的安全問題甚至比數(shù)據(jù)庫(kù)漏洞造成的后果要嚴(yán)重的多。我們把和安全相關(guān)的數(shù)據(jù)庫(kù)配置分為四類:
1)參數(shù)設(shè)置不當(dāng)
2)角色設(shè)置不當(dāng)
3)系統(tǒng)權(quán)限設(shè)置不當(dāng)
4)包權(quán)限設(shè)置不當(dāng)
其中,參數(shù)設(shè)置不當(dāng)是指,某些參數(shù)進(jìn)行了錯(cuò)誤設(shè)置,這是針對(duì)所有數(shù)據(jù)庫(kù)用戶而言,錯(cuò)誤的設(shè)置可能會(huì)給漏洞提供溫床、也可能本身就能當(dāng)作漏洞執(zhí)行。角色、系統(tǒng)權(quán)限和包權(quán)限設(shè)置不當(dāng)是專門針對(duì)低權(quán)限數(shù)據(jù)庫(kù)用戶而言,錯(cuò)誤的設(shè)置可能導(dǎo)致低權(quán)限用戶利用特定角色、系統(tǒng)權(quán)限或包把自己提權(quán)到DBA或其他默認(rèn)高權(quán)限用戶。
有一次,我們?cè)谟脩衄F(xiàn)場(chǎng)用數(shù)據(jù)庫(kù)漏掃產(chǎn)品幫用戶做安全檢查,結(jié)果發(fā)現(xiàn)用戶側(cè)上圖所示的參數(shù)被設(shè)置成了*。用戶一開始覺得這個(gè)設(shè)置沒什么大問題,隨著我們向用戶展示如何利用這個(gè)錯(cuò)誤配置項(xiàng),攻擊數(shù)據(jù)庫(kù),用戶發(fā)現(xiàn)原來這個(gè)錯(cuò)誤配置會(huì)造成嚴(yán)重后果。那么,上圖所示 UTL_FILE_DIR 和 utl_file是用來做什么的呢?
UTL_FILE包:用來讀寫操作系統(tǒng)上的文本文件
UTL_FILE_DIR :Oracle 的一個(gè)靜態(tài)參數(shù),負(fù)責(zé)確定UTL_FILE 讀寫路徑。
參數(shù)配置不當(dāng)
當(dāng) UTL_FILE_DIR 的參數(shù)被設(shè)置為*的時(shí)候就意味著可以用數(shù)據(jù)庫(kù)用戶訪問操作系統(tǒng)Oracle 賬號(hào)下的所有文件。假如你是黑客,你會(huì)怎么利用這點(diǎn)來攻擊數(shù)據(jù)庫(kù)呢?
當(dāng)我們具備讀寫文件的能力,最直接的做法就是利用寫的權(quán)限,在home/oracle 下寫一個(gè)腳本。例如這個(gè)腳本可以讓我們?cè)趆ome/oracle 路徑下創(chuàng)建一個(gè)腳本 hell,該腳本可以塞入到Oracle 賬號(hào)權(quán)限下能執(zhí)行的所有行為,作為黑客的我們就可以為所欲為了。當(dāng)然,這只是個(gè)演示,于是我們寫的是Hello world。
理想很美好,但現(xiàn)實(shí)卻很骨感。在windows上如果數(shù)據(jù)庫(kù)賬號(hào)未經(jīng)過降權(quán)限處理,此舉或許可行,但對(duì)于linux來說不可以,因?yàn)槿绱藙?chuàng)建的文件并沒有執(zhí)行權(quán)限,根本無法執(zhí)行或被調(diào)用。新建的文件不行,但如果是覆蓋已有的文件,或許就能達(dá)到目的。其中,可以覆蓋的文件有很多例如oracle_home\bin 路徑下的 dbstart。但是這種腳本的方式需要調(diào)用才能執(zhí)行,很可能很久之后才能被動(dòng)觸發(fā),如此守株待兔哪有主動(dòng)出擊來得暢快呢。
這時(shí)候,我們可以調(diào)整思路去覆蓋一些對(duì)數(shù)據(jù)庫(kù)直接產(chǎn)生影響的文件。例如下圖所示的這個(gè)文件,是數(shù)據(jù)庫(kù)下的密碼文件,里面存儲(chǔ)了sys用戶在身份驗(yàn)證時(shí)的密碼和一些關(guān)鍵信息。
orapworcl 是Oracle 的密碼文件
圖中是orapworcl的結(jié)構(gòu),其實(shí)完全不用弄清楚其中的細(xì)節(jié),只要使用一個(gè)密碼已知的該文件,將其中的二進(jìn)制覆蓋到目標(biāo)文件即可。如此一來,就達(dá)到了任意用戶可修改SYS用戶密碼的效果。
根據(jù)上述想法,咱們把整個(gè)文件中的內(nèi)容替換成我們已知密碼的文件,再使用低權(quán)限賬號(hào)執(zhí)行sql ,完成之后當(dāng)再一次登錄數(shù)據(jù)庫(kù)時(shí)會(huì)發(fā)現(xiàn),原來sys賬號(hào)的test密碼已經(jīng)無法正常登錄,修改后的sys 密碼卻可以正常登錄數(shù)據(jù)庫(kù)。
至此,我們完成了利用ult_file_dir 參數(shù)錯(cuò)誤配置,實(shí)現(xiàn)低權(quán)限用戶可在數(shù)據(jù)庫(kù)服務(wù)器上注入腳本和修改SYS賬號(hào)密碼的攻擊演示。
除上述案例中講述的一類參數(shù)配置錯(cuò)誤導(dǎo)致的安全問題,角色權(quán)限、系統(tǒng)權(quán)限和包權(quán)限設(shè)置不當(dāng),同樣會(huì)導(dǎo)致低權(quán)限用戶直接獲得提權(quán)至DBA,或能夠控制操作系統(tǒng)、越權(quán)執(zhí)行任意sql 語句。
角色權(quán)限設(shè)置不當(dāng)
例如,角色權(quán)限設(shè)置不當(dāng)。當(dāng)角色被賦予低權(quán)限用戶,相當(dāng)于交出了完整的java權(quán)限,可以讓低權(quán)限用戶通過Oracle 賬號(hào)權(quán)限獲得操作系統(tǒng)的操作權(quán)限,從而可在操作系統(tǒng)上為所欲為。
系統(tǒng)權(quán)限設(shè)置不當(dāng)
系統(tǒng)權(quán)限設(shè)置不當(dāng)一旦出現(xiàn),這種情況就更危險(xiǎn)了。執(zhí)行任意存儲(chǔ)過程的權(quán)限一旦被賦予低權(quán)限用戶,后者可以利用某些調(diào)用者權(quán)限存儲(chǔ)過程實(shí)現(xiàn)提權(quán)到DBA的目的。
包權(quán)限設(shè)置不當(dāng)
包權(quán)限設(shè)置不當(dāng)也是一件麻煩事兒。如果把包權(quán)限給了低權(quán)限用戶,低權(quán)限用戶就可以利用語句以SYS權(quán)限調(diào)用執(zhí)行計(jì)劃函數(shù),從而有機(jī)會(huì)執(zhí)行任意sql語句。
總結(jié)下來,因?yàn)閿?shù)據(jù)庫(kù)配置不當(dāng)帶來的安全隱患表現(xiàn)為:
角色權(quán)限設(shè)置不當(dāng)——AVASYSPRIV角色給予低權(quán)限用戶
系統(tǒng)權(quán)限設(shè)置不當(dāng)——EXECUTE ANY PROCEDURE權(quán)限給低權(quán)限用戶
包權(quán)限設(shè)置不當(dāng)——DBMS_IJOB包權(quán)限給低權(quán)限用戶
針對(duì)配置不當(dāng),我們提供三條安全防護(hù)建議,90%的安全問題都可迎刃而解:
1)嚴(yán)格按照Oracle官方網(wǎng)站的建議進(jìn)行配置,切莫簡(jiǎn)單滿足應(yīng)用需求,而自毀長(zhǎng)城。
2)對(duì)所有賬號(hào)實(shí)施最小權(quán)限控制。尤其是對(duì)于第三方開發(fā)調(diào)試所給予的數(shù)據(jù)賬號(hào)密碼一定要保持滿足需求下的最小權(quán)限,最小權(quán)限將有效的減小數(shù)據(jù)庫(kù)被入侵的威脅。
3)禁止或刪除數(shù)據(jù)庫(kù)對(duì)OS文件訪問的函數(shù)或存儲(chǔ)過程,避免殃及整個(gè)數(shù)據(jù)庫(kù)所在的操作系統(tǒng)和內(nèi)網(wǎng)環(huán)境。
此外,還有一種更省事的辦法,就是直接用成熟的數(shù)據(jù)庫(kù)漏掃產(chǎn)品進(jìn)行定期檢查。鏈接為安華金和數(shù)據(jù)庫(kù)漏掃的一個(gè)免費(fèi)版,大家可以拿去試用:http://www.dbscloud.cn/dbscan.html
數(shù)據(jù)庫(kù)安全漏洞
數(shù)據(jù)庫(kù)配置不當(dāng),先告一段落,現(xiàn)在一起關(guān)注數(shù)據(jù)庫(kù)第二大類安全問題——數(shù)據(jù)庫(kù)安全漏洞。數(shù)據(jù)庫(kù)漏洞威脅一直是數(shù)據(jù)庫(kù)的嚴(yán)重威脅。從不同角度來看數(shù)據(jù)庫(kù)存在多種不同分類方式,按照漏洞屬性分,數(shù)據(jù)庫(kù)漏洞大體分為兩種類型:第一是數(shù)據(jù)庫(kù)專有漏洞,第二類是通用性軟件漏洞。
上圖的分類并不完善,但涵蓋了最主流的數(shù)據(jù)庫(kù)漏洞類型。接下來,一起看一個(gè)跨越多版本的、覆蓋面廣、很難被發(fā)現(xiàn)的數(shù)據(jù)庫(kù)漏洞組合利用案例:
該案例是我們首次在用戶的數(shù)據(jù)庫(kù)中發(fā)現(xiàn),同時(shí)存在CVE-2012-1675漏洞和CVE-2012-3137漏洞。這兩個(gè)漏洞單均為中危漏洞,但兩者組合使用會(huì)呈現(xiàn)出高危漏洞的效果。兩個(gè)漏洞和數(shù)據(jù)庫(kù)通訊協(xié)議密切相關(guān),一旦被黑客利用,可以借此從網(wǎng)絡(luò)端對(duì)Oracle 數(shù)據(jù)庫(kù)發(fā)動(dòng)攻擊。黑客組合使用該漏洞組合可以分為三步:依次為探、改、破。
第一步:探。利用CVE-2012-1675 竊聽用戶客戶端和數(shù)據(jù)庫(kù)之間的通訊內(nèi)容,盜取數(shù)據(jù);
第二步:改。利用代理轉(zhuǎn)發(fā)機(jī)制,對(duì)特定語句進(jìn)行改包,以此返回黑客想盜取的信息;
第三步:破。通過網(wǎng)絡(luò)竊取拿到數(shù)據(jù)庫(kù)登錄包的身份驗(yàn)證部分,再利用CVE-2012-3137漏洞進(jìn)行離線暴力破解,拿到數(shù)據(jù)庫(kù)的用戶名和密碼。
在討論細(xì)節(jié)前,我們先探討一下這兩個(gè)漏洞的適用范圍和原理:
TNS劫持(CVE-2012-1675)包含三個(gè)特點(diǎn):
可用范圍廣(10g到11g大部分版本受到影響)
屬于機(jī)制問題,多年未修復(fù)
隱藏性好(入侵過程不易留下痕跡)
離線暴力破解(CVE-2012-3137):截獲到登錄包后可以通過特定標(biāo)記算出加密的密碼。
簡(jiǎn)單說,TNS劫持原理是基于Oracle 支持多個(gè)實(shí)例注冊(cè)在一個(gè)監(jiān)聽下,實(shí)例去注冊(cè)監(jiān)聽有兩種方式
第一種方式:本地注冊(cè)
第二種方式:遠(yuǎn)程注冊(cè)
同名的實(shí)例和IP端口會(huì)被誤認(rèn)為是一組RAC,而后按照負(fù)載均衡調(diào)用。
于是黑客只要知道目標(biāo)數(shù)據(jù)庫(kù)所注冊(cè)的TNS在哪,偽造一組IP端口和實(shí)例名把自己通過遠(yuǎn)程注冊(cè)的機(jī)制,注冊(cè)到TNS中,就像下圖中展示的有兩個(gè)test11test實(shí)例。一個(gè)test11test是本地注冊(cè)的,另一個(gè)是黑客通過遠(yuǎn)程注冊(cè)的。當(dāng)黑客把自己注冊(cè)成同名實(shí)例后,只要維持好心跳,讓TNS一直以為遠(yuǎn)程實(shí)例存活,TNS就可能把客戶端發(fā)起的會(huì)話轉(zhuǎn)發(fā)到黑客的偽造的實(shí)例上,從而發(fā)給黑客。黑客繼而將會(huì)話再轉(zhuǎn)發(fā)回?cái)?shù)據(jù)庫(kù)即可。
Tns劫持本質(zhì)就是一個(gè)大代理,因?yàn)樨?fù)載均衡把一部會(huì)話轉(zhuǎn)到黑客處,黑客改包后在轉(zhuǎn)回給真實(shí)數(shù)據(jù)庫(kù)處理。這樣數(shù)據(jù)庫(kù)和客戶端可能在一段時(shí)間內(nèi)都無法感覺到其中的變化。因此,劫持可以默默潛伏偷聽敏感信息或者直接對(duì)來包進(jìn)行改包,得以查詢敏感信息。
TNS劫持的真實(shí)效果
模擬黑客在同一個(gè)監(jiān)聽下利用遠(yuǎn)程和本地分別注冊(cè)兩個(gè)同名實(shí)例??蛻舳嗽L問監(jiān)聽,監(jiān)聽按照客戶端中的數(shù)據(jù)庫(kù)名信息分配數(shù)據(jù)庫(kù),由于監(jiān)聽下有2個(gè)同名實(shí)例名,客戶端鏈接很可能會(huì)被分配到劫持者的數(shù)據(jù)庫(kù)實(shí)例下,再通過配置劫持者的本地監(jiān)聽把客戶端請(qǐng)求指回原數(shù)據(jù)庫(kù)。
測(cè)試客戶端鏈接196次,目標(biāo)數(shù)據(jù)庫(kù)實(shí)例獲得113次,劫持?jǐn)?shù)據(jù)庫(kù)實(shí)例獲得83次基本滿足負(fù)載均衡的假設(shè)。上圖的第一個(gè)實(shí)例是local server真實(shí)的數(shù)據(jù)庫(kù)實(shí)例,第二個(gè)實(shí)例是 remote server 黑客偽造的,通過上述方式我們可以截獲約一半的客戶端發(fā)送到服務(wù)器的合法鏈接,并從其中盜取數(shù)據(jù),甚至進(jìn)行改包。
離線暴力破解原理
離線暴力破解(CVE-2012-3137)這個(gè)漏洞的原理是如果能獲取Oracle 數(shù)據(jù)庫(kù)登錄包中的身份驗(yàn)證部分,則可以通過這個(gè)包來計(jì)算出當(dāng)前登錄所使用的賬號(hào)和密碼。在深入探討之前,咱們還是一起看下身份驗(yàn)證部分的原理:
在Oracle發(fā)起連接后,Oracle客戶端向Oracle數(shù)據(jù)庫(kù)發(fā)送自己的版本號(hào),包含加密算法等信息。最終2邊確定使用什么加密算法,然后進(jìn)行O5logon(身份驗(yàn)證協(xié)議)驗(yàn)證:
首先,客戶端通過包把要進(jìn)行身份驗(yàn)證的用戶傳輸?shù)綌?shù)據(jù)庫(kù)端。
接著,數(shù)據(jù)庫(kù)端會(huì)針對(duì)身份校驗(yàn)用戶名找到用戶名對(duì)應(yīng)的密碼,通過一些列復(fù)雜的參數(shù)把密碼算成一個(gè)48個(gè)字節(jié)的字符串,這個(gè)字符串被稱為auth_sesskey。然后把a(bǔ)uth_sesskey和隨機(jī)鹽通過網(wǎng)絡(luò)包返回給客戶端。
然后,客戶端拿到服務(wù)器端的auth_sesskey,根據(jù)自己掌握的密碼解出其中的隨機(jī)數(shù),在利用隨機(jī)數(shù)生成客戶端的 auth_sesskey和authpassword。
最后,數(shù)據(jù)端進(jìn)行判斷,如果成功則身份驗(yàn)證通過,后面再進(jìn)行權(quán)限等的驗(yàn)證;如果失敗則登錄失敗。
o5logon 協(xié)議具體算法(一)
上文提到客戶端發(fā)給服務(wù)器的第一個(gè)包,上圖中畫紅線的位置就是此次進(jìn)行身份驗(yàn)證的用戶,用戶名是明文的。再看服務(wù)器給客戶端的回包,回包中存在兩個(gè)關(guān)鍵參數(shù),也就是隨機(jī)鹽:AUTH_sesskey 和auth_vfr_data。其中,AUTH_sesskey是以O(shè)racle_hase 為key 用當(dāng)時(shí)系統(tǒng)通過一些列參數(shù)生成的40個(gè)字節(jié)隨機(jī)數(shù),使用aes-256-cbc進(jìn)行加密生成;Oracle_hase則是Oracle中存儲(chǔ)的對(duì)應(yīng)用戶名的密鑰進(jìn)行sha1和md5的結(jié)果。后面的客戶端的 auth_sesskey 和 auth_password 也是通過類似的手段計(jì)算得出。
離線暴力破解
離線暴力破解漏洞正是利用存在該漏洞的版本,如果你使用正確的密碼算出Oracle_hash。用Oracle_hash再對(duì)網(wǎng)絡(luò)包中的auth_sesskey 進(jìn)行解密,你會(huì)發(fā)現(xiàn)40個(gè)字節(jié)的隨機(jī)字符串中的最后4個(gè)字節(jié)是0x40x040x040x040這種模式,并非一組毫無規(guī)律的隨機(jī)數(shù)。因此,可以反推出用于計(jì)算oracle_hash的密碼是真正的數(shù)據(jù)庫(kù)密碼。
如何防護(hù)數(shù)據(jù)庫(kù)漏洞引發(fā)的對(duì)運(yùn)維側(cè)的攻擊,我們提出兩條防護(hù)建議:
1)如果允許第一時(shí)間內(nèi)打補(bǔ)丁是非常必要的。官方補(bǔ)丁能解決95%的問題,攻擊數(shù)據(jù)庫(kù)經(jīng)常都是用的很老的漏洞,0day比例就很小。
2)如果由于測(cè)試結(jié)果或環(huán)境的問題無法打補(bǔ)丁,那么只能采用具備虛擬補(bǔ)丁能力的數(shù)據(jù)庫(kù)防火墻產(chǎn)品進(jìn)行加固,虛擬補(bǔ)丁通過規(guī)則可以防護(hù)大部分已知數(shù)據(jù)庫(kù)漏洞的攻擊。
數(shù)據(jù)庫(kù)勒索病毒
最后這部分咱們來聊一聊第三類主要安全威脅——數(shù)據(jù)庫(kù)勒索病毒,這是目前最為常見,也最為危險(xiǎn)的數(shù)據(jù)庫(kù)攻擊方式。已經(jīng)在用戶處發(fā)現(xiàn)多起案例。其中,和數(shù)據(jù)庫(kù)有關(guān)系的主要有三種:1)客戶端軟件比特幣勒索;2)Oracle 升級(jí)包惡意腳本;3)文件系統(tǒng)加密比特幣勒索。
文件系統(tǒng)加密相對(duì)來說,和數(shù)據(jù)庫(kù)關(guān)系沒那么緊密。這種類型基本只在windows上遇到過,不過據(jù)悉已經(jīng)在linux上發(fā)現(xiàn)了文件勒索病毒。該病毒的勒索目標(biāo)主要是文件系統(tǒng)上的一些特定后綴的文件。根據(jù)和數(shù)據(jù)庫(kù)相關(guān)的程度可以分為三種:不加密數(shù)據(jù)文件、只加密文件頭 和文件整體加密。
如果有備份這種情況下不會(huì)造成什么影響,直接啟用備份即可,在確定沒有備份的情況下可以考慮如下解決方式:
第一種,不加密數(shù)據(jù)文件。這種往往只加密了圖片、執(zhí)行文件、word文檔等文件,對(duì)數(shù)據(jù)文件根本不加密。出現(xiàn)這類現(xiàn)象雖然會(huì)導(dǎo)致數(shù)據(jù)庫(kù)無法使用,但起因只是因?yàn)榘褦?shù)據(jù)庫(kù)的執(zhí)行文件加密了。由于庫(kù)文件未被加密,數(shù)據(jù)不存在丟失風(fēng)險(xiǎn)。把庫(kù)文件轉(zhuǎn)移到其他安全的機(jī)器上即可快速恢復(fù)數(shù)據(jù)庫(kù)。
第二種,雖然加密了庫(kù)文件,但只加密了庫(kù)文件的頭。這種相比第一種要麻煩一些,需要借助Oracle 官方或第三方dul 來抽取數(shù)據(jù),抽取數(shù)據(jù)后重建數(shù)據(jù)庫(kù)即可解決問題。
第三種,庫(kù)文件被整體加密。這種比較棘手,沒有備份就只能通過硬盤先恢復(fù)被刪除的原庫(kù)文件,恢復(fù)的多少和結(jié)果就比較隨機(jī)了。
近些年,文件系統(tǒng)加密的勒索病毒也開始逐漸支持對(duì)庫(kù)文件進(jìn)行加密。防護(hù)此類攻擊的最佳方式即做好備份工作。
1)勒索軟件原理介紹
解析上述腳本后可以將其梳理成圖中樣式。這個(gè)惡意腳本包含了4個(gè)存儲(chǔ)過程和3個(gè)觸發(fā)器。一共組成上圖顯示的三條攻擊線:紅線、綠線和紫線。每條線觸發(fā)的條件不同,造成的危害也各不相同。勒索軟件的原理是利用第三方數(shù)據(jù)庫(kù)管理工具的自動(dòng)執(zhí)行腳本。在腳本中寫入惡意存儲(chǔ)過程和觸發(fā)器。這些自動(dòng)腳本會(huì)在程序鏈接數(shù)據(jù)庫(kù)的過程中自動(dòng)執(zhí)行。勒索者正是利用管理腳本這種會(huì)自動(dòng)執(zhí)行且無任何提示的特點(diǎn)偷偷的將4個(gè)存儲(chǔ)過程和3個(gè)觸發(fā)器植入到數(shù)據(jù)庫(kù)中。
紅線DBMS_SUPPORT_INTERNAL
紅線由觸發(fā)器和存儲(chǔ)過程共同組成。觸發(fā)器觸發(fā)的條件是數(shù)據(jù)庫(kù)實(shí)例重啟,重啟后該觸發(fā)器會(huì)觸發(fā)存儲(chǔ)過程刪除SYS.TAB$中大部分?jǐn)?shù)據(jù)庫(kù)用戶的信息,并在刪除前秘密備份一份sys.tab$信息用于勒索后給客戶恢復(fù)。這條線的主要核心是圖中標(biāo)號(hào)為1和2的SQL語句塊。
標(biāo)記1的這個(gè)語句是判斷是否發(fā)動(dòng)入侵的依據(jù)。勒索者根據(jù)當(dāng)前庫(kù)存在的時(shí)間決定是入侵?jǐn)?shù)據(jù)庫(kù)實(shí)施勒索還是先保持潛伏,直到條件成熟再爆發(fā)進(jìn)行勒索。勒索者認(rèn)為運(yùn)行超過1200天的數(shù)據(jù)庫(kù)是值得入侵的,里面很可能存在用戶重要的數(shù)據(jù),于是判斷是否滿足1200天(這里的1200天是指數(shù)據(jù)庫(kù)實(shí)例創(chuàng)建的天數(shù),而不是惡意軟件入侵的天數(shù)),一旦滿足則繼續(xù)后續(xù)的入侵。
標(biāo)記2的這個(gè)語句是整個(gè)存儲(chǔ)過程的核心。勒索者首先對(duì)tab$表進(jìn)行備份,把備份的表設(shè)置成一定特點(diǎn)的隨機(jī)名稱,方便收到贖金后從新幫用戶找回?cái)?shù)據(jù)。接著馬上刪除了tab$表中除了SYS用戶和第38號(hào)用戶的全部信息。并把勒索信息寫入到日志文件alert中,向用戶實(shí)施勒索。請(qǐng)注意這條線的報(bào)錯(cuò)信息應(yīng)該是ORA- 20312.如果在日志中發(fā)現(xiàn)ORA- 20312信息,很有可能您的數(shù)據(jù)庫(kù)已經(jīng)中了紅線的招式,建議查找是否存在表名類似ORACHK樣式的表來進(jìn)一步判斷是否已被入侵。
綠線DBMS_SYSTEM_INTERNAL
綠線同樣是由觸發(fā)器和存儲(chǔ)過程共同組成。觸發(fā)器的觸發(fā)的條件是用戶登陸數(shù)據(jù)庫(kù),當(dāng)?shù)顷憰r(shí),該觸發(fā)器會(huì)觸發(fā)存儲(chǔ)過程經(jīng)過一些列判斷后阻止用戶正常訪問數(shù)據(jù)庫(kù)。這條線的主要核心是圖中標(biāo)號(hào)為1和2的SQL語句塊。
標(biāo)記1的這個(gè)語句是判斷是否發(fā)動(dòng)入侵依據(jù)。勒索者根據(jù)當(dāng)前所有表的最小統(tǒng)計(jì)時(shí)間決定是入侵?jǐn)?shù)據(jù)庫(kù)實(shí)施勒索還是先保持潛伏,直到條件成熟再爆發(fā)進(jìn)行勒索。勒索者認(rèn)為超過1200天的是值得入侵的,里面很可能存在用戶重要的數(shù)據(jù),于是判斷是否滿足1200天,一旦滿足則繼續(xù)后續(xù)的入侵。
標(biāo)記2的這個(gè)語句是判斷用戶的客戶端是否滿足C89239.EXE,如果滿足則不彈窗報(bào)錯(cuò)阻止登陸。如果不滿足則彈窗報(bào)錯(cuò)阻止登陸。把錯(cuò)彈出來阻止用戶登陸,向用戶實(shí)施勒索。其中注意這條線的報(bào)錯(cuò)信息應(yīng)該是ORA- 20313。普通用戶會(huì)被彈窗阻止是因?yàn)橛|發(fā)器報(bào)錯(cuò)導(dǎo)致,而DBA用戶會(huì)無視報(bào)錯(cuò)信息成功登入,在登入后刪除對(duì)應(yīng)觸發(fā)器和存儲(chǔ)過程可解決這種入侵。第二步判斷的C89239.EXE應(yīng)該是勒索者收到贖金給用戶提供的解決方案。
紫線 DBMS_SYSTEM_INTERNAL
紫線同樣由觸發(fā)器和存儲(chǔ)過程共同組成??梢?,這種攻擊主要是依靠存儲(chǔ)過程和觸發(fā)器的配合進(jìn)行。觸發(fā)器觸發(fā)的條件是創(chuàng)建惡意存儲(chǔ)過程的用戶登陸數(shù)據(jù)庫(kù),當(dāng)該用戶登陸時(shí),該觸發(fā)器會(huì)觸發(fā)存儲(chǔ)過程對(duì)該用戶下的非系統(tǒng)表中的數(shù)據(jù)進(jìn)行清除。這條線的主要核心是圖中標(biāo)號(hào)為1和2的SQL語句塊。
標(biāo)記1的這個(gè)語句是判斷是否發(fā)動(dòng)入侵。勒索者根據(jù)當(dāng)前表空間的表的最小統(tǒng)計(jì)信息收集時(shí)間和當(dāng)前時(shí)間比決定是入侵?jǐn)?shù)據(jù)庫(kù)實(shí)施勒索還是先保持潛伏,直到條件成熟再進(jìn)行勒索。勒索者認(rèn)為超過1200天的數(shù)據(jù)庫(kù)是值得入侵的,里面很可能存在用戶重要的數(shù)據(jù),于是判斷是否滿足1200天,一旦滿足則繼續(xù)后續(xù)的入侵。
標(biāo)記2的這個(gè)語句是當(dāng)前用戶對(duì)自己的表執(zhí)行truncate操作,清掉用戶數(shù)據(jù),并把勒索信息寫入到日志文件alert中。請(qǐng)注意這條線的報(bào)錯(cuò)信息應(yīng)該是ORA- 20315。這條線是最危險(xiǎn)的一條線,勒索者刪除了表中數(shù)據(jù)并未,做相應(yīng)的備份?;謴?fù)數(shù)據(jù)存在一定的難度,利用閃回機(jī)制或mydul等第三方工具可能能從數(shù)據(jù)庫(kù)文件中恢復(fù)數(shù)據(jù),但隨著時(shí)間的流逝難度會(huì)越來越大、恢復(fù)數(shù)量則會(huì)越來越少。
Oracle 升級(jí)包惡意腳本
我們來了解一種和客戶端勒索病毒類似的Oracle升級(jí)包惡意腳本。兩者手法基本完全一致。細(xì)小區(qū)別在于,客戶端勒索病毒主要存在于客戶端的一些自動(dòng)執(zhí)行腳本中,這些惡意腳本如果被放在升級(jí)包中就成了Oracle 升級(jí)包惡意腳本。具體細(xì)節(jié)就不再贅述。
如何防護(hù)數(shù)據(jù)庫(kù)勒索病毒的攻擊,有三條防護(hù)建議:
1)無論是客戶端還是升級(jí)包都請(qǐng)從正規(guī)渠道下載,并計(jì)算MD5值千萬別用破解版,免費(fèi)的結(jié)果是省了小錢丟了數(shù)據(jù)。
2)利用數(shù)據(jù)庫(kù)防火墻等類似產(chǎn)品對(duì)勒索病毒進(jìn)行傳播阻斷,需要選用有上下文判斷能力的成熟防火墻產(chǎn)品。
3)定期使用數(shù)據(jù)庫(kù)漏掃工具進(jìn)行查殺,排除安全隱患。
聯(lián)系客服