中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》
  • 首頁 > 
  • 教程 > 
  • 數據庫 > 
  • MongoDB怎樣默認安全設置以及MongoDB中JavaScript該怎么執行與保護

MongoDB怎樣默認安全設置以及MongoDB中JavaScript該怎么執行與保護

發布時間:2021-09-29 09:58:45 來源:億速云 閱讀:222 作者:柒染 欄目:數據庫

MongoDB怎樣默認安全設置以及MongoDB中JavaScript該怎么執行與保護,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

在默認情況下,mongod是監聽在0.0.0.0之上的。而任何客戶端都可以直接連接27017,且沒有認證。好處是,開發人員或dba可以即時上手,不用擔心被一堆配置弄的心煩意亂。壞處是,顯而易見,如果你直接在公網服務器上如此搭建MongoDB,那么所有人都可以直接訪問并修改你的數據庫數據了。下面億速云小編來講解下MongoDB怎么樣默認安全設置?MongoDB中JavaScript怎么執行與保護?


MongoDB怎么樣默認安全設置

在默認情況下,mongod是監聽在0.0.0.0之上的。而任何客戶端都可以直接連接27017,且沒有認證。好處是,開發人員或dba可以即時上手,不用擔心被一堆配置弄的心煩意亂。壞處是,顯而易見,如果你直接在公網服務器上如此搭建MongoDB,那么所有人都可以直接訪問并修改你的數據庫數據了。

默認情況下,mongod也是沒有管理員賬戶的。因此除非你在admin數據庫中使用db.addUser()命令添加了管理員帳號,且使用–auth參數啟動mongod,否則在數據庫中任何人都可以無需認證執行所有命令。包括delete和shutdown。

此外,mongod還會默認監聽28017端口,同樣是綁定所有ip。這是一個mongod自帶的web監控界面。從中可以獲取到數據庫當前連接、log、狀態、運行系統等信息。如果你開啟了–rest參數,甚至可以直接通過web界面查詢數據,執行mongod命令。

我試著花了一個晚上掃描了國內一個B段,國外一個B段。結果是國外開了78個MongoDB,而國內有60臺。其中我隨意挑選了10臺嘗試連接,而只有一臺機器加了管理員賬戶做了認證,其他則全都是不設防的城市。可見其問題還是比較嚴重的。

其實MongoDB本身有非常詳細的安全配置準則,顯然他也是想到了,然而他是將安全的任務推給用戶去解決,這本身的策略就是偏向易用性的,對于安全性,則得靠邊站了。


用戶信息保存及認證過程

類似MySQL將系統用戶信息保存在mysql.user表。MongoDB也將系統用戶的username、pwd保存在admin.system.users集合中。其中pwd=md5(username+“:mongo:”+real_password)。這本身并沒有什么問題。username和:mongo:相當于對原密碼加了一個salt值,即使攻擊者獲取了數據庫中保存的md5hash,也沒法簡單的從彩虹表中查出原始密碼。

我們再來看看MongoDB對客戶端的認證交互是如何實現的。mongoclient和server交互都是基于明文的,因此很容易被網絡嗅探等方式抓取。這里我們使用數據庫自帶的mongosniff,可以直接dump出客戶端和服務端的所有交互數據包:

[root@localhostbin]#./mongosniff--sourceNETlo

sniffing27017

...//省略開頭的數據包,直接看看認證流程。以下就是當用戶輸入db.auth(username,real_passwd)后發生的交互。

127.0.0.1:34142-->>127.0.0.1:27017admin.62bytesid:88

query:{getnonce:1.0}ntoreturn:-1ntoskip:0

127.0.0.1:27017<<--127.0.0.1:3414281bytesid:77-8 replyn:1cursorid:0="" 127.0.0.1:34142--="">>127.0.0.1:27017admin.152bytesid:99

query:{authenticate:1.0,user:"admin",nonce:"df97182fb47bd6d0",key:"3d839522b547931057284b6e1cd3a567"}ntoreturn:-1ntoskip:0

