今天發現前段時間自己搭建的一個系統的MongoDB資料找不到了,覺得很奇妙,然後登上MongoDB資料庫發現多了一個名為READ__ME_TO_RECOVER_YOUR_DATA的資料庫,裡面還有一個README的集合裡面包含了下面描述的勒索資訊。沒錯我的MongoDB資料庫被攻擊了,不過還好這個系統裡面的資料都是自己學習的一些沒有任何價值的資料。但是換個角度,假如在公司層面遇到這樣的事情那一定是天大的事情了,你要面臨公司、客戶資訊保安問題。所以無論是自己學習,還是工作方面我們都要養成時刻做好保護自己軟體程式,及其資料來源安全的問題。今天主要來講講為什麼MongoDB這麼容易遭遇勒索的原因和我們該如何做好防護措施。
README檔案內容如下:
All your data is a backed up. You must pay 0.06 BTC to 168i2g62fcXwu3GYAJM4FAksxEmNnDjCkm 48 hours for recover it. After 48 hours expiration we will leaked and exposed all your data. In case of refusal to pay, we will contact the General Data Protection Regulation, GDPR and notify them that you store user data in an open form and is not safe. Under the rules of the law, you face a heavy fine or arrest and your base dump will be dropped from our server! You can buy bitcoin here, does not take much time to buy https://localbitcoins.com or https://buy.moonpay.io/ After paying write to me in the mail with your DB IP: [email protected] and/or [email protected] and you will receive a link to download your database dump.
翻譯過來就是:
你所有的資料都有備份。你必須支付0.06位元幣到168i2g62fcXwu3GYAJM4FAksxEmNnDjCkm 48小時來恢復它。在48小時到期後,我們將洩露和暴露您的所有資料。在拒絕付款的情況下,我們將聯絡通用資料保護條例(GDPR),並通知他們您以公開形式儲存使用者資料,這是不安全的。根據法律規定,你將面臨鉅額罰款或逮捕你的資料庫將從我們的伺服器上刪除!你可以在這裡購買位元幣,不需要太多時間購買https://localbitcoins.com或https://buy.moonpay.io/支付後寫信給我的郵件與你的DB IP: [email protected]和/或[email protected],你會收到一個連結下載你的資料庫轉儲。
在初始安裝完畢的時候MongoDB都預設有一個admin資料庫,此時admin資料庫是空的,沒有記錄許可權相關的資訊!當admin.system.users一個使用者都沒有時,即使mongod啟動時新增了—auth引數,如果沒有在admin資料庫中新增使用者,此時不進行任何認證還是可以做任何操作(不管是否是以—auth 引數啟動),直到在admin.system.users中新增了一個使用者。加固的核心是隻有在admin.system.users中新增使用者之後,mongodb的認證,授權服務才能生效。
首先我這個MongoDB資料庫是安裝在Docker上面的,因為都是是有預設安裝的方式,並且安裝完成以後都沒有開啟預設許可權驗證登入的功能。開啟MongoDB服務時不新增任何引數時預設是沒有許可權驗證的,登入的使用者可以通過預設埠無需密碼對資料庫任意操作(增刪改高危動作)而且可以遠端存取資料庫。並且我還使用了27017這個預設埠,所以駭客可以通過批次掃描Ip很快就能檢索到。
Docker安裝MongoDB時開啟許可權驗證的命令:
docker run -itd --name mongo-test -p 27017:27017 mongo --auth
引數說明:
127.0.0.1
,我們可能需要開放特定的CIDR來讓處於不同主機上的使用者端可以連線. 最簡單的就是直接允許任意IP的使用者端連線,這時CIDR為0.0.0.0
.但是這也是很危險的一個操作,意味著全球網際網路上的任意一臺電腦都可以連線上來,這雖然方便但是也是最危險的,建議指定具體的CIDR,這樣可以排除網際網路的大量肉雞進行惡意的連線。27017
,我們可以改為其他埠,躲開網際網路上的惡意程式的掃描和連線。修改/etc/mongod.conf
vim /etc/mongod.conf
在埠和IP監聽部分我們改為如下設定:
#network interfaces net: port: 7017 bindIp: 0.0.0.0 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
修改完成後重啟服務:
systemctl restart mongod
如果重啟失敗,可能是SELinux的安全策略限制了MongoDB使用新的埠,我們需要放行MongoDB使用新的埠:
[root@localhost thinktik]# semanage port -a -t mongod_port_t -p tcp 7017 bash: semanage: command not found # 如果出現上面的錯誤,可以這樣這個解決: [root@localhost thinktik]# dnf install policycoreutils-python-utils Last metadata expiration check: 0:10:50 ago on Mon 27 Dec 2021 03:11:19 PM CST. ...
SELinux放行後,我們繼續重啟即可.
如果你需要服務被網際網路上的其他電腦存取,那麼你需要設定防火牆,執行你的埠被存取
# 開放7017埠 [root@thinkvm01 thinktik]# firewall-cmd --zone=public --add-port=7017/tcp --permanent # 過載防火牆 [root@thinkvm01 thinktik]# firewall-cmd --reload
MongoDB可以限制只允許某一特定IP來存取,只要在啟動時加一個引數bind_ip即可,或者在/etc/mongodb.conf中新增bind_ip設定,如下:
# 方法一 mongod --bind_ip 127.0.0.1,10.0.133.14 # 方法二 在/etc/mongodb.conf檔案中新增以下內容: bind_ip = 127.0.0.1,10.0.133.14 這樣之後,MongoDB伺服器端只有127.0.0.1和10.0.133.14這兩個 IP 可以存取了。
關閉外網存取許可權,也就是限定只能是內網存取。
在/etc/mongodb.conf中設定:
bind_ip 127.0.0.1
經過這裡勒索經歷,我總結了一下幾點:
https://new.qq.com/rain/a/20210330A06AYX00
https://www.cnblogs.com/fundebug/p/how-to-protect-mongodb.html
https://juejin.cn/post/7049315722039656479
作者:追逐時光者
作者簡介:一個熱愛程式設計,善於分享,喜歡學習、探索、嘗試新事物,新技術的程式猿。
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利。如果該篇文章對您有幫助的話,可以點一下右下角的【♥推薦♥】,希望能夠持續的為大家帶來好的技術文章,文中可能存在描述不正確或錯誤的地方,歡迎指正、補充,不勝感激 !