炙手可热的MongoDB,安全吗?

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
密钥管理服务KMS,1000个密钥,100个凭据,1个月
访问控制,不限时长
简介: MongoDB是10gen公司研发的面向文档的开源NoSQL数据库系统,用C++语言编写。MongoDB凭借简单的部署方式,高效的扩展能力、多样化的语言接口,并借着云蓬勃发展的势头,一度在全球数据库市场占据第四名。

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




作为目前使用最广泛的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形式直接在包中出现),但还是会暴露使用指纹加密的信息,如下图:


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



明文传输的会话信息容易被窃取,启用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、如果上述漏洞重现,可以利用数据库防火墙虚拟补丁做有利补充。


三、Web安全问题

乍看起来,Web安全和MongoDB关系不大,但恰恰相反。鉴于MongoDB的部署环境和使用领域,导致从Web向MongoDB发动的攻击才是MongoDB面临的最大威胁。这部分攻击大体分成两类:

1 Rest和CSRF联合攻击

Rest前文已介绍,MongoDB自带的http REST API。默认情况下MongoDB会在28017开启一个http端口提供REST服务,直接通过特定格式的URL获得数据库中的大部分信息或利用admin.$cmd执行一些数据库级命令。


Rest的问题是访问数据库无需身份验证(开启身份强制验证也没用),并能进行一定操作。CSRF(Cross-site request forgery)则是一种WEB攻击手段,攻击者盗用管理员身份,提交自己的命令。


2 注入攻击

注入攻击是一种宽泛说法,根据不同的语言注入有不同方式,针对MongoDB的注入攻击大体分成二种:解释形语言注入和JavaScript注入。


应对

1、针对第一种攻击,可以利用数据库漏扫产品检查配置,发现REST API是否关闭,解决此类攻击最简单的办法就是将其关闭。

2、通过数据库防火墙产品,可以借助配置规则对注入攻击进行过滤。

本文通过对MongoDB已知安全隐患进行分析,尽可能指出如何防控这些安全隐患,以期对MongoDB产品研发和应用提供一些安全应对思路。

最后推荐一下自家产品:

阿里云市场官方店铺:https://shop14d60793.market.aliyun.com/ 

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
安全 NoSQL MongoDB
20 MongoDB高级 - 用户管理安全
20 MongoDB高级 - 用户管理安全
74 1
|
NoSQL 安全 Java
MongoDB:9-MongoDB的安全和认证
MongoDB:9-MongoDB的安全和认证
226 0
|
4月前
|
NoSQL 安全 MongoDB
【MongoDB深度揭秘】你的更新操作真的安全了吗?MongoDB fsync机制大起底,数据持久化不再是谜!
【8月更文挑战第24天】MongoDB是一款备受欢迎的NoSQL数据库,以其灵活的文档模型和强大的查询能力著称。处理关键业务数据时,数据持久化至关重要。本文深入探讨MongoDB的写入机制,特别是更新操作时的fsync行为。MongoDB先将数据更新至内存以提升性能,而非直接写入磁盘。fsync的作用是确保数据从内存同步到磁盘,但MongoDB并非每次更新后都立即执行fsync。通过设置不同的写入关注级别(如w:0、w:1和w:majority),可以平衡数据持久性和性能。
52 1
|
4月前
|
持续交付 C# 敏捷开发
“敏捷之道:揭秘WPF项目中的快速迭代与持续交付——从需求管理到自动化测试,打造高效开发流程的全方位指南”
【8月更文挑战第31天】敏捷开发是一种注重快速迭代和持续交付的软件开发方法,通过短周期开发提高产品质量并快速响应变化。本文通过问题解答形式,探讨在Windows Presentation Foundation(WPF)项目中应用敏捷开发的最佳实践,涵盖需求管理、版本控制、自动化测试及持续集成等方面,并通过具体示例代码展示其实施过程,帮助团队提升代码质量和开发效率。
74 0
|
7月前
|
NoSQL 安全 MongoDB
MongoDB安全机制:认证、授权与加密
【4月更文挑战第30天】MongoDB提供全面的安全机制,包括认证(用户名/密码、LDAP、Kerberos、x.509证书)、授权(基于角色的访问控制,RBAC)和加密(TLS/SSL、透明数据加密TDE、字段级加密FLE),确保数据保密性、完整性和可用性。通过合理配置这些机制,企业可保障数据安全,应对不断变化的安全威胁。
|
7月前
|
NoSQL 安全 MongoDB
|
NoSQL 安全 MongoDB
MongoDB基本操作(四)——集群与安全
MongoDB基本操作(四)——集群与安全
144 0
|
NoSQL 安全 Shell
MongoDB 安全策略:验证和授权
对于新安装的 MongoDB ,它是没有开启身份验证的。需要进入 admin 数据库,创建一个 root 角色的超级管理员用户。之后再针对具体应用的数据库,使用管理员用户为其创建不同权限的用户,从而做到针对数据库安全的基本保障。
2565 0
|
存储 弹性计算 监控
从事前到事后,云数据库 Redis & MongoDB 安全体系全揭秘!
相比自建,阿里云数据库针对控制链路和数据链路提供了多个维度的安全保障体系,更好的保障客户的数据安全,本文将为您详细介绍云数据库Redis&MongoDB的安全体系。
2581 0
从事前到事后,云数据库 Redis & MongoDB 安全体系全揭秘!