炙手可热的MongoDB,安全吗?

MongoDB是10gen公司研发的面向文档的开源NoSQL数据库系统,用C++语言编写。MongoDB凭借简单的部署方式,高效的扩展能力、多样化的语言接口,并借着云蓬勃发展的势头,一度在全球数据库市场占据第四名。

 

39d5aa4d75bbc1c3e658007e70745f88c724241d

 

作为目前使用最广泛的NoSQL数据库类型,MongoDB短时间内能够取得如此巨大的市场成功,内因在于其上述突出的特性。但正所谓成也风云,败也风云,这些特性同时也给MongoDB带来了一定的安全风险。大致上,MongoDB的安全问题可以分为三个部分:

  • 默认配置安全问题

  • 本身安全问题

  • WEB安全问题

 

一、默认配置安全问题

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

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

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

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

 

上述原因最终会导致互联网上出现大量完全开放且脆弱的MongoDB。据调查,截止当前,我国互联网上易被发现的MongoDB有7281个,其中部分仍可随意登录。要解决上述问题就需要对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形式直接在包中出现),但还是会暴露使用指纹加密的信息,如下图:

1923a8b5076c9e783a6a0ca3414ebc8fb1041a00

一般会话则完全是明文信息,可能被不法分子窃听、篡改和中间人攻击:

0cb6d22f2c1037503ec1962da79ce2f46d832389

 

明文传输的会话信息容易被窃取,启用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目标是实现快速简单部署,所以存在很多安全隐患。解决配置安全问题重点在于:

1、网络隐藏,防止恶意访问;

2、加密,保护信息安全;

3、合适的权限,防止越权操作;

4、禁用无用功能,防止某些攻击。

 

应对

1、针对配置参数,使用数据库漏扫产品进行检查,生成安全情况报告,指导并帮助用户对MongoDB进行安全加固。

2、数据库防火墙产品可以帮助MongoDB实现网络隐身效果,并抵御某些利用javascrip发起的数据库攻击。

3、数据库审计产品为非企业版MongoDB提供更全面审计。

4、数据库加密产品帮助MongoDB用户享受更多样性的加密方式,确保数据密文存储。

 

二、本身安全问题

根据CVE列表,MongoDB从2009年面世至今一共发现了13个漏洞,这些漏洞主要分布在2.0-2.6版本之间(MongoDB最高版本已经到3.4系列),漏洞主要分为以下三类:

  • 敏感数据泄露

  • 越权操作

  • 登录调用的函数存在缓冲区溢出漏洞,会导致服务宕机

 

应对

1、通过升级3.0以上版本(目前尚未发现3.0以上版本有CVE漏洞)来解决自身安全问题。

2、如果上述漏洞重现,可以利用数据库防火墙虚拟补丁做有利补充。

原文链接

转载于:https://my.oschina.net/u/3611008/blog/1581624

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值