MongoDB 安全性权威指南

逐步生存指南,以降低您遭受下一次数据库灾难的风险。
174 位读者喜欢这篇文章。

想象一下:您已准备好收拾东西,结束一天疲惫的工作回家,但就在您要关机时,突然弹出这个

MongoDB ransomware message

一种下沉的感觉开始袭来,您开始否认。不可能发生在我身上!然后现实袭来——您公司数据库已被删除并备份到另一台服务器。欢迎来到 MongoDB 末日!

像这样的故事在 2016 年 12 月至 2017 年第一季度之间非常普遍,当时近 30,000 个 MongoDB 数据库遭到黑客攻击、删除并被勒索。

虽然在大多数情况下,黑客要求释放数据库的要求似乎微不足道(约 500 美元),但此类入侵对公司声誉和市场价值造成的不可弥补的损害才是让其高管彻夜难眠的原因。

客户、供应商和合作伙伴可能会离您而去,法律后果可能会随之而来,员工可能会被解雇,公司可能永远无法从这种经历中恢复过来。高达 60% 的遭受网络安全攻击的小型企业在六个月内倒闭。

这些黑客攻击是如何发生的?您可以做些什么来降低风险?以下是您需要了解的,以减少 MongoDB 的攻击面。

是您的数据库有问题?还是您?

虽然 MongoDB 2.6.0 及更高版本只能通过本地连接访问,但以前的版本没有默认的身份验证功能。因此,除非用户花时间设置限制,否则它们会接受来自远程连接的请求。

正如 2018 年发生的 4.45 亿条记录泄露事件 所证明的那样,我们仍然看到 MongoDB 数据库泄露事件。黑客使用 ZoomEye 等搜索引擎搜索不安全的数据库。一个简单的查询可能会在几分钟内找到数千名潜在受害者。

在发现目标后,黑客只需将整个数据集复制到异地服务器,然后从目标数据库中删除。然后,用户会收到一条消息,告知他们向某个地址发送一定数量的比特币以释放其数据库。

许多人认为 MongoDB 的安全配置和选项是其安全漏洞的原因。但这些黑客攻击成功的主要原因是,大多数组织习惯于使用默认数据库预设 而不是亲自配置其安装

换句话说,如果组织只是在其数据库配置文件中添加几行代码,那么整件事就可以避免。显然,用户通常有过错。虽然 MongoDB 通过创建更强大的默认设置来解决此问题,但您仍然可以采取一些步骤来确保您永远不会在另一个 MongoDB 末日中醒来。

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

到现在为止,您可能已经相当担心了。对于安全而言,担心是好事!这是一个逐步生存指南,您可以使用它来降低您遭受下一次数据库灾难的风险。

身份验证

身份验证是验证尝试连接数据库的客户端身份的过程。MongoDB 提供了多种方法来验证客户端的身份。基于质询的默认措施包括

  • SCRAM-SHA-1: Salted Challenge Authentication Mechanism 使用通过传输层安全 (TLS) 保护的通道传输的简单基于文本的用户名和密码。

  • MongoDB-CR:与 SCRAM 类似,MongoDB-CR 根据身份验证数据库验证用户名和密码。MongoDB-CR 已从 3.0 版本中删除,如今只有较旧的版本使用它。

这两种方法都以加密方式发送密码,并且为每个新会话生成不同的哈希值,因此没有人可以嗅探到它们。

MongoDB 也可以采用外部身份验证协议

  • LDAP:轻型目录访问协议允许用户使用其集中式密码登录。LDAP 旨在帮助任何人在公共或私有网络中查找和访问他们需要的信息。

  • Kerberos:这是一种用于服务器-客户端交互的密钥身份验证协议。使用 Kerberos,用户只需使用访问票证登录一次即可。

MongoDB 身份验证最佳实践

首先:始终在生产安装中启用身份验证。对于 3.5 及更高版本,此功能默认启用。

  • 启用访问控制并使用上述 MongoDB 身份验证机制之一。如果您的部署是集群的,则应单独配置每个实例。

  • 始终从创建管理员用户开始。然后根据需要添加其他用户。

  • 使用 TLS/SSL 加密 mongodmongos 实例之间以及内部和外部通信的所有通信。

  • 使用文件系统、设备或物理加密来加密每个 MongoDB 主机上的数据。

  • 仅在受信任的网络上运行 MongoDB。不要让您的数据库可从公共互联网出站路由,即使在受信任的网络内也是如此,并且不要让它在超出其必须的接口上运行。这可以防止不良行为者有办法将您的数据从服务器移动到另一个异地位置(对于硬件而言,软件路由器和静态路由表仍然可以被黑客修改)。

  • 养成跟踪数据库和数据更改的习惯。如果您正在使用 MongoDB Enterprise,则使用其审计工具进行分析。

授权/基于角色的安全性

