日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

MongoDB數(shù)據(jù)庫(kù)未授權(quán)訪問(wèn)漏洞防御最佳實(shí)踐

更新時(shí)間:

MongoDB數(shù)據(jù)庫(kù)未授權(quán)訪問(wèn)漏洞可以導(dǎo)致數(shù)據(jù)庫(kù)數(shù)據(jù)泄露或被刪除勒索。

背景信息

為保證您的業(yè)務(wù)和應(yīng)用的安全,云防火墻提供以下漏洞修復(fù)指導(dǎo)方案。

MongoDB服務(wù)安裝完成后,會(huì)默認(rèn)存在一個(gè)Admin數(shù)據(jù)庫(kù),該Admin數(shù)據(jù)庫(kù)內(nèi)容為空,并且沒(méi)有記錄任何與權(quán)限相關(guān)的信息。

MongoDB默認(rèn)設(shè)置為無(wú)權(quán)限訪問(wèn)限制,也就是說(shuō)開(kāi)啟MongoDB服務(wù)時(shí)如果不添加任何參數(shù),默認(rèn)是不需要權(quán)限驗(yàn)證的。因此,用戶無(wú)需密碼即可通過(guò)默認(rèn)端口對(duì)數(shù)據(jù)庫(kù)操作(增、刪、改、查等高危操作),并可遠(yuǎn)程訪問(wèn)數(shù)據(jù)庫(kù)。

因此,加固的核心操作是實(shí)現(xiàn)在admin.system.users中添加用戶,這樣MongoDB的登錄認(rèn)證、授權(quán)服務(wù)才能生效。

