MongoDB安全权威指南

想象一下这样的场景:当工作劳累了一天,你已经准备好收拾行李回家的时候,下面这句话突然冒了出来:

2

突然一种沉重的感觉油然而生,这个不可能呀,怎么会发生在我身上呢!然而,您公司的数据库中的真实数据被删除,并被黑客将数据备份到另一台服务器。欢迎来到MongoDB启示录!

从2016年12月到2017年第一季度,这样的故事太常见。2017年第一季度,近3万个MongoDB数据库被黑客入侵、删除,并提出了赎金要求。虽然在大多数情况下,黑客发布数据库的要求似乎微不足道(大约500美元),但正是这种入侵对公司声誉和市场价值造成的不可弥补的损害,这让高管彻夜难眠。客户、供应商和合作伙伴可能会因此离去,随之而来的可能是法律诉讼,员工可能会被解雇,公司可能永远无法从这种经历中恢复过来。遭受网络安全攻击的小企业中,多达60%在六个月内倒闭。这些黑客攻击是如何发生的,您可以做些什么来降低风险呢? 以下是减少MongoDB攻击面所需了解的内容。

1 是数据库有问题?还是人员因素的原因?

MongoDB 2.6.0及以上版本只能通过本地连接访问,但以前的版本没有提供默认的身份验证功能。因此,除非用户进行了设置限制,否则MongoDB将接受来自远程连接的请求。我们仍然看到MongoDB数据库被入侵事件,2018年的一次事件中曝光了4.45亿条记录。黑客使用ZoomEye等搜索引擎搜索不安全的数据库。一个简单的查询可能在几分钟内搜索出成千上万的潜在受害者。

当黑客发现目标后,只需将整个数据集复制到离线服务器,并从目标数据库中删除数据。然后用户会收到一条信息,告诉他们发送一定数量的比特币到一个地址,以便赎回他们的数据。许多人认为MongoDB的安全配置和选项是其安全漏洞的原因。但是,这些被攻击成功的主要原因是,大多数组织习惯于使用默认的数据库配置,而不是自己修改默认的参数配置安装。换句话说,如果组织在数据库配置文件中添加几行代码,就可以避免这一切。显然,这是人员因素引起的。虽然MongoDB通过创建更强的默认设置解决了部分问题,但是仍然有一些操作步骤可能引起MongoDB安全隐患。

2 创建一个万无一失的MongoDB安全策略

提及安全,担心是一件好事!下面是一个循序渐进的生存指南,通过认识数据库薄弱环节,来避免后续的数据库灾难。

2.1 身份验证

身份验证是验证试图连接数据库的客户机的身份的过程。MongoDB提供各种方法来验证客户机的身份。基于挑战的默认策略包括:
SCRAM-SHA-1: 该身份验证机制使用简单的基于文本的用户名和密码,通过传输层安全(transport layer security, TLS)保护的通道传输。
MongoDB-CR:与SCRAM一样,MongoDB-CR根据身份验证数据库验证用户名和密码。
MongoDB-CR已从3.0版本中删除,现在只有较老的迭代使用它。
这两种方法都发送加密的密码,并且为每个新会话生成不同的散列,因此没有人能够嗅出它们。MongoDB也可以使用外部认证协议:
LDAP:轻量级目录访问协议允许用户使用集中的密码登录。LDAP旨在帮助任何人定位和访问他们在公共或私有网络中需要的信息。
Kerberos:这是一个用于服务器-客户机交互的密钥身份验证协议。使用Kerberos,用户只能使用访问票据登录一次。

2.2 MongoDB认证最佳实践

首先,在产品安装上启用安全认证。对于3.5以后的版本,默认情况下启用此功能。启用访问控制并使用上面提到的MongoDB的身份验证机制之一。如果您的部署是集群的,那么每个实例都应该单独配置。

 始终从创建管理员用户开始。然后根据需要添加其他用户。
 使用TLS/SSL加密mongod和mongos实例之间的内部和外部的所有通信。
 使用文件系统、设备或物理加密对每个MongoDB主机上的数据进行加密。
 只在可信网络上运行MongoDB。不要允许您的数据库可路由出站到公共internet,即使是在受信任的网络中,也不要让它在不必要的接口上运行。这可以防止恶意者将数据从服务器转移到另一个离线服务器位置(相对于硬件,基于软件的路由器和静态路由表仍然可以被黑客修改)。
 养成跟踪数据库和数据更改的习惯。如果您正在使用MongoDB企业版,那么可以使用它的审计功能进行分析。

2.2.1 身份认证/基于角色安全

