mongodb未授權訪問漏洞

Andrew.Hann發表於2017-01-05

catalogue

1. mongodb安裝
2. 未授權訪問漏洞
3. 漏洞修復及加固
4. 自動化檢測點

 

1. mongodb安裝

apt-get install mongodb

0x1: 建立資料庫目錄

MongoDB的資料儲存在data目錄的db目錄下,但是這個目錄在安裝過程不會自動建立,所以你需要手動建立data目錄,並在data目錄中建立db目錄。/data/db 是 MongoDB 預設的啟動的資料庫路徑(--dbpath)

mkdir -p /data/db

0x2: 命令列中執行 MongoDB 服務

注意: 如果你的資料庫目錄不是/data/db,可以通過 --dbpath 來指定

0x3: MongoDB後臺管理 Shell

如果你需要進入MongoDB後臺管理,你需要先開啟mongodb裝目錄的下的bin目錄,然後執行mongo命令檔案。MongoDB Shell是MongoDB自帶的互動式Javascript shell,用來對MongoDB進行操作和管理的互動式環境。當你進入mongoDB後臺後,它預設會連結到 test 文件(資料庫)

root@iZ23und3yqhZ:~# mongo
MongoDB shell version: 2.4.9
connecting to: test
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
    http://docs.mongodb.org/
Questions? Try the support group
    http://groups.google.com/group/mongodb-user
> 

現在讓我們插入一些簡單的資料,並對插入的資料進行檢索

> db.runoob.insert({x:10})
> db.runoob.find()
{ "_id" : ObjectId("586df25ead93a0064a40a3ae"), "x" : 10 }
> 

0x4: MongoDb web 使用者介面

MongoDB 提供了簡單的 HTTP 使用者介面。 如果你想啟用該功能,需要在啟動的時候指定引數 --rest

./mongod --dbpath=/data/db --rest

MongoDB 的 Web 介面訪問埠比服務的埠多1000
如果你的MongoDB執行埠使用預設的27017,你可以在埠號為28017訪問web使用者介面,即地址為:http://localhost:28017

Relevant Link:

http://www.runoob.com/mongodb/mongodb-linux-install.html

 

2. 未授權訪問漏洞

開啟MongoDB服務時不新增任何引數時,預設是沒有許可權驗證的,登入的使用者可以通過預設埠無需密碼對資料庫任意操作(增刪改高危動作)而且可以遠端訪問資料庫

0x1: 漏洞成因

在剛安裝完畢的時候MongoDB都預設有一個admin資料庫,此時admin資料庫是空的,沒有記錄許可權相關的資訊!當admin.system.users一個使用者都沒有時,即使mongod啟動時新增了—auth引數,如果沒有在admin資料庫中新增使用者,此時不進行任何認證還是可以做任何操作(不管是否是以—auth 引數啟動),直到在admin.system.users中新增了一個使用者。加固的核心是隻有在admin.system.users中新增使用者之後,mongodb的認證,授權服務才能生效

Relevant Link:

https://www.secpulse.com/archives/27090.html
http://webscan.360.cn/vul/view/vulid/3558

 

3. 漏洞修復及加固

0x1: 修改預設埠

修改預設的mongoDB埠(預設為: TCP 27017)為其他埠

0x2: 不要開放到公網0.0.0.0

vim /etc/mongodb.conf 
bind_ip = 127.0.0.1

和redis一樣,mongodb最好只開放本地監聽,至少不能是0.0.0.0

0x3: 禁用HTTP和REST埠

MongoDB自身帶有一個HTTP服務和並支援REST介面。在2.6以後這些介面預設是關閉的。mongoDB預設會使用預設埠監聽web服務,一般不需要通過web方式進行遠端管理,建議禁用。修改配置檔案或在啟動的時候選擇–nohttpinterface 引數nohttpinterface = false

0x4: 開啟日誌審計功能

審計功能可以用來記錄使用者對資料庫的所有相關操作。這些記錄可以讓系統管理員在需要的時候分析資料庫在什麼時段發生了什麼事情

0x5: 開啟MongoDB授權

在admin 資料庫中建立使用者,如 supper 密碼為 sup(此處均為舉例說明,請勿使用此賬號密碼)

> use admin
switched to db admin
> db.addUser("supper", "sup")  
{
    "user" : "supper",
    "readOnly" : false,
    "pwd" : "f4e451395b5b554788c796e5488573b2",
    "_id" : ObjectId("586dfb12ad93a0064a40a3af")
}
> db.auth("supper","sup")
1
> exit
bye

修改配置檔案

vim /etc/mongodb.conf 
auth = true

Relevant Link:

https://laravel-china.org/topics/328
https://help.aliyun.com/knowledge_detail/37451.html

 

4. 自動化檢測點

0x1: 檢測是否監聽到127.0.0.1

不管是配置檔案裡的,還是命令列引數裡的,只要最終結果不是127.0.0.1,就認為是不安全的

--bind_ip 127.0.0.1
or
vim /etc/mongodb.conf 
bind_ip = 127.0.0.1

0x2: 檢測是否開啟auth認證

mongod --auth
or
vim /etc/mongodb.conf 
auth = true

 

Copyright (c) 2016 LittleHann All rights reserved

 

相關文章