127.0.0.1:27017<<--127.0.0.1:3414253bytesid:88-9    replyn:1cursorId:0    {ok:1.0}   

 第一步,client向server發送一個命令getnonce,向server申請一個隨機值nonce,server返回一個16位的nonce。這里每次返回的值都不相同。    第二步,client將用戶輸入的明文密碼通過算法生成一個key,即key=md5(nonce+username+md5(username+“:mongo:”+real_passwd)),并將之連同用戶名、nonce一起返回給server,server收到數據,首先比對nonce是否為上次生成的nonce,然后比對key==md5(nonce+username+pwd)。如果相同,則驗證通過。    由于至始至終沒有密碼hash在網絡上傳輸,而是使用了類似挑戰的機制,且每一次nonce的值都不同,因此即使攻擊者截取到key的值,也沒用辦法通過重放攻擊通過認證。    然而當攻擊者獲取了數據庫中保存的pwdhash,則認證機制就不會起到作用了。即使攻擊者沒有破解出pwdhash對應的密碼原文。但是仍然可以通過發送md5(nonce+username+pwd)的方式直接通過server認證。這里實際上server是將用戶的pwdhash當作了真正的密碼去驗證,并沒有基于原文密碼驗證。在這點上和我之前分析的mysql的認證機制其實沒什么本質區別。當然或許這個也不算是認證機制的弱點,但是畢竟要獲取MongoDB的username和pwd的可能性會更大一些。    然而在Web的監控界面的認證中則有一些不同。當client來源不是localhost,這里的用戶認證過程是基于HTTP401的。其過程與mongo認證大同小異。但是一個主要區別是:這里的nonce并沒有隨機化,而是每次都是默認為”abc”。    利用這個特點,如果攻擊者抓取了管理員一次成功的登錄,那么他就可以重放這個數據包,直接進入Web監控頁面。    同樣,攻擊者還可以通過此接口直接暴力破解mongo的用戶名密碼。實際上27017和28017都沒有對密碼猜解做限制,但Web由于無需每次獲取nonce,因此將會更為簡便。    

MongoDB中JavaScript怎么執行與保護    MongoDB本身最大的特點之一,就是他是使用JavaScript語言作為命令驅動的。黑客會比較關注這一點,因為其命令的支持程度,就是獲取MongoDB權限之后是否能進一步滲透的關鍵。

JavaScript本身的標準庫其實相當弱。無論是spidermonkey或者是v8引擎,其實都沒有系統操作、文件操作相關的支持。對此,MongoDB做了一定的擴展。可以看到,ls/cat/cd/hostname甚至runProgram都已經在JavaScript的上下文中有實現。看到這里是不是已經迫不及待了?mongoshell中試一下輸入ls(“./”),看看返回。    等等?結果怎么這么熟悉?哈哈,沒錯,其實這些api都是在client的上下文中實現的。一個小小玩笑。    那么在server端是否可以執行js呢?答案是肯定的。利用db.eval(code)——實際上底層執行的是db.$cmd.findOne({$eval:code})——可以在server端執行我們的js代碼。    當然在server端也有js的上下文擴展。顯然mongod考慮到了安全問題(也可能是其他原因),因此在這里并沒有提供client中這么強大的功能。當然MongoDB還在不斷更新,長期關注這個list,說不定以后就有類似load_file/exec之類的實現。     

 一勞永逸解決服務端js執行帶來的問題可以使用noscripting參數。直接禁止server-side的js代碼執行功能。      

看完上述內容,你們掌握MongoDB怎樣默認安全設置以及MongoDB中JavaScript該怎么執行與保護的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

山阴县| 含山县| 尚志市| 博罗县| 启东市| 伊通| 汝阳县| 含山县| 高台县| 岑溪市| 手游| 京山县| 揭阳市| 航空| 曲阳县| 邹平县| 嘉黎县| 奎屯市| 阿拉善左旗| 潮安县| 灵山县| 新乡市| 恩平市| 长汀县| 海伦市| 台东市| 大姚县| 梁河县| 来凤县| 东宁县| 琼结县| 信阳市| 襄汾县| 永善县| 四平市| 尼玛县| 沙河市| 新田县| 江达县| 康平县| 福州市|