MongoDB安全加固,防止数据库攻击删除勒索威胁

mongodb,安全,加固,防止,数据库,攻击,删除,勒索,威胁 · 浏览次数 : 645

小编点评

**MongoDB 勒索原因分析和防护措施** **原因分析:** * MongoDB 的默认 admin 数据库没有设置权限验证,这允许任何用户连接到数据库。 * 由于容器安装时没有开启权限验证,因此管理员用户可以从任何 IP 地址访问数据库。 * 使用默认端口 27017 容易受到恶意程序扫描并连接。 **防护措施:** 1. **设置账号密码:**开启 MongoDB 的权限访问 Docker 安装时设置账号密码。 2. **使用非默认端口:**选择一个不同的端口,避免互联网上的恶意程序扫描和连接。 3. **配置防火墙:**关闭外网访问权限,只允许从内网访问。 4. **关闭万网访问权限:**防止来自互联网上的任何 IP 地址连接。 5. **设置 bind_ip:**使用 `bind_ip` 配置指定 IP 地址可访问数据库,防止攻击者使用其他 IP 地址进行攻击。 **其他建议:** * 定期备份数据库,以确保在发生攻击时可以恢复数据。 * 考虑使用数据库代理,可以提供安全性和性能之间的平衡。 * 遵循安全最佳实践,例如使用 SSL/TLS 加密传输数据。

正文

前言:

  今天发现前段时间自己搭建的一个系统的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: rambler+1duuz@onionmail.org and/or mariadb@mailnesia.com 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: rambler+1duuz@onionmail.org和/或mariadb@mailnesia.com,你会收到一个链接下载你的数据库转储。

MongoDB漏洞成因:

  在初始安装完毕的时候MongoDB都默认有一个admin数据库,此时admin数据库是空的,没有记录权限相关的信息!当admin.system.users一个用户都没有时,即使mongod启动时添加了—auth参数,如果没有在admin数据库中添加用户,此时不进行任何认证还是可以做任何操作(不管是否是以—auth 参数启动),直到在admin.system.users中添加了一个用户。加固的核心是只有在admin.system.users中添加用户之后,mongodb的认证,授权服务才能生效。

遭遇勒索的原因分析:

  首先我这个MongoDB数据库是安装在Docker上面的,因为都是是有默认安装的方式,并且安装完成以后都没有开启默认权限验证登录的功能。开启MongoDB服务时不添加任何参数时默认是没有权限验证的,登录的用户可以通过默认端口无需密码对数据库任意操作(增删改高危动作)而且可以远程访问数据库。并且我还使用了27017这个默认端口,所以黑客可以通过批量扫描Ip很快就能检索到。

MongoDB安全加固措施:

 1、配置账号密码,开启MongoDB的权限访问

Docker安装MongoDB时开启权限验证的命令:

docker run -itd --name mongo-test -p 27017:27017 mongo --auth

参数说明:

  • -itd:其中,i是交互式操作,t是一个终端,d指的是在后台运行。
  • --name mongo-test:容器名称
  • -p 27017:27017 :映射容器服务的 27017 端口到宿主机的 27017 端口。外部可以直接通过 宿主机 ip:27017 访问到 mongo 的服务。
  • --auth:需要密码才能访问容器服务(注意:安全问题,MongoDB默认是不开启权限验证的,不过设置了这里就相当于修改MongoDB的配置auth=ture启用权限访问)。

2、使用非默认的端口,减少互联网上被端口扫描并定向爆破的概率

对MongoDB监听的端口和IP做调整有下面2个目的

  • IP: 默认监听IP为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

3、限制访问IP

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 可以访问了。

4、关闭万网访问权限

关闭外网访问权限,也就是限定只能是内网访问。
在/etc/mongodb.conf中配置:

bind_ip 127.0.0.1

预防方法:

经过这里勒索经历,我总结了一下几点:

  • 不要裸奔,首先把你数据库的账户密码设置好,做好权限验证登录!
  • 尽量不要把你的数据库摆上公网,业务处理都尽量在内网进行!
  • 如果要摆上公网,一定要设置好访问权限,绑定访问源 IP!
  • 记得养成数据备份的好习惯!

参考文章:

https://new.qq.com/rain/a/20210330A06AYX00

https://www.cnblogs.com/fundebug/p/how-to-protect-mongodb.html

https://juejin.cn/post/7049315722039656479

 

与MongoDB安全加固,防止数据库攻击删除勒索威胁相似的内容:

MongoDB安全加固,防止数据库攻击删除勒索威胁

前言: 今天发现前段时间自己搭建的一个系统的MongoDB数据找不到了,觉得很奇妙,然后登上MongoDB数据库发现多了一个名为READ__ME_TO_RECOVER_YOUR_DATA的数据库,里面还有一个README的集合里面包含了下面描述的勒索信息。没错我的MongoDB数据库被攻击了,不过还

MongoDB安装、基础操作和聚合实例详解

虽然MongoDB这些年很流行,但笔者之前没研究过,现在有需求研究这类NoSQL的数据库,是为了验证其是否可被替换。 MongoDB是很轻量的文档数据库,简单测试也懒得专门准备虚拟机环境了,直接在macOS上安装测试下其基础功能。 1.使用 Homebrew 安装 MongoDB 2.启动/停止 M

MongoDB从入门到实战之Docker快速安装MongoDB

前言 在上一篇文章中带领带同学们快速入门MongoDB这个文档型的NoSQL数据库,让大家快速的了解了MongoDB的基本概念。这一章开始我们就开始实战篇教程,为了快速把MongoDB使用起来我将会把MongoDB在Docker容器中安装起来作为开发环境使用。然后我这边MongoDB的可视化工具用的

【小白新手教程】Ubuntu中安装MongoDB

本文由葡萄城技术团队于博客园原创并首发转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 分享给小白的操作教程 , 希望给有需要的人一点帮助。虽然是一个简单的问题,老手可能已经得心应手了,但是作为新手却要研究很久,这里按步骤给大家分享一下如何完成在Ubuntu

MongoDB从入门到实战之MongoDB工作常用操作命令

前言: 上一章节我们快速的在Docker容器中安装了MongoDB,并且通过Navicat MongoDB可视化管理工具快速的连接、创建数据库、集合以及添加了文档数据源。这一章节我们主要是了解一下在日常工作中MongoDB一些常用的操作命令。 MongoDB从入门到实战的相关教程 MongoDB从入

轻松掌握组件启动之MongoDB:快速入门、Linux安装和Docker配置指南

本文总结了MongoDB的快速入门、Linux安装和Docker配置指南。它提供了一步步的操作指引,帮助读者迅速上手MongoDB,并了解如何在Linux环境下进行安装、启动和配置。此外,文章还介绍了使用Docker安装和配置MongoDB的方法,使读者能够更轻松地部署和管理MongoDB实例。

利用Docker、云服务器、mongodb搭建自己的测试平台

准备一个云服务器 购买一个云服务器,在阿里云,腾讯云上购买即可。 然后创建一个实例,安装Linux操作系统,我安装的是CentOS。 记住账号和密码,可以使用ssh远程登录即可。 搭建测试环境 Docker是一个轻量级的虚拟机,可以使用Docker下载一个Docker里面包含你想要的环境的镜像 比如

[转帖]在 CentOS 7 上安装并配置 Python 3.6环境

https://www.jianshu.com/p/b978e46de442 拖了很久没有更新,抱歉啦~ 今天受邀写篇如何在 CentOS 7 上配置 Python 3 环境的文章。往常我都选择直接把我早年写的一篇文章《源码编译MongoDB》丢过去,让他们看其中的源码编译 Python 那一节,不

[转帖]Linux遇到一个内存过高的报警——释放buff/cache

前些天一直受到内存报警,过一段时间就会恢复。由于开发工作有些多,就一直没理它,但是最近几天开始有些频繁了。虽然不影响业务,但是天天报警,还是让人提心吊胆的。因此就抽了一个上午的时间去解决一下这个问题。 排查问题 这台机器安装的是mongodb,因为最近业务增加,内容使用增加是正常的,但是实际的占用内

MongoDB从入门到实战之MongoDB简介

前言 相信很多同学对MongoDB这个非关系型数据库都应该挺熟悉的,在一些高性能、动态扩缩容、高可用、海量数据存储、数据价值较低、高扩展的业务场景下MongoDB可能是我们的首选,因为MongoDB通常能让我们以更低的成本解决问题(包括学习、开发、运维等成本)。接下来的一个月博主将会从基础出发,编写