修復(fù)方案

  1. 配置云防火墻訪問(wèn)控制策略。

    1. 限定MongoDB服務(wù)僅對(duì)內(nèi)網(wǎng)服務(wù)器提供服務(wù)。

      登錄云防火墻控制臺(tái)在左側(cè)導(dǎo)航欄,選擇流量分析 > 公網(wǎng)暴露,在暴露明細(xì) > 開(kāi)放應(yīng)用頁(yè)簽,查看公網(wǎng)中MongoDB服務(wù)所屬的IP地址。如果該服務(wù)僅對(duì)內(nèi)網(wǎng)服務(wù)器提供服務(wù),建議禁止將MongoDB服務(wù)開(kāi)放到互聯(lián)網(wǎng)上。

      執(zhí)行以下命令啟動(dòng)IP地址綁定、限定該MongoDB服務(wù)僅對(duì)內(nèi)網(wǎng)服務(wù)器提供服務(wù)(本示例中MongoDB數(shù)據(jù)庫(kù)實(shí)例將只監(jiān)聽(tīng)192.168.XX.XX內(nèi)網(wǎng)的請(qǐng)求)。

      mongod --bind_ip 192.168.XX.XX
    2. 配置MongoDB云防火墻訪問(wèn)控制策略只對(duì)可信源放行。

    1. 配置MongoDB云防火墻訪問(wèn)控制策略只對(duì)可信源放行。

      登錄云防火墻控制臺(tái)。在左側(cè)導(dǎo)航欄,選擇訪問(wèn)控制 > 互聯(lián)網(wǎng)邊界,然后單擊入向頁(yè)簽,配置訪問(wèn)控制策略,僅允許與MongoDB數(shù)據(jù)庫(kù)依賴的服務(wù)器訪問(wèn)該MongoDB服務(wù)。

      1. 入向頁(yè)簽,單擊地址簿管理,在自定義地址簿 > IPv4地址簿頁(yè)簽將MongoDB所有可信源加入地址簿。

      2. 入向頁(yè)簽,單擊創(chuàng)建策略,在創(chuàng)建入向策略 > 自定義創(chuàng)建面板對(duì)MongoDB可信源進(jìn)行放行。 主要參數(shù)配置如下:

        • 訪問(wèn)源:選擇已配置好的MongoDB所有可信源地址簿。

        • 目的:為MongoDB可信源地址。

        • 協(xié)議類型:選擇TCP協(xié)議,表示互聯(lián)網(wǎng)訪問(wèn)流量。

        • 端口: 設(shè)置為0/0,表示可信源的所有端口地址。

    2. 拒絕所有其他非可信源訪問(wèn)MongoDB服務(wù)。

      在左側(cè)導(dǎo)航欄,選擇 訪問(wèn)控制 > 互聯(lián)網(wǎng)邊界,然后單擊入向頁(yè)簽,配置訪問(wèn)控制策略,拒絕其他非可信源訪問(wèn)MongoDB服務(wù)。

      入向頁(yè)簽,單擊創(chuàng)建策略,在創(chuàng)建入向策略 > 自定義創(chuàng)建面板對(duì)MongoDB非可信源進(jìn)行拒絕。 主要參數(shù)配置如下:

      • 訪問(wèn)源:設(shè)置為0.0.0.0/0,表示所有訪問(wèn)源。

      • 目的:為MongoDB服務(wù)所屬的公網(wǎng)IP地址。

      • 協(xié)議類型:選擇TCP協(xié)議,表示互聯(lián)網(wǎng)訪問(wèn)流量。

      • 端口: 設(shè)置為0/0,表示非可信源的所有端口地址。

  2. 開(kāi)啟基于權(quán)限角色的登錄認(rèn)證功能。

    1. 執(zhí)行以下命令,在未開(kāi)啟認(rèn)證的環(huán)境下登錄到數(shù)據(jù)庫(kù)。

      ./mongo 127.0.0.1:27028 (此處修改了默認(rèn)端口)
    2. 執(zhí)行以下命令切換到admin數(shù)據(jù)庫(kù)。

      use admin
      switched to db admin
      說(shuō)明

      只有切換到admin數(shù)據(jù)庫(kù)后添加的賬號(hào)才是管理員賬號(hào)。

    3. 執(zhí)行以下命令創(chuàng)建為admin數(shù)據(jù)庫(kù)創(chuàng)建管理員用戶。 本示例中用戶名為su****,密碼supWDx****。

      說(shuō)明

      MongoDB從V3版本開(kāi)始取消使用addUser方法、采用db.createUser命令創(chuàng)建用戶。

      db.addUser("su****", "supWDx****") 或
      { "n" : 0, "connectionId" : 4, "err" : null, "ok" : 1 }
      db.createUser({user:"****",pwd:"***********",roles:["root"]})
      {
      "user" : "****",
      "readOnly" : false,
      "pwd" : "**************","_id"
      ObjectId("4f2bc0d357a309043c6947a4")
      }
      #管理員賬號(hào)在system.users中。
      db.getCollectionNames()
      [ "system.indexes", "system.users", "system.version" ]

      創(chuàng)建的用戶賬號(hào)保存在system.users中。

      說(shuō)明

      管理員賬號(hào)不要設(shè)置為常見(jiàn)賬號(hào);密碼需要滿足一定的復(fù)雜度:長(zhǎng)度至少八位以上并包括大小寫字母、數(shù)字、特殊字符混合體,不要使用生日、姓名、身份證編號(hào)等常見(jiàn)密碼。

    4. 驗(yàn)證之前添加的用戶是否創(chuàng)建成功。

      執(zhí)行命令后,返回1,表示用戶已創(chuàng)建成功。

      db.auth("su****","supWDx****")
      1
                                      
    5. 結(jié)束Mongodb進(jìn)程并重啟Mongodb服務(wù)。

      db.auth("su****","supWDx****")
      exit
      bye
    6. 執(zhí)行以下命令,啟動(dòng)用戶權(quán)限認(rèn)證。

      開(kāi)啟用戶權(quán)限認(rèn)證后,未登錄的客戶端沒(méi)有權(quán)限做任何操作。

      mongod --dbpath=/path/mongodb --bind_ip=10.0.0.1 --port=27028 --fork=true logpath=/path/mongod.log --auth&
    說(shuō)明
    • admin.system.users中將會(huì)保存比在其他數(shù)據(jù)庫(kù)中設(shè)置的用戶權(quán)限更大的用戶信息,擁有超級(jí)權(quán)限,也就是說(shuō)在admin中創(chuàng)建的用戶可以對(duì)MongoDB中的其他數(shù)據(jù)庫(kù)數(shù)據(jù)進(jìn)行操作。

    • MongoDB系統(tǒng)中,數(shù)據(jù)庫(kù)是由超級(jí)用戶來(lái)創(chuàng)建的,一個(gè)數(shù)據(jù)庫(kù)可以包含多個(gè)用戶,一個(gè)用戶只能在一個(gè)數(shù)據(jù)庫(kù)下,不同數(shù)據(jù)庫(kù)中的用戶可以同名。

    • 特定數(shù)據(jù)庫(kù)(例如:DB1)的用戶User1不能夠訪問(wèn)其他數(shù)據(jù)庫(kù)DB2,但是可以訪問(wèn)本數(shù)據(jù)庫(kù)下其他用戶創(chuàng)建的數(shù)據(jù)。

    • 不同數(shù)據(jù)庫(kù)中同名的用戶不能夠登錄其他數(shù)據(jù)庫(kù),例如:DB1、DB2都有user1,以u(píng)ser1登錄DB1后,不能登錄到DB2進(jìn)行數(shù)據(jù)庫(kù)操作。

    • 在admin數(shù)據(jù)庫(kù)創(chuàng)建的用戶具有超級(jí)權(quán)限,可以對(duì)MongoDB系統(tǒng)內(nèi)的任何數(shù)據(jù)庫(kù)的數(shù)據(jù)對(duì)象進(jìn)行操作。

    • 使用db.auth()可以對(duì)數(shù)據(jù)庫(kù)中的用戶進(jìn)行驗(yàn)證,如果驗(yàn)證成功則返回1,否則返回0。db.auth()只能針對(duì)登錄用戶所屬的數(shù)據(jù)庫(kù)的用戶信息進(jìn)行驗(yàn)證,不能驗(yàn)證其他數(shù)據(jù)庫(kù)的用戶信息。

檢測(cè)是否存在入侵風(fēng)險(xiǎn)

如果您是MongoDB數(shù)據(jù)庫(kù)管理員,可使用以下方式確認(rèn)是否有進(jìn)一步的入侵行為:

  • 查看MongoDB的日志是否完整,并確認(rèn)執(zhí)行刪除數(shù)據(jù)庫(kù)的源IP地址和時(shí)間、行為。

  • 使用db.system.users.find()命令檢查MongoDB賬戶是否存在未添加密碼的賬戶。

  • 使用db.fs.files.find()命令檢查GridFS是否有其他用戶存儲(chǔ)了任何文件。

  • 使用show log global命令查看日志文件,確認(rèn)是否有其他用戶訪問(wèn)了MongoDB。