基于角色的访问控制 (RBAC) 是 MongoDB 的最佳功能之一。虽然您可以在 MongoDB 中找到可以覆盖大多数用户的明确定义的角色,但也可以创建自定义角色。

角色本质上决定了用户拥有的权限以及他/她可以访问的内容。一旦用户被角色定义,用户就无法访问超出其范围的系统。

您可以使用 --auth 或 security-authorization 设置启用授权。--auth 启用授权来控制用户对数据库及其资源的访问。此功能还在启用后强制执行身份验证——它要求所有客户端在被授予访问权限之前验证其身份。

访问控制最佳实践

给予用户过多的访问权限会导致潜在的特权滥用,这就是为什么在分配角色时进行尽职调查很重要。Gartner 的一份 报告 显示,62% 的公司内部人员从事了为他们带来第二收入的活动。这通常是通过滥用公司数据来完成的。

访问权限过大是公司不断努力解决的十大 IT 问题之一。为了确保永远不会滥用特权,请考虑遵循以下准则

  • 了解每个角色,直至最细微的细节。角色理解得越好,分配给他们的特权就越准确。

  • 最好遵循最小特权原则。仅向用户分配他们完成工作所需的角色。如果需要,可以分配更多特权。

  • 为数据库的每个应用程序/用例创建一个新的 MongoDB 用户。例如,创建一个名为“webapp”的用户(具有最小特权)来运行您的 Web 应用程序,同时为业务分析系统创建另一个用户“analytics”(可能是只读的)。这创建了隔离的特权,并允许对应用程序的数据库使用进行精细控制。

  • 创建资源以帮助用户了解基本信息安全。进行演习以确保员工了解安全要求,并清楚了解如果不满足要求他们可能面临的后果。

  • 一旦用户离开您的组织,立即撤销不再与您的组织有关系的用户访问权限。

  • 实施用户配置软件以更有效地管理多个用户。

  • MongoDB 3.5 及更高版本附带客户端源过滤,允许您根据 IP 地址或 IP 范围过滤连接。使用它来更好地控制谁可以访问环境。

  • 实施用户级访问控制列表以向各个用户授予权限。

TLS/SSL 加密

MongoDB 提供网络加密,并且可以传递磁盘加密,以帮助您保护数据库和通信。TLS 和 SSL 都是用于加密网络流量的标准技术。

从 MongoDB 2.6 开始,x.509 证书同时支持 SSL 和 TLS,客户端可以使用后者来验证其身份,而不是用户名和密码。使用 TLS/SSL 时,MongoDB 要求所有连接的密钥长度至少为 128 位。

虽然 MongoDB 可以使用任何有效的证书,但最好避免使用自签名证书,因为即使通信通道保持加密,也不会验证服务器身份。在这种情况下,数据库可能会容易受到中间人攻击。

如何为 TLS/SSL 配置 mongod 和 mongos

要在 MongoDB 部署中使用 TLS/SSL,请将以下运行时选项与 mongod 和 mongos 一起包含

  • net.ssl.mode 设置为 requireSSL。此设置限制每个服务器仅使用 TLS/SSL 加密连接。您还可以指定值 allowSSLpreferSSL 以在端口上设置混合 TLS/SSL 模式的使用。有关详细信息,请参阅 net.ssl.mode。

  • PEMKeyfile,其中包含 TLS/SSL 证书和密钥的 .pem 文件。

强化您的 MongoDB 数据库

虽然这些步骤将帮助您的数据库在恶意在线活动中幸存下来,但更进一步的强化将进一步加强您的防御。“强化”本质上是指添加安全性的分层方法,其中数据库的每个部分都具有自己的安全措施。

MongoDB 数据库带有自己的强化功能。

使用 IP 绑定的配置强化

对于 3.6 及更高版本,MongoDB 默认绑定到 localhost,而对于 2.6 到 3.4 版本,只有来自官方 MongoDB RPM 和 DEB 包的二进制文件才会默认绑定到 localhost。

使用防火墙和 VPN 的网络强化

  • 防火墙: 这些可以帮助您对网络通信施加更精细的控制。防火墙限制传入流量,尤其是来自不受信任来源的流量。由于勒索软件和其他类型的攻击针对特定端口,因此拥有配置良好的防火墙是理想的防御措施。



    在 Linux 系统上,管理员可以使用 iptables 接口来访问底层 netfilter 防火墙。在 Windows 系统上,可以使用 netsh 命令行界面来访问 Windows 防火墙。

  • 虚拟专用网络 (VPN): VPN 非常适合通过不太安全的通信网络连接两个端点。根据功能和配置方式,VPN 允许证书验证和加密协议。由于 VPN 在客户端和服务器之间提供安全隧道,因此它们也可以与自生成证书一起使用,而无需担心中间人攻击。

了解勒索软件攻击的剖析

