摘要:通過指定,并在生產(chǎn)線上關(guān)閉的接口來達(dá)到規(guī)避網(wǎng)絡(luò)進(jìn)口的安全問題。避免同樣的悲劇在發(fā)生。上海小胖原創(chuàng)地址歡迎各位大神前來評(píng)論。每周五,敬請(qǐng)期待,上海小胖獨(dú)更。
序
原本這周想寫一個(gè)系列關(guān)于 GDPR(General Data Protection Regulation) MongoDB 的,但是昨天(2017.09.05)又爆出超2.6W 個(gè)MongoDB 節(jié)點(diǎn)被劫持。所以臨陣變卦,決定寫一篇關(guān)于MongoDB 安全的文章。
是什么心理讓各位Developer & DBAer 在發(fā)生了如此大的比特幣勒索 事件后,還是敢于裸奔1?縱使覺得數(shù)據(jù)不重要、有備份,出于對(duì)安全的意識(shí),是不是也應(yīng)該使用一些安全保護(hù)措施呢?
現(xiàn)狀截止到我發(fā)稿前(2017.09.06 早7點(diǎn)),我再次驗(yàn)證了目前的MongoDB 節(jié)點(diǎn)裸奔的情況,情況非常不容樂觀。通過查看 SHODAN, 我發(fā)現(xiàn)目前還有超過5W個(gè)節(jié)點(diǎn)的MongoDB 是在使用默認(rèn)端口27017的,其中老美和中國(guó)占據(jù)半壁江山
而在第一頁中,我就看到一個(gè)裸奔的節(jié)點(diǎn)
數(shù)據(jù)量并不大,為了驗(yàn)證節(jié)點(diǎn)的有效性,這里僅作為論證參考,不對(duì)該節(jié)點(diǎn)進(jìn)行任何影響。
從圖中,我們可以看到,這臺(tái)機(jī)器顯然并沒有逃過hacker的攻擊,當(dāng)hacker們攻擊了MongoDB的節(jié)點(diǎn)之后,會(huì)備份你的數(shù)據(jù),并刪除所有數(shù)據(jù),同時(shí)會(huì)刪除journal 日志,這樣就算是 Enterprise 版本,也審計(jì)不到了。
hacker的攻擊方式其實(shí)非常簡(jiǎn)單,可以簡(jiǎn)單分為以下幾步:
通過類似SHODAN 這樣的網(wǎng)站(諸如:ZoomEye 等)提供的API,進(jìn)行全網(wǎng)掃描,MongoDB 那就是掃描27017端口
獲取到IP后,進(jìn)行嗅探
如果可以獲取到登錄信息,那么運(yùn)行腳本(備份全庫、清理journal、留下打款賬號(hào)信息)
具體的實(shí)現(xiàn),這里不做過多描述,目的不是為了教學(xué)攻破MongoDB,而是為了給大家敲響警鐘。
防范通過以上,我們可以清楚的意識(shí)到只要做到基本的防范措施,不處于裸奔狀態(tài),黑客就不會(huì)那么輕易的進(jìn)入我們DB中了。
需要強(qiáng)調(diào)的是,MongoDB官方給出一個(gè)默認(rèn)不加密的配置,是為了方便developer的快速搭建環(huán)境,但并不意味著可以如此上線。
因此,在上線前,我們需要對(duì)照著MongoDB 官方給出的CheckList 去校驗(yàn)一次。
Enable Access Control and Enforce Authentication首先肯定是打開我們的authentication。
打開方式非常簡(jiǎn)單:
在admin數(shù)據(jù)庫中,創(chuàng)建一個(gè)admin 用戶
use admin db.createUser( { user: "myUserAdmin", pwd: "abc123", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } )
在啟動(dòng)項(xiàng)中加入--auth,或者在配置文件中加入 security.authorization: enabled.
mongod --auth --port 27017 --dbpath /data/db1
使用之前創(chuàng)建的myUserAdmin 用戶登錄mongo
mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"
在應(yīng)用庫中創(chuàng)建一個(gè)具有讀寫權(quán)限的應(yīng)用賬號(hào)。(注意:在MongoDB中,賬號(hào)跟著數(shù)據(jù)庫走,也就是說在哪個(gè)數(shù)據(jù)庫下創(chuàng)建的,該賬號(hào)就屬于哪個(gè)庫)
use test db.createUser( { user: "myTester", pwd: "xyz123", roles: [ { role: "readWrite", db: "test" }, { role: "read", db: "reporting" } ] } )Configure Role-Based Access Control
這里需要明確的是,MongoDB的基本安全分為兩種,一種是認(rèn)證,一種是鑒權(quán)。其實(shí)英語會(huì)說的比較明白點(diǎn): authorization, authentication.
認(rèn)證是作為用戶登錄的一種賬號(hào)密碼校驗(yàn),類似MySQL 的 root/password ,在大部分應(yīng)用中,一旦創(chuàng)建一個(gè)連接(用于連接池的),那么該連接只會(huì)做一次,所以大可不必?fù)?dān)心因?yàn)檎J(rèn)證而帶來的開銷。
鑒權(quán)是在數(shù)據(jù)庫中的賬號(hào)擁有的權(quán)限做鑒定,類似MySQL中的privilege。
Encrypt Communication打開MongoDB 的TLS/SSl 的配置,社區(qū)版需要下載一個(gè)SSL版本,或者可以從社區(qū)版通過升級(jí)步驟升級(jí)到SSl版本,企業(yè)版自帶SSL。
SSL 可以保證MongoDB的 所有連接(輸入和輸出的連接)都是加密的。
Encrypt and Protect DataMongoDB 3.2 WT 引擎推出了一個(gè)新的加密功能,僅限企業(yè)版,可以對(duì)物理數(shù)據(jù)文件進(jìn)行加密,若不打開,則默認(rèn)通過系統(tǒng)對(duì)文件進(jìn)行加密。
Limit Network Exposure通過指定bindIp ,并在生產(chǎn)線上關(guān)閉MongoDB 的 Http 接口來達(dá)到規(guī)避網(wǎng)絡(luò)進(jìn)口的安全問題。
Audit System ActivityMongoDB 企業(yè)版同時(shí)提供了審計(jì)功能,幫助用戶更好的巡檢自己的數(shù)據(jù)庫。
Run MongoDB with a Dedicated User使用mongodb 用戶 啟動(dòng)MongoDB,而不是使用root 用戶
后續(xù)希望大家在經(jīng)過2次 MongoDB 的打劫后,都提高警惕了。把自己的生產(chǎn)節(jié)點(diǎn)都check 一遍。避免同樣的悲劇在發(fā)生。
上海小胖[MiracleYoung] 原創(chuàng)地址: https://segmentfault.com/u/shanghaixiaopang/articles
歡迎各位大神前來評(píng)論。
每周五,敬請(qǐng)期待,上海小胖[MiracleYoung] 獨(dú)更。
如果夏雨荷還在大明湖畔等著我的話,我就不更了。
裸奔在此處的解釋為,使用默認(rèn)端口27017,并對(duì)公網(wǎng)開放,未做任何防火墻措施,同時(shí)未開啟認(rèn)證和鑒權(quán)的MongoDB 數(shù)據(jù)庫。 ?
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/19097.html
摘要:開發(fā)人員常用的框架文檔及中文翻譯,包含系列文檔,日志,,,,數(shù)據(jù)庫,,等最新官方文檔以及對(duì)應(yīng)的中文翻譯。其它如果你有針對(duì)此網(wǎng)站好的建議或意見,也歡迎提更多的文檔和更多的文檔版本支持 開發(fā)人員常用的框架文檔及中文翻譯,包含 Spring 系列文檔(Spring, Spring Boot, Spring Cloud, Spring Security, Spring Session),日志(...
摘要:開發(fā)人員常用的框架文檔及中文翻譯,包含系列文檔,日志,,,,數(shù)據(jù)庫,,等最新官方文檔以及對(duì)應(yīng)的中文翻譯。其它如果你有針對(duì)此網(wǎng)站好的建議或意見,也歡迎提更多的文檔和更多的文檔版本支持 開發(fā)人員常用的框架文檔及中文翻譯,包含 Spring 系列文檔(Spring, Spring Boot, Spring Cloud, Spring Security, Spring Session),日志(...
摘要:如果刪除所有用替換其他寫了一個(gè)和結(jié)合的數(shù)據(jù)查詢服務(wù)細(xì)節(jié)可點(diǎn)擊鏈接到查看 1.系統(tǒng)環(huán)境 Golang:go version go1.10.3 darwin/amd64 OS:MacOS MongoDB: version: 3.4.4 2.Golang使用MongoDB 使用:gopkg.in/mgo.v2 獲取包:go get gopkg.in/mgo.v2 引入:impor...
閱讀 1830·2021-10-20 13:49
閱讀 1370·2019-08-30 15:52
閱讀 2875·2019-08-29 16:37
閱讀 1045·2019-08-29 10:55
閱讀 3079·2019-08-26 12:14
閱讀 1658·2019-08-23 17:06
閱讀 3241·2019-08-23 16:59
閱讀 2550·2019-08-23 15:42