基于角色的访问控制(RBAC)是MongoDB的最佳特性之一。虽然可以在MongoDB中找到定义好的角色,可以满足大多数用户使用场景,但是也可以创建自定义角色。角色本质上决定了用户拥有什么权限以及他/她可以访问什么内容。一旦用户定义了角色,用户就只能访问相关的部分。您可以使用–auth或安全授权设置启用授权。– auth允许授权控制用户对数据库及其资源的访问。该特性在启用后强制执行身份验证——它要求所有客户端在被授予访问权限之前验证其身份。

2.2.2 访问控制的最佳实践

给用户太多的访问权限会导致潜在的特权滥用,这就是为什么在分配角色时进行尽职调查很重要。Gartner的一份报告显示,62%的公司内部人士沉迷于能给他们带来第二份收入的行为。这通常是通过滥用公司数据来实现的。过多的访问是一个经常出现在IT公司需要解决的前10个问题中的问题。为确保特权不会被滥用,请考虑以下准则:

 了解每个角色的每一个细节。角色理解得越好,就越能准确地为它们分配特权。
 最好遵循最少特权的原则。只分配给用户完成任务所需的角色。如果需要,可以分配更多特权。
 为数据库的每个应用程序/用例创建一个新的MongoDB用户。例如,创建一个名为“webapp”(拥有最少特权)的用户来运行您的web应用程序,同时为一个业务分析系统创建另一个用户“analytics”(可能是只读的)。这将创建独立的特权,并允许对数据库的应用程序使用进行细粒度控制。
 创建一个资料来帮助用户理解基本信息安全。通过比赛方式,确保员工理解安全的基本要求,并清楚如果不满足这些要求,他们可能面临的后果。
 一旦用户离开组织,立即撤消对他们的访问权限。
 实现用户可配置的软件,以便更有效地管理多个用户。
 MongoDB 3.5或更高版本附带客户端源过滤特征,允许您基于IP地址或IP范围过滤连接。使用它可以更好地控制谁可以访问环境。
 实现用户级别访问控制列表,以便向单个用户授予权限。

2.2.3 TLS/SSL 加密

MongoDB提供网络加密,可以通过磁盘加密来帮助保护数据库和通信。TLS和SSL都是用于加密网络流量的标准技术。在MongoDB 2.6中,SSL和TLS都得到x.509证书的支持。客户端可以使用后者来验证他们的身份,而不是用户名和密码。当使用TLS/SSL时,MongoDB要求所有连接的最小密钥长度为128位。虽然MongoDB可以使用任何有效的证书,但是最好避免使用自签名证书,因为即使通信通道仍然加密,也不会对服务器身份进行验证。在这种情况下,数据库可能容易受到中间人攻击。

2.2.4 如何用TLS/SSL配置mongod和mongos

要在MongoDB部署中使用TLS/SSL,请在mongod和mongos中包含以下配置选项:
net.ssl模式设置为requireSSL。该设置限制每个服务器只能使用TLS/SSL加密连接。还可以指定值allowSSL或preferSSL来设置端口上混合TLS/SSL模式的使用。详细细节,请参考net.ssl模式。
PEMKeyfile:包含TLS/SSL证书和密钥的.pem文件。

2.3 加强MongoDB数据库

虽然这些步骤将帮助您的数据库在恶意的在线活动中生存下来,但是多做一些会进一步加强您的防御。“加强”本质上是指逐层增加安全性的方法,其实数据库的每个部分都有自己的安全措施。MongoDB数据库也自己的增强特性。

2.3.1 使用IP绑定加强配置

对于3.6以上版本,MongoDB默认绑定到本地主机,而对于2.6到3.4版本,只有来自官方MongoDB RPM和DEB包的二进制文件默认绑定到本地主机。

2.3.2 使用防火墙和vpn加强网络

防火墙:可以帮助您更好地控制网络通信。防火墙限制传入的流量,特别是来自不可信源的流量。由于勒索软件和其他类型的攻击针对特定的端口,拥有配置良好的防火墙是一种理想的防御手段。在Linux系统上,管理员可以使用iptables接口访问底层netfilter防火墙。在Windows系统上,可以使用netsh命令行界面访问Windows防火墙。

虚拟专用网(VPN):VPN是通过不安全的通信网络连接两个端点的理想选择。根据特性及其配置方式,VPN允许证书验证和加密协议。由于VPN提供了客户端和服务器之间的安全通道,所以它们也可以与自生成的证书一起使用,而不需要担心中间人的攻击。

3 了解勒索软件攻击的流程

既然已经知道如何减少来自网络的威胁,让我们来看看勒索软件攻击是如何工作的。虽然勒索软件攻击一开始只是一些小麻烦,但它已经成为一项极其复杂的业务,给企业造成了数百万美元的损失。 Ostermon Research的一项研究发现,美国、英国、加拿大和德国40%的公司都遭受过勒索软件攻击。其中,三分之一的公司亏损,20%的公司不得不暂停所有业务活动,直到局势得到控制。那么,勒索软件攻击究竟是如何工作的呢?虽然它们在执行上可能有所不同,但是大多数攻击都有一些共同的元素。这里是一个典型的勒索软件攻击是如何工作的快速纲要。