现在您已经了解了如何减少对网络的威胁,让我们来看看勒索软件攻击是如何运作的。虽然它们可能最初只是一个小麻烦,但勒索软件攻击已发展成为一项极其复杂的业务,给企业造成数百万美元的损失。

Ostermon Research 的一项 研究 发现,美国、英国、加拿大和德国 40% 的公司遭受过勒索软件攻击。其中,三分之一损失了收入,20% 的公司不得不暂停所有业务活动,直到情况得到控制。

那么,勒索软件攻击是如何运作的呢?虽然它们的执行方式可能不同,但大多数攻击都有一些共同要素。以下是典型勒索软件攻击如何运作的快速概要。

步骤 1:交付

这是恶意软件进入目标网络的阶段。攻击者可以使用多种交付模型。一些最常见的模型是

  • 电子邮件: 到目前为止最大的目标。绝大多数勒索软件尝试都源于网络钓鱼攻击,该攻击使用看起来真实的电子邮件和恶意内容。

  • 基于 Web 的攻击: 下载脚本和未注册软件、跨站脚本攻击、受感染的广告和社交媒体入侵是此处的首选入口点。

  • 网络: 自动化搜索工具用于扫描网络中的漏洞。一旦发现,它们可用于部署任何类型的恶意软件。基于网络的攻击是大多数 MongoDB 数据库所经历的。

  • 基于 Web 的应用程序: Webmail、购物网站和在线表单有时容易受到恶意软件感染。

步骤 2:感染

如果用户不知不觉地点击了恶意代码并执行了它,则恶意软件(一种高级持久性威胁)将迅速开始加密目标文件。在某些情况下(如 MongoDB),它会完全删除它们。

用户会看到勒索信,告知他们向某个地址发送一些钱(通常是比特币,因为比特币是无法追踪的),然后通过电子邮件跟进以解锁他们的系统。

步骤 3:恢复

用户现在有两个选择——付款并希望攻击者会恢复他们的系统。或者,如果他们很聪明,只需使用备份副本恢复他们的系统。您应该知道,只有 19% 的勒索软件受害者 付款后实际上取回了他们的文件。因此,最终您很可能既没有数据也没有钱。

在任何情况下,企业现在都必须清理受感染的文件并使其系统恢复在线。一个完全更新的网络和端点安全系统将被证明对于帮助他们节省时间至关重要。步骤因公司而异,但都涉及对系统日志、备份副本以及前后状态进行彻底分析,以找到最佳行动方案。

结束语

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

不幸的是,事实是,没有任何技术能够完全免受攻击,因为其中的人为因素将始终容易受到操纵。即使匆匆一瞥大多数网络犯罪的运作方式,也会暴露出它们主要依赖人为错误、无知或疏忽作为其作案手法。如果用户自愿将系统访问权限授予恶意代码,那么任何安全系统都几乎无能为力来阻止它。

因此,虽然拥有最新的安全系统是一个良好的开端,但制定强大且经过深思熟虑的安全策略才是最终帮助您抵御攻击并降低系统风险的关键。请考虑以下步骤

  1. 始终将您的数据库管理系统 (DBMS) 设置为需要强密码。

  2. 远离默认用户和演示数据库。由于此信息是公开的,因此可能会被用来对付您。

  3. 永远不要使用像 root、user 或 app 这样的标准用户名,因为它们最容易被猜到。

  4. 尽可能限制对公共网络的访问。只有需要与您的数据库服务器通信的 IP 地址才应被授予访问权限。强烈建议使用高质量的 VPN。

  5. 设置监控系统以查找高 CPU 使用率和 I/O 活动。这样做会提醒您注意网络攻击的典型异常模式。

  6. 再次强调,在分配用户角色时,请遵循最小特权原则。这一点怎么强调都不过分。

  7. 定期进行数据库审计。您的审计跟踪越长,您就越安全。

  8. 加密您的备份数据。勒索软件攻击也已开始感染备份。

  9. 考虑聘请道德黑客来获得外部视角并探测您的数据库是否存在弱点。

  10. 在接受任何人的通信之前,务必确定其身份。问问自己

    • 我认识这个人吗?

    • 我真的必须点击链接或打开附件吗?

    • 此人的姓名和电子邮件是否与我的联系人列表中相同?

    • 我是否期待收到他们的电子邮件?

  11. 让自己及时了解安全领域的最新动态。

数字安全是一个不断变化的目标,每一刻都不同。由于每个企业都有自己的一套优势和劣势,因此最好将每个组织的系统和策略都基于这些优势和劣势。

User profile image.
Tim 是一位开源爱好者,在各种 sys/ops 管理员、DBA 和开发人员角色组合中优化大型基础设施方面拥有长期背景。Tim 专注于改进 MongoDB 的自动化,担任 Percona 的高级技术运营架构师。

评论已关闭。

© . All rights reserved.