數(shù)據(jù)安全治理關(guān)鍵技術(shù)之?dāng)?shù)據(jù)庫脫敏技術(shù)詳解
數(shù)據(jù)安全治理之API監(jiān)測系統(tǒng) ,解決API接口安全問題【安華金和】
新一代數(shù)據(jù)庫脫敏技術(shù),為敏感數(shù)據(jù)建立保護盾!
數(shù)據(jù)庫脫敏系統(tǒng)與金融行業(yè)案例解讀
數(shù)據(jù)安全治理建設(shè)思路的著力點——數(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ā)布(附下載)
近期白帽黑客達吾德·古倫斯基連續(xù)發(fā)布了三個Mysql的安全漏洞——CVE-2016-6662、CVE-2016-6663、CVE-2016-6664,導(dǎo)致Mysql和Mysql的分支MariaDB、Percona Server、Percona XtraDB Cluster主流版本紛紛中招。這三個安全漏洞單看起來危害程度一般,不過一旦組合使用則威力大增,就算擁有的是操作系統(tǒng)低權(quán)限用戶、數(shù)據(jù)庫低權(quán)限用戶的雙低身份,也可以通過組合利用漏洞獲取數(shù)據(jù)庫服務(wù)器的全部控制權(quán)。
比如,CVE-2016-6663和CVE-2016-6664的組合利用,可以逐步獲得數(shù)據(jù)庫服務(wù)器的root權(quán)限;CVE-2016-6662和CVE-2016-6663的組合利用,同樣可在低權(quán)限情況下獲得root權(quán)限
如果我們想通過CVE-2016-6662、CVE-2016-6663這兩個漏洞的組合獲取數(shù)據(jù)庫服務(wù)器的控制權(quán)限,我們需要對這兩個漏洞的目標(biāo)稍加分解:CVE-2016-6662的目標(biāo)是通過Mysql權(quán)限拿到rootshell,CVE-2016-6663的目標(biāo)是通過低權(quán)限用戶拿下Mysqlshell。
若想通過CVE-2016-6662拿到rootshell,需要滿足兩點:1. Mysql權(quán)限下允許對my.cnf文件進行寫操作。2.my.cnf的寫入內(nèi)容需要追加在后面。不考慮用戶設(shè)置的權(quán)限發(fā)生錯誤這種情況,雖然my.cnf文件有多個,但基本都需要在root權(quán)限下方可允許進行讀寫操作,Mysql權(quán)限下都無法改寫my.cnf,唯一的特例是data目錄下的my.cnf(盡管目前很多版本已經(jīng)沒有這個文件了,但Mysql啟動的時候還是會加載)。這一my.cnf的讀寫權(quán)限是Mysql,且加載順序靠后,里面的配置內(nèi)容不會被輕易沖掉。
那么,如何在data目錄下創(chuàng)建屬于Mysql權(quán)限的惡意my.cnf文件呢?方式有兩種:
1.通過SELECT '惡意配置內(nèi)容' INTO OUTFILE '/var/lib/mysql/my.cnf' 這種形式創(chuàng)建my.cnf。創(chuàng)建后my.cnf權(quán)限為666,但是Mysql一旦檢測到666權(quán)限則不會在啟動中加載my.dnf文件。只有將my.cnf權(quán)限改造為660,才能完成啟動中的文件加載。
2.采用改寫log日志的方式追加
mysql> set global general_log_file = '/var/lib/mysql/my.cnf';
mysql> set global general_log = on;
mysql> select '
'>
'> ; injected config entry
'>
'> [mysqld]
'> malloc_lib=/var/lib/mysql/mysql_hookandroot_lib.so
'>
'> [separator]
'>
'> ';
1 row in set (0.00 sec)
mysql> set global general_log = off;
這種方式可以直接解決上述方式中的666權(quán)限問題,但同時也帶來了一個新問題,即該漏洞需要Mysql的root權(quán)限,否則無權(quán)限執(zhí)行set global general_log等對全局日志操作的語句。
由此可見,cve-2016-6662漏洞雖然可以獲取root權(quán)限,但因為其可用范圍太窄、限制太多,所以給大家一種很雞肋的感覺。
但cve-2016-6662一旦與CVE-2016-6663結(jié)合發(fā)力,則會煥發(fā)全部能量。Cve-2016-6663扮演了一個松綁者的角色,可以幫助CVE-2016-6662解除諸多限制。Mysql在修表過程中,因為系統(tǒng)調(diào)用過程中未對賦值文件或目錄權(quán)限做全面檢查,導(dǎo)致低權(quán)限用戶控制了Mysqlshell,Cve-2016-6663正好可利用這一點,讓黑客有機可乘,黑客僅需要有一組低權(quán)限操作系統(tǒng)賬號和一組可以創(chuàng)建表的低權(quán)限數(shù)據(jù)庫賬號即可。具體做法是:利用系統(tǒng)低權(quán)限賬號創(chuàng)建一個文件目錄,把該目錄指定為數(shù)據(jù)庫文件存儲的目錄,然后給這組目錄賦予低權(quán)限賬號的777權(quán)限,例如:
attacker@debian:~$ mkdir /tmp/disktable
attacker@debian:~$ chmod 777 /tmp/disktable/
接下來,低權(quán)限數(shù)據(jù)庫用戶創(chuàng)建表并修復(fù)表。
創(chuàng)建指定數(shù)據(jù)庫文件置于剛才的文件夾下:
CREATE TABLE poctab1 (txt varchar(50)) engine = 'MyISAM' data directory '/tmp/disktable';
修復(fù)剛創(chuàng)建的表系統(tǒng),會在不檢查poctab1.MYD表文件權(quán)限的情況下,直接調(diào)用復(fù)制在創(chuàng)建repaired表時的臨時文件chmod()權(quán)限。在repaired的過程中系統(tǒng)調(diào)用進程 lstat("/tmp/disktable/poctab1.MYD", {st_mode=S_IFREG|0660,st_size=0, ...}) = 0和chmod("/tmp/disktable/poctab1.TMD", 0660) = 0之間產(chǎn)生了條件競爭漏洞。此時攻擊者只要刪除臨時表poctab1.TMD,然后通過符號鏈接在chmod()操作前替換/var/lib/mysql,就能夠完全控制Mysql的data目錄權(quán)限。但此時拿到的只能是mysqlshell,而非mysql用戶。接下來,通過chmod漏洞復(fù)制一份bash shell用以執(zhí)行命令。此時shell的權(quán)限是mysql權(quán)限,也就是說至此低權(quán)限用戶可以使用Mysql權(quán)限執(zhí)行命令。此時執(zhí)行CVE-2016-6662需要的mysql命令,則可以完成由mysqlshell向rootshell的提權(quán)。
CVE-2016-6663和CVE-2016-6662打出的這套組合拳使得低權(quán)限用戶獲得操作系統(tǒng)全部控制權(quán)成為可能。
針對此次CVE-2016-6662、CVE-2016-6663、CVE-2016-6664的安全威脅,安華金和從專業(yè)角度提出了安全防護建議,很顯然防范本次mysql漏洞組合拳攻擊的最佳方案就是用戶能第一時間對可能存在問題的數(shù)據(jù)庫打補丁,但是鑒于生產(chǎn)系統(tǒng)以及場景的復(fù)雜多樣性,對數(shù)據(jù)庫進行及時的補丁修正并非易事,所以,可以嘗試使用數(shù)據(jù)庫防火墻來保護數(shù)據(jù)庫。
大部分?jǐn)?shù)據(jù)庫防火墻擅長做sql語句級的安全防護工作,不過,這三個漏洞主要利用的是數(shù)據(jù)庫文件的某些漏洞,所以大多數(shù)數(shù)據(jù)庫防火墻無法有效應(yīng)對這種情況。而安華金和的數(shù)據(jù)庫防火墻因為具備了數(shù)據(jù)庫外聯(lián)防護功能,因此可以有效阻止這類漏洞所帶來的風(fēng)險。當(dāng)黑客入侵后,拿到的只是操作系統(tǒng)的rootshell,而并非root賬號,盡管黑客采用shell反射技術(shù)讓數(shù)據(jù)庫服務(wù)器的rootshell主動向自己的機器發(fā)起請求,但防火墻的數(shù)據(jù)庫外聯(lián)防護功能可以及時阻斷異常tcp鏈接,阻止黑客遠程獲得數(shù)據(jù)庫服務(wù)器的rootshell。
安華金和數(shù)據(jù)庫防火墻的工作模式為:首先捕獲數(shù)據(jù)庫服務(wù)器向外發(fā)送的TCP鏈接,然后通過判斷特征值和特定算法,對不符合預(yù)期的TCP鏈接確認(rèn)后,直接給數(shù)據(jù)庫服務(wù)器返回拒絕服務(wù),阻止該次shell的反射,防止黑客盜取或偷窺數(shù)據(jù)庫服務(wù)器上的敏感信息。同時數(shù)據(jù)庫防火墻會通過短信、郵件等方式向主管人員提交此次攻擊的行為特征、入侵者特征以及安全分析報告等信息。