3.1 攻击准备

这是恶意软件进入目标网络的阶段。攻击者可以使用许多交付模式。最常见的有:
电子邮件:目前最常用的使用方式。绝大多数勒索软件的尝试都源自网络钓鱼攻击,这种攻击使用带有恶意内容,看上去经过认证的电子邮件。
基于web的攻击:下载脚本和未注册的软件、跨站点脚本攻击、受感染的广告和社交媒体入侵是这里的入口点。
网络:自动搜索工具用于扫描网络中的漏洞。一旦被发现,它们可能被用来部署任何形式的恶意软件。大多数MongoDB数据库都经历过基于这样的网络攻击。
基于web的应用程序:网络邮件、购物网站和在线表单有时容易受到恶意软件的感染。

3.2 入侵

如果用户在不知情的情况下点击了一段恶意代码并执行了它,这种高级持久威胁软件将迅速开始加密目标文件。某些情况下(比如MongoDB),它会完全删除它们。之后,用户会收到一封勒索信,告诉他们把一些钱(通常是比特币,因为它们无法追踪)发送到一个地址,然后通过电子邮件跟进,让他们的系统解锁。

3.3 恢复

用户现在有两种选择——付钱并希望攻击者恢复他们的系统。或者,如果他们很聪明,只需使用备份副本恢复他们的系统。你应该知道,在支付赎金的勒索软件受害者中,只有19%的人能够取回他们的文件。所以很可能,到最后,你的数据和钱都丢了,即赔了夫人又折兵。

无论如何,企业现在必须清理受感染的文件,让系统重新上线。一个完全更新的网络和端点安全系统将被证明是帮助他们节省时间的关键。这些步骤因公司而异,但都涉及到对系统日志、备份副本和状态前/后的全面分析,以找到最佳的操作过程。

4 结论和思考

根据McAfee的一份报告,网络犯罪的商业成本每年约为6000亿美元,这一趋势没有停止的迹象。网络犯罪分子正在使用更新、更强大的技术,以至于今天我们有了网络犯罪即服务的商业模式。加密货币和Tor等匿名浏览器的兴起,只会助长网络犯罪分子的胆量,因为他们的活动几乎不可能被追踪。

不幸的事实是,没有一种技术能够完全免受攻击,由于人的组成部分总是容易被操纵的。只要看一眼大多数网络犯罪是如何运作的,就会发现,它们主要依赖于人为的错误、无知或疏忽作为其运作方式。如果用户愿意让系统访问恶意代码,那么任何安全系统都无法阻止。因此,尽管拥有一个最新的安全系统是一个良好的开端,但创建强大且经过深思熟虑的安全策略将最终帮助您抵御攻击并降低系统的风险。考虑以下步骤:

1、始终将数据库管理系统(DBMS)设置为一个复杂的密码。
2、远离默认用户和默认数据库。因为这个信息是公开的,它可以用来被利用。
3、永远不要使用标准的用户名,如root、user或app,因为它们是最容易猜到的。
4、尽可能限制公共网络的访问。只有需要与数据库服务器通信的IP地址才能访问它。强烈推荐使用高质量的VPN。
5、设置监视系统,监控高CPU使用率和I/O活动。这样做会提醒您注意网络攻击的典型异常模式。
6、同样,在分配用户角色时遵循最少特权原则。这一点再怎么强调也不为过。
7、定期进行数据库审核。您的审计跟踪时间越长,您就越安全。
8、加密备份数据。勒索软件攻击也开始感染备份。
9、考虑雇佣有道德的黑客来获得一个局外人的视角,并检查你的数据库的安全弱点。
10、在接受别人的信息前,一定要先确定对方的身分。问问自己:
 我认识这个人吗?
 我一定要点击链接或打开附件吗?
 这个人的名字和电子邮件和我的通讯录上的是一样的吗?
 我在等他们的邮件吗?
11、 让自己跟上安全领域的最新动态。
数字安全是一个不断变化的目标,每一刻都不一样。由于每个企业都有自己的优势和劣势,所以最好是每个组织的系统和策略都基于这样设置。

作者简介:
Tim Vaillancourt – Tim是一名开源爱好者,长期以来一直致力于优化大型基础设施,技术栈角色包括系统管理员、操作管理员、DBA和开发人员等。Tim作为Percona的高级技术运营架构师,专注于提高MongoDB的自动化程度。

译者:管祥青

原文标题:The definitive guide to MongoDB security
原文地址:https://opensource.com/article/19/1/mongodb-security

发表评论