數(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ā)布(附下載)
MongoDB是10gen公司研發(fā)的面向文檔的開源NoSQL數(shù)據(jù)庫系統(tǒng),用C++語言編寫。MongoDB憑借簡單的部署方式,高效的擴(kuò)展能力、多樣化的語言接口,并借著云蓬勃發(fā)展的勢頭,一度在全球數(shù)據(jù)庫市場占據(jù)第四名。
作為目前使用最廣泛的Nosql數(shù)據(jù)庫類型,MongoDB短時(shí)間內(nèi)能夠取得如此巨大的市場成功,內(nèi)因在于其上述突出的特性。但正所謂成也風(fēng)云,敗也風(fēng)云,這些特性同時(shí)也給MongoDB帶來了一定的安全風(fēng)險(xiǎn)。大致上,mongodb 的安全問題可以分為三個(gè)部分:
默認(rèn)配置安全問題
本身安全問題
WEB安全問題
默認(rèn)配置問題是MongoDB當(dāng)前最為突出的安全問題。2016年底,MongoDB勒索事件在全球范圍內(nèi)持續(xù)發(fā)酵,主因在于在默認(rèn)部署情況下,MongoDB無需身份驗(yàn)證,即可登錄,不法分子只要在互聯(lián)網(wǎng)上發(fā)現(xiàn)MongoDB的地址和端口就可以通過工具直接訪問MongoDB,并擁有MongoDB的全部權(quán)限,從而進(jìn)行任意操作。之所以會(huì)如此設(shè)計(jì),原因在于:
1. MongoDB默認(rèn)通過最簡單部署方式,最大限度提高運(yùn)行速度,以在虛擬機(jī)(低配機(jī))上運(yùn)行而定制的,并未充分考慮MongoDB的安全性。
2. MongoDB官方文檔,如針對身份驗(yàn)證,傳輸加密,網(wǎng)絡(luò)配置的文檔、指南并不規(guī)范,容易誤導(dǎo)MongoDB管理員。
3. 一些MongoDB環(huán)境是為了單一項(xiàng)目或者是測試環(huán)境搭建,搭建者并不關(guān)心MongoDB的安全問題。
上述原因最終會(huì)導(dǎo)致互聯(lián)網(wǎng)上出現(xiàn)大量完全開放且脆弱的MongoDB。據(jù)調(diào)查,截止當(dāng)前,我國互聯(lián)網(wǎng)上易被發(fā)現(xiàn)的MongoDB有7281個(gè),其中部分仍可隨意登錄。要解決上述問題就需要對MongoDB進(jìn)行合理配置,其中,進(jìn)一步配置的不僅是身份驗(yàn)證和網(wǎng)絡(luò)控制,還有更多可能造成安全隱患的部分。
1)啟動(dòng)訪問控制并強(qiáng)制進(jìn)行身份驗(yàn)證
默認(rèn)配置下,MongoDB不需要進(jìn)行身份驗(yàn)證即可登錄。在MongoDB部署上啟用訪問控制會(huì)強(qiáng)制進(jìn)行身份驗(yàn)證,根據(jù)當(dāng)前用戶實(shí)際權(quán)限判斷后續(xù)操作是否被允許。使用auth參數(shù)可以開啟MongoDB的強(qiáng)制身份驗(yàn)證,為保證auth的真正生效,需要同時(shí)在user中配置用戶名和密碼信息。開啟auth能有效杜絕網(wǎng)上非法用戶惡意訪問和非法操作行為,保護(hù)MongoDB中的數(shù)據(jù)安全。此處可以通過類似防火墻的身份驗(yàn)證,僅允許某些特定用戶通過,防止非法訪問行為。
2)限制網(wǎng)絡(luò)訪問
默認(rèn)MongoDB允許任意地址訪問,勒索事件中的MongoDB除了沒有設(shè)置用戶密碼外,同樣也沒有限制可信網(wǎng)絡(luò)訪問。為了確保MongoDB在受信任的網(wǎng)絡(luò)環(huán)境中運(yùn)行,需要限制MongoDB實(shí)例偵聽傳入連接的接口,僅允許受信任的客戶端訪問MongoDB實(shí)例。而限制外網(wǎng)的非法訪問需要通過三個(gè)參數(shù)進(jìn)行合理關(guān)閉:
通過-bind_ip限定可以訪問的ip;
通過-port設(shè)置MongoDB的端口(不要使用默認(rèn)的27017);
通過-nohttpinterface 取消MongoDB的WEB管理頁面。很多MongoDB用戶不知道這個(gè)WEB管理頁面,該頁面無需數(shù)據(jù)庫賬號密碼即可完成登錄,從而查詢一些MongoDB的敏感信息;
關(guān)閉rest參數(shù)。該參數(shù)若開啟,上面的web頁面就可以直接對數(shù)據(jù)庫進(jìn)行更多操作。即使開啟了強(qiáng)制身份驗(yàn)證,該WEB管理頁面仍無需身份驗(yàn)證即可登錄,所以一定要關(guān)閉rest并封死28017端口。
數(shù)據(jù)庫防火墻能夠?qū)Σ豢尚臝P訪問進(jìn)行封堵;對web端口(28017)進(jìn)行部分IP禁用;對27017端口進(jìn)行隱藏,防止網(wǎng)絡(luò)端對MongoDB的非法訪問。
3)啟用加密通訊
MongoDB的網(wǎng)絡(luò)通訊默認(rèn)采用明文方式。在身份驗(yàn)證部分雖然采用了類似MySQL的挑戰(zhàn)的方式進(jìn)行認(rèn)證(密碼不會(huì)以hash形式直接在包中出現(xiàn)),但還是會(huì)暴露使用指紋加密的信息,如下圖:
一般會(huì)話則完全是明文信息,可能被不法分子竊聽、篡改和中間人攻擊:
明文傳輸?shù)臅?huì)話信息容易被竊取,啟用SSL可以防止網(wǎng)絡(luò)竊聽、篡改和中間人攻擊,這在一定程度會(huì)提高通訊安全。該啟動(dòng)項(xiàng)不僅支持客戶端和服務(wù)器之間的通訊加密,也支持服務(wù)器之間的通訊加密。
4)加密和數(shù)據(jù)保護(hù)
默認(rèn)情況下MongoDB中的數(shù)據(jù)以明文形式存儲(chǔ)。從3.2版本開始MongoDB默認(rèn)使用具備加密能力的WiredTiger存儲(chǔ)引擎。MongoDB增加了額外的安全層,需要數(shù)據(jù)庫身份驗(yàn)證才可以訪問加密內(nèi)容。支持openssl庫提供的多種加密算法,默認(rèn)使用AES-256的cbc模式可選GCM模式或FIPS模式。
5)配置基于角色的訪問控制
MongoDB默認(rèn)情況下沒有用戶和密碼,管理員若在admin庫中的user里添加用戶和密碼,則其中的用戶可以訪問數(shù)據(jù)庫下所有實(shí)例中存儲(chǔ)的內(nèi)容。同樣,在每個(gè)分庫的user中直接添加用戶,效果一樣,但此時(shí)默認(rèn)用戶的權(quán)限會(huì)過大。很多業(yè)務(wù)并不需要整個(gè)實(shí)例乃至整個(gè)數(shù)據(jù)庫的訪問權(quán)限,權(quán)限過大可能給數(shù)據(jù)庫帶來安全隱患。
采用基于角色的訪問控制(RBAC)管理對MongoDB系統(tǒng)的訪問,向用戶授予一個(gè)或多個(gè)角色,保證用戶有必要的數(shù)據(jù)庫資源和操作使用權(quán)限。創(chuàng)建各種不同權(quán)限的角色,成為解決MongoDB用戶權(quán)限過大的唯一方式,如此一來會(huì)讓創(chuàng)建角色變的繁雜。此處可以采用類似數(shù)據(jù)庫防火墻的權(quán)限控制加以進(jìn)一步控制。
6)審核數(shù)據(jù)庫操作
MongoDB默認(rèn)不開啟審計(jì)能力,一旦開啟,可對部分操作進(jìn)行審計(jì),跟蹤數(shù)據(jù)庫配置和數(shù)據(jù)的訪問和更改。MongoDB商業(yè)版支持一個(gè)系統(tǒng)審計(jì)工具,可在MongoDB實(shí)例上記錄系統(tǒng)事件(例如用戶操作,連接事件)。審計(jì)記錄允許管理員事后進(jìn)行取證分析,利用數(shù)據(jù)庫審計(jì)產(chǎn)品也可以做類似的事情。
7)安裝MongoDB使用專用賬號
MongoDB某些與操作系統(tǒng)交互的行為對路徑缺乏很好的控制,部分安裝者為了省事,直接使用root賬號安裝,這在某些特定情況下會(huì)危害到操作系統(tǒng)上文件的安全,建議不要采取這種安裝方式。
8)禁用不使用的語言
MongoDB支持在服務(wù)器端執(zhí)行JavaScript、mapReduce、 eval和$where等。如果能確定不使用這些代碼進(jìn)行操作,請禁用,以避免MongoDB被攻擊入侵(后面web會(huì)細(xì)說)。具體做法是通過- noscripting選項(xiàng)禁用服務(wù)器端的腳本功能。
小結(jié)
MongoDB目標(biāo)是實(shí)現(xiàn)快速簡單部署,所以存在很多安全隱患。解決配置安全問題重點(diǎn)在于:1、網(wǎng)絡(luò)隱藏,防止惡意訪問;
2、加密,保護(hù)信息安全;
3、合適的權(quán)限,防止越權(quán)操作;
4、禁用無用功能,防止某些攻擊。
安全應(yīng)對
滿足上述安全防護(hù)措施,可以使用專業(yè)的產(chǎn)品和技術(shù):
針對配置參數(shù),使用數(shù)據(jù)庫漏掃產(chǎn)品進(jìn)行檢查,生成安全情況報(bào)告,指導(dǎo)并幫助用戶對MongoDB進(jìn)行安全加固。
數(shù)據(jù)庫防火墻產(chǎn)品可以幫助MongoDB實(shí)現(xiàn)網(wǎng)絡(luò)隱身效果,并抵御某些利用javascrip發(fā)起的數(shù)據(jù)庫攻擊。
數(shù)據(jù)庫審計(jì)產(chǎn)品為非企業(yè)版MongoDB提供更全面審計(jì)。
數(shù)據(jù)庫加密產(chǎn)品幫助MongoDB用戶享受更多樣性的加密方式,確保數(shù)據(jù)密文存儲(chǔ)。
根據(jù)CVE列表,MongoDB從2009年面世至今一共發(fā)現(xiàn)了13個(gè)漏洞,這些漏洞主要分布在2.0-2.6版本之間(MongoDB最高版本已經(jīng)到3.4系列),漏洞主要分為以下三類:
敏感數(shù)據(jù)泄露
越權(quán)操作
登錄調(diào)用的函數(shù)存在緩沖區(qū)溢出漏洞,會(huì)導(dǎo)致服務(wù)宕機(jī)
安全應(yīng)對
1、通過升級3.0以上版本(目前尚未發(fā)現(xiàn)3.0以上版本有CVE漏洞)來解決自身安全問題。
2、如果上述漏洞重現(xiàn),可以利用數(shù)據(jù)庫防火墻虛擬補(bǔ)丁做有利補(bǔ)充。
乍看起來,Web安全和MongoDB關(guān)系不大,但恰恰相反。鑒于MongoDB的部署環(huán)境和使用領(lǐng)域,導(dǎo)致從Web向MongoDB發(fā)動(dòng)的攻擊才是MongoDB面臨的最大威脅。這部分攻擊大體分成兩類:1、rest和CSRF聯(lián)合攻擊;2、注入攻擊。
1)Rest和CSRF聯(lián)合攻擊
Rest前文已介紹,MongoDB自帶的http REST API。默認(rèn)情況下MongoDB會(huì)在28017開啟一個(gè)http端口提供REST服務(wù),直接通過特定格式的URL獲得數(shù)據(jù)庫中的大部分信息或利用admin.$cmd執(zhí)行一些數(shù)據(jù)庫級命令。
Rest的問題是訪問數(shù)據(jù)庫無需身份驗(yàn)證(開啟身份強(qiáng)制驗(yàn)證也沒用),并能進(jìn)行一定操作。CSRF(Cross-site request forgery)則是一種WEB攻擊手段,攻擊者盜用管理員身份,提交自己的命令。
2)注入攻擊
注入攻擊是一種寬泛說法,根據(jù)不同的語言注入有不同方式,針對MongoDB的注入攻擊大體分成二種:解釋形語言注入和JavaScript注入。通過防火墻產(chǎn)品可以借助配置規(guī)則,過濾注入攻擊。
安全應(yīng)對
針對第一種攻擊,可以利用數(shù)據(jù)庫漏掃產(chǎn)品檢查配置,發(fā)現(xiàn)REST API是否關(guān)閉,解決此類攻擊最簡單的辦法就是將其關(guān)閉。
通過數(shù)據(jù)庫防火墻產(chǎn)品,可以借助配置規(guī)則對注入攻擊進(jìn)行過濾。
本文通過對MongoDB已知安全隱患進(jìn)行分析,盡可能指出如何防控這些安全隱患,以期對MongoDB產(chǎn)品研發(fā)和應(yīng)用提供一些安全應(yīng)對思路。