MongoDB數據庫未授權訪問漏洞及加固


1.漏洞危害
開啟MongoDB服務時不添加任何參數時,默認是沒有權限驗證的,登錄的用戶可以通過默認端口無需密碼對數據庫任意操作(增刪改高危動作)而且可以遠程訪問數據庫。
2.漏洞成因
在剛安裝完畢的時候MongoDB都默認有一個admin數據庫,此時admin數據庫是空的,沒有記錄權限相關的信息!當admin.system.users一個用戶都沒有時,即使mongod啟動時添加了—auth參數,如果沒有在admin數據庫中添加用戶,此時不進行任何認證還是可以做任何操作(不管是否是以—auth 參數啟動),直到在admin.system.users中添加了一個用戶。加固的核心是只有在admin.system.users中添加用戶之后,mongodb的認證,授權服務才能生效。
3.mongoDB未授權漏洞加固方案
1) 修改默認端口
修改默認的mongoDB 端口(默認為:TCP 27017)為其他端口
2) 不要把MongoDB服務器部署在互聯網上或者DMZ
使用安全組防火牆或本地操作系統防火牆對訪問源IP進行控制,如果僅對內網服務器提供服務,建議禁止將mongoDB服務發布到互聯網上
3) 使用- -bind_ip選項
該選項可以限制監聽接口IP, 當在啟動mongodb的時候,使用 -bind_ip 192.168.0.1表示啟動ip地址綁定,數據庫實例將只監聽192.168.0.1的請求。
4) 啟動基於角色的登錄認證功能
在admin 數據庫中創建用戶,如 supper 密碼為 sup(此處均為舉例說明,請勿使用此賬號密碼)
[mongodb@rac3 bin]$ ./mongo 127.0.0.1:27028 (此處修改了默認端口)
MongoDB shell version: 2.0.1
connecting to: 127.0.0.1:27028/test
> use admin
switched to db admin
>
> db.addUser("supper", "sup")  
{ "n" : 0, "connectionId" : 4, "err" : null, "ok" : 1 }
{
        "user" : "supper",
        "readOnly" : false,
        "pwd" : "51a481f72b8b8218df9fee50b3737c44",
        "_id" : ObjectId("4f2bc0d357a309043c6947a4")
}
> db.auth("supper","sup")
1
> exit
bye
更多選項參見:MongoDB – Add Users and Authenticate
5)禁用HTTP和REST端口
MongoDB自身帶有一個HTTP服務和並支持REST接口。在2.6以后這些接口默認是關閉的。mongoDB默認會使用默認端口監聽web服務,一般不需要通過web方式進行遠程管理,建議禁用。修改配置文件或在啟動的時候選擇–nohttpinterface 參數nohttpinterface = false
6)開啟日志審計功能
審計功能可以用來記錄用戶對數據庫的所有相關操作。這些記錄可以讓系統管理員在需要的時候分析數據庫在什么時段發生了什么事情。具體請參見:Mongodb審計功能
7)使用SSL加密功能
MongoDB集群之間以及從客戶端連接到MongoDB實例的連接應該使用SSL。使用SSL對性能沒有影響並且可以防范類似於man-in-the-middle的攻擊。
注意MongoDB社區版默認並不支持SSL。您可以選用MongoDB企業版(有SSL支持),或者從源碼重新編譯MongoDB並使用 —ssl 選項來獲得SSL功能。
具體請參見:Configure mongod and mongos for TLS/SSL
以上所有配置推薦以配置文件形式保存配置
[mongodb@rac3 bin]$ vim /path/mongod.conf
port=27028-------端口。默認27017,MongoDB的默認服務TCP端口,監聽客戶端連接。要是端口設置小於1024,比如1021,則需要root權限啟動,不能用mongodb帳號啟動,(普通帳號即使是27017也起不來)否則報錯:[mongo --port=1021 連接]
bind_ip=192.168.0.1------綁定地址。默認127.0.0.1,只能通過本地連接。進程綁定和監聽來自這個地址上的應用連接。要是需要給其他服務器連接,則需要注釋掉這個或則把IP改成本機地址,如192.168.200.201[其他服務器用 mongo --host=192.168.200.201 連接] ,可以用一個逗號分隔的列表綁定多個IP地址。
logpath=/path/mongod.log------開啟日志審計功能,此項為日志文件路徑,可以自定義指定
pidfilepath=/path/mongod.pid------進程ID,沒有指定則啟動時候就沒有PID文件。默認缺省。
auth=true------用戶認證,默認false。不需要認證。當設置為true時候,進入數據庫需要auth驗證,當數據庫里沒有用戶,則不需要驗證也可以操作。直到創建了第一個用戶,之后操作都需要驗證。
logappend=true------寫日志的模式:設置為true為追加。默認是覆蓋。如果未指定此設置,啟動時MongoDB的將覆蓋現有的日志文件。
fork=true------是否后台運行,設置為true 啟動 進程在后台運行的守護進程模式。默認false。
nohttpinterface = false------是否禁止http接口,即28017 端口開啟的服務。默認false,支持。
然后啟動mongod時加載配置文件
[mongodb@rac3 bin]$ ./mongod -f /path/mongod.conf
更多關於MongoDB加固內容參見:MongoDB security checklist


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM