不太安全的MongoDB

前言

公司的MongoDB数据库今天又呗攻击了,确实是第二次了,第一次是去年这个时候吧,那时这个数据库还处于裸奔,连个基本的密码都没有,加了个密码还不错维持了一年,尴尬,之前我对Mongo根本没接触过。现在让我给个安全加固的配置,乘着下载的时候我们一起来学习下MongoDB。

MongoDB是什么?

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

为什么说Mongo不安全呢

默认配置问题是MongoDB当前最为突出的安全问题。MongoDB勒索事件在全球范围内持续发酵,主因在于在默认部署情况下,MongoDB无需身份验证,即可登录,不法分子只要在互联网上发现MongoDB的地址和端口就可以通过工具直接访问MongoDB,并拥有MongoDB的全部权限,从而进行任意操作。之所以会如此设计,原因在于:

  1. MongoDB默认通过最简单部署方式,最大限度提高运行速度,以在虚拟机(低配机)上运行而定制的,并未充分考虑MongoDB的安全性。

  2. MongoDB官方文档,如针对身份验证,传输加密,网络配置的文档、指南并不规范,容易误导MongoDB管理员。

  3. 一些MongoDB环境是为了单一项目或者是测试环境搭建,搭建者并不关心MongoDB的安全问题。

修改默认配置

启动访问控制并强制进行身份验证

  1. 启动访问控制并强制进行身份验证
    默认配置下,MongoDB不需要进行身份验证即可登录。在MongoDB部署上启用访问控制会强制进行身份验证,根据当前用户实际权限判断后续操作是否被允许。使用auth参数可以开启MongoDB的强制身份验证,为保证auth的真正生效,需要同时在user中配置用户名和密码信息。开启auth能有效杜绝网上非法用户恶意访问和非法操作行为,保护MongoDB中的数据安全。此处可以通过类似防火墙的身份验证,仅允许某些特定用户通过,防止非法访问行为。

  2. 限制网络访问
    默认MongoDB允许任意地址访问,勒索事件中的MongoDB除了没有设置用户密码外,同样也没有限制可信网络访问。为了确保MongoDB在受信任的网络环境中运行,需要限制MongoDB实例侦听传入连接的接口,仅允许受信任的客户端访问MongoDB实例。而限制外网的非法访问需要通过三个参数进行合理关闭:
    通过-bind_ip限定可以访问的ip;
    通过-port设置MongoDB的端口(不要使用默认的27017);
    通过-nohttpinterface 取消MongoDB的WEB管理页面。很多MongoDB用户不知道这个WEB管理页面,该页面无需数据库账号密码即可完成登录,从而查询一些MongoDB的敏感信息;
    关闭rest参数。该参数若开启,上面的web页面就可以直接对数据库进行更多操作。即使开启了强制身份验证,该WEB管理页面仍无需身份验证即可登录,所以一定要关闭rest并封死28017端口。
    数据库防火墙能够对不可信IP访问进行封堵;对web端口(28017)进行部分IP禁用;对27017端口进行隐藏,防止网络端对MongoDB的非法访问。

  3. 启用加密通讯
    MongoDB的网络通讯默认采用明文方式。在身份验证部分虽然采用了类似MySQL的挑战的方式进行认证(密码不会以hash形式直接在包中出现),但还是会暴露使用指纹加密的信息,如下图:
    在这里插入图片描述
    一般会话则完全是明文信息,可能被不法分子窃听、篡改和中间人攻击:
    在这里插入图片描述
    明文传输的会话信息容易被窃取,启用SSL可以防止网络窃听、篡改和中间人攻击,这在一定程度会提高通讯安全。该启动项不仅支持客户端和服务器之间的通讯加密,也支持服务器之间的通讯加密。

  4. 加密和数据保护
    默认情况下MongoDB中的数据以明文形式存储。从3.2版本开始MongoDB默认使用具备加密能力的WiredTiger存储引擎。MongoDB增加了额外的安全层,需要数据库身份验证才可以访问加密内容。支持openssl库提供的多种加密算法,默认使用AES-256的cbc模式可选GCM模式或FIPS模式。

  5. 配置基于角色的访问控制
    MongoDB默认情况下没有用户和密码,管理员若在admin库中的user里添加用户和密码,则其中的用户可以访问数据库下所有实例中存储的内容。同样,在每个分库的user中直接添加用户,效果一样,但此时默认用户的权限会过大。很多业务并不需要整个实例乃至整个数据库的访问权限,权限过大可能给数据库带来安全隐患。
    采用基于角色的访问控制(RBAC)管理对MongoDB系统的访问,向用户授予一个或多个角色,保证用户有必要的数据库资源和操作使用权限。创建各种不同权限的角色,成为解决MongoDB用户权限过大的唯一方式,如此一来会让创建角色变的繁杂。此处可以采用类似数据库防火墙的权限控制加以进一步控制。

  6. 审核数据库操作
    MongoDB默认不开启审计能力,一旦开启,可对部分操作进行审计,跟踪数据库配置和数据的访问和更改。MongoDB商业版支持一个系统审计工具,可在MongoDB实例上记录系统事件(例如用户操作,连接事件)。审计记录允许管理员事后进行取证分析,利用数据库审计产品也可以做类似的事情。

  7. 安装MongoDB使用专用账号
    MongoDB某些与操作系统交互的行为对路径缺乏很好的控制,部分安装者为了省事,直接使用root账号安装,这在某些特定情况下会危害到操作系统上文件的安全,建议不要采取这种安装方式。

  8. 禁用不使用的语言
    MongoDB支持在服务器端执行JavaScript、mapReduce、eval和$where等。如果能确定不使用这些代码进行操作,请禁用,以避免MongoDB被攻击入侵(后面web会细说)。具体做法是通过- noscripting选项禁用服务器端的脚本功能。

小结

看到这你会了么,我还不会~~~~去实践一波吧。
安装MongoDB
MongoDB安全加固配置
MongoDB使用

炙手可热的MongoDB,安全吗?
MongoDB数据库未授权访问漏洞及加固

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不太灵光的程序员

有用的话可以请博主喝杯咖啡续命

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值