天天看點

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若轉載請注明出處!若有疑問,請回複交流!