經(jīng)仔細(xì)閱讀分析該案例后,發(fā)現(xiàn)常易被人忽視的日常安全運(yùn)營(yíng)之安全基線工作即能輕松預(yù)防和避免該類事件的發(fā)生,詳細(xì)分析如下:
一、案例成因分析
1. 背景信息
2. 數(shù)據(jù)泄露原因技術(shù)分析
從Gevers在推特上發(fā)的截圖和描述可以初步分析如下,該公司使用MongoDB數(shù)據(jù)庫(kù)存放人臉識(shí)別等個(gè)人敏感數(shù)據(jù),該數(shù)據(jù)庫(kù)實(shí)例服務(wù)使用MongnDB安裝缺省端口27017,該服務(wù)端口可由互聯(lián)網(wǎng)直接訪問(wèn),該數(shù)據(jù)庫(kù)未啟用身份認(rèn)證機(jī)制,即允許任何人訪問(wèn)。
事件產(chǎn)生原因:該公司對(duì)存放人臉識(shí)別敏感數(shù)據(jù)的MongoDB數(shù)據(jù)庫(kù)使用了出場(chǎng)安裝缺省配置,未進(jìn)行日常安全運(yùn)營(yíng)中的安全基線工作,存在嚴(yán)重安全漏洞導(dǎo)致了此事件的發(fā)生。
二、安全運(yùn)營(yíng)之安全基線工作的預(yù)防能力介紹
在日常安全運(yùn)營(yíng)中的安全基線工作中,企業(yè)的安全團(tuán)隊(duì)會(huì)針對(duì)公司使用的各種系統(tǒng)、軟件和數(shù)據(jù)庫(kù)開發(fā)和發(fā)布相應(yīng)的安全基線標(biāo)準(zhǔn),在系統(tǒng)上線前進(jìn)行部署和合規(guī)性檢查,經(jīng)檢查只有在與公司的安全基線標(biāo)準(zhǔn)符合的前提下才允許上線,這樣就可以避免由于各種系統(tǒng)、軟件和數(shù)據(jù)庫(kù)由于使用廠家出廠不安全缺省配置導(dǎo)致的安全漏洞問(wèn)題,有效地降低和控制安全風(fēng)險(xiǎn)。
下面針對(duì)該案例摘錄部分MangoDB安全基線內(nèi)容如下:
1. 端到端安全架構(gòu)設(shè)計(jì)
MongoDB端到端安全架構(gòu)設(shè)計(jì)如下圖所示,從人員、過(guò)程和產(chǎn)品(技術(shù))三個(gè)維度進(jìn)行縱深安全體系防護(hù),分別通過(guò)訪問(wèn)控制、加密和審計(jì)來(lái)實(shí)施。
網(wǎng)絡(luò)安全架構(gòu)部署參照下圖,通過(guò)兩層防火墻將WEB/應(yīng)用服務(wù)器和MongoDB數(shù)據(jù)庫(kù)服務(wù)器分別隔離在不同的兩個(gè)DMZ類進(jìn)行網(wǎng)絡(luò)區(qū)域隔離和分層網(wǎng)絡(luò)訪問(wèn)控制,數(shù)據(jù)庫(kù)服務(wù)器通過(guò)防火墻訪問(wèn)規(guī)則控制只能由DMZ1區(qū)域內(nèi)的應(yīng)用服務(wù)器訪問(wèn),避免了將其直接暴露給互聯(lián)網(wǎng)的安全風(fēng)險(xiǎn)問(wèn)題。
2. 啟用MongoDB數(shù)據(jù)庫(kù)身份認(rèn)證功能
身份認(rèn)證功能狀態(tài)檢查:
- cat /etc/mongod.conf | grep “Auth=”
如果身份認(rèn)證功能已啟用,則Auth的設(shè)置值為“True”。
激活身份認(rèn)證功能步驟:
(1)啟動(dòng)未激活身份認(rèn)證功能的MongoDB數(shù)據(jù)庫(kù)實(shí)例;
- mongod --port 27017--dbpath /data/db1
(2)創(chuàng)建數(shù)據(jù)庫(kù)系統(tǒng)管理員用戶,并確保設(shè)置的口令符合組織口令策略的要求;
- use admin db.createUser(
- {
- user: "siteUserAdmin", pwd:"password",
- roles: [ { role: "userAdminAnyDatabase",db: "admin" } ]
- }
- )
(3)重啟已激活身份認(rèn)證功能的MongoDB數(shù)據(jù)庫(kù)實(shí)例。
- mongod --auth--config /etc/mongod.conf
3. 確保MongoDB數(shù)據(jù)庫(kù)實(shí)例只在授權(quán)的接口上偵聽網(wǎng)絡(luò)連接
當(dāng)前數(shù)據(jù)庫(kù)實(shí)例網(wǎng)絡(luò)偵聽狀態(tài)檢查:
檢查MongoDB配置文件;
- cat /etc/mongod.conf |grep –A12“net”| grep “bindIp“
檢查相關(guān)網(wǎng)絡(luò)訪問(wèn)控制設(shè)置;
- iptables –L
配置數(shù)據(jù)庫(kù)實(shí)例偵聽在指定網(wǎng)絡(luò)接口并用防火墻規(guī)則進(jìn)行嚴(yán)格訪問(wèn)控制,應(yīng)只允許DMZ區(qū)域里的應(yīng)用服務(wù)器連接,下面以主機(jī)防火墻iptables示例配置如下。
- iptables -A INPUT -s <ip-address> -p tcp--destination-port 27017 -m state --state NEW,ESTABLISHED -j ACCEPT
- iptables -A OUTPUT -d <ip-address> -p tcp--source-port 27017 -m state --state ESTABLISHED -j ACCEPT
如上對(duì)比分析可以看出,如果企業(yè)在日常安全運(yùn)營(yíng)中,認(rèn)真嚴(yán)格地按照MongoDB數(shù)據(jù)庫(kù)安全基線標(biāo)準(zhǔn)執(zhí)行的話,就能夠有效地預(yù)防和避免類似大數(shù)據(jù)泄露案例的發(fā)生。
Reference:
https://github.com/cn-quantumsec/Diaoyu-Castle-Sec-Benchmark-Project