别让MongoDB数据库“裸奔”,送你一份安全性权威指南
作者:Tim Vaillancourt
想象一下:在经历了一天疲惫的工作之后,数据库管理员准备好回家,但就在这时,你的系统弹出了这样的对话框:
此时,你的心情肯定差到极点。这样的故事在2016年12月到2017年第一季度之间非常普遍,当时有近30000个MongoDB数据库遭到黑客攻击,删除,并收到赎金要求。
虽然在大多数情况下,黑客提出的要求微不足道,大约为500美元,但这种问题,会造成公司声誉和市场价值方面,不可挽回的损失,也许你将面临随之而来的不眠之夜。
客户,供应商和合作伙伴可能会选择离开,还可能会产生法律后果,员工可能被解雇,公司可能永远无法从损失中恢复过来。据统计,多达60%的遭遇网络安全攻击的小型企业在6个月内面临关门停业。
那么这些黑客是怎么做到的,可以采取哪些措施来降低风险?以下是减少MongoDB面对攻击所需了解的内容。
你的数据库面临问题吗?
虽然MongoDB 2.6.0及更高版本只能通过本地连接访问,但以前的版本没有默认的身份验证功能。因此,除非用户花时间设置限制,否则他们将接受来自远程连接的请求。
近来,MongoDB数据库遭到破坏的事件层出不穷,2018年一次事件中暴露了4.45亿条记录。黑客使用ZoomEye等搜索引擎搜索不安全的数据库。一个简单的查询可能会在几分钟内导致成千上万的潜在受害者。
在发现数据库的标记后,黑客只需将整个数据集复制到非现场服务器并将其从目标数据库中删除。然后,用户会收到一条消息,告诉用户将一定数量的比特币发送到一个地址以确保数据库的安全。
许多人认为MongoDB的安全配置和选项是其安全漏洞的原因。但这些黑客成功的主要原因是大多数企业习惯使用默认数据库预设,而不是亲自配置和安装。
换句话说,企业只是在他们的数据库配置文件中添加几行代码,就可以避免整个事情。显然,用户没有意识到问题的严重性。虽然MongoDB通过创建更强大的默认设置解决了这个问题,但仍然可以采取一些措施来确保你永远不会遇到下一次。
创建一个万无一失的MongoDB安全策略
以下是一份安全性指南,可以使用它来减少在下一次数据库灾难中的漏洞。
认证
身份验证是验证尝试与数据库连接的客户端的身份的过程。MongoDB提供了各种方法来验证客户端的身份。基于挑战的违约措施包括:
- SCRAM-SHA-1:Salted Challenge认证机制使用简单的基于文本的用户名和密码,这些用户名和密码通过受传输层安全性(TLS)保护的信道传输。
- MongoDB-CR:与SCRAM一样,MongoDB-CR根据身份验证数据库验证用户名和密码。MongoDB-CR已从3.0版中删除,只有较旧的迭代才会使用它。
这两种方法都会发送加密的密码,并为每个新会话生成不同的哈希,因此没有人可以嗅探出它们。
MongoDB也可以使用外部身份验证协议:
- LDAP:轻量级目录访问协议允许用户使用其集中密码登录。LDAP旨在帮助任何人在公共或专用网络中查找和访问所需的信息。
- Kerberos:这是用于服务器-客户端交互的密钥身份验证协议。使用Kerberos,用户只能使用访问权限登录一次。
MongoDB身份验证最佳实践
首先要做的事情:始终在生产安装上启用auth。对于3.5版以上版本,默认情况下启用此功能。
- 启用访问控制并使用上面提到的MongoDB认证机制之一。如果部署是集群的,则应单独配置每个实例。
- 始终从创建管理员用户开始。然后根据需要添加其他用户。
- 使用TLS/SSL加密mongod和mongos实例之间的所有通信以及内部和外部通信。
- 使用文件系统,设备或物理加密对每个MongoDB主机上的数据进行加密。
- 仅在受信任的网络上运行MongoDB。不允许你的数据库可路由到出站到公共互联网,即使在受信任的网络内,也不要让它在任何更多的接口上运行。这可以防止不良行为者将数据从服务器移动到另一个异地位置(对于硬件,即基于软件的路由器和静态路由表仍然可以被黑客修改)。
- 养成跟踪数据库和数据变化的习惯。如果你使用的是MongoDB Enterprise,请使用其审计工具进行分析。
授权/基于角色的安全性
基于角色的访问控制(RBAC)是MongoDB的最佳功能之一。虽然你可以在MongoDB中找到可以覆盖大多数用户的明确定义的角色,但也可以创建自定义角色。
角色本质上决定了用户拥有的权限以及他/她可以访问的权限。一旦用户被角色定义,用户就无法访问超出它的系统。
你可以使用--auth或security-authorization设置启用授权。--auth允许授权控制用户对数据库及其资源的访问。此功能还在启用后强制执行身份验证——它要求所有客户端在获得访问权限之前验证其身份。
访问控制最佳实践
为用户提供过多的访问权限可能会导致滥用权限,这就是为什么在分配角色时执行尽职调查很重要的原因。
太多的访问权是一个问题,这个问题经常出现在公司正在努力解决的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加密连接。还可以指定值allowSSL或preferSSL来设置端口上混合TLS/SSL模式的使用。有关详细信息,请参见net.ssl.mode。
- 包含TLS/SSL证书和密钥的.pem文件的PEMKeyfile。
强化MongoDB数据库
虽然这些步骤可以帮助你的数据库在恶意的在线活动中生存,但加倍努力可以进一步加强防御能力。“强化”本质上是指添加安全性的逐层方法,其中数据库的每个部分都有自己的安全措施。
MongoDB数据库具有自己的强化功能。
使用IP绑定进行配置强化
对于V3.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%会将其文件归还。因此,你可能会在一天结束时,没有数据和资金。
无论如何,企业现在必须清理受感染的文件并使其系统重新联机。完全更新的网络和端点安全系统对于帮助他们节省时间至关重要。这些步骤因公司而异,但所有步骤都涉及对系统日志,备份副本,以及状态之前/之后的全面分析,以找到最佳的行动方案。
写在最后
迈克菲的一份报告显示,网络犯罪的商业成本每年约为6000亿美元,这一趋势没有停止的迹象。网络犯罪分子正在使用更新,更强大的技术,以至于今天我们拥有网络犯罪即服务业务模式。加密货币和Tor等匿名浏览器的崛起只会使网络犯罪分子更加胆大妄为,因为他们的活动几乎无法追踪。
不幸的事实是,任何技术都不能完全免受攻击,因为它的组成部分总是可以操纵。即使只看一眼大多数网络犯罪的工作,也会发现他们主要依靠人为错误,无知或疏忽作为他们的运作方式。如果用户愿意让系统访问恶意代码,那么任何安全系统形同虚设。
因此,虽然拥有最新的安全系统是一个良好的开端,但创建强大且经过深思熟虑的安全策略,最终将帮助你抵御攻击并降低系统风险。请考虑以下步骤:
- 始终将数据库管理系统(DBMS)设置为需要强密码。
- 远离默认用户和演示数据库。由于此信息是公开的,因此可以用来对付你的系统。
- 切勿使用root,user或app等标准用户名,因为它们最容易猜到。
- 尽可能限制公共网络访问。只有与数据库服务器通信的IP地址才能获得访问权限。强烈建议使用高质量的VPN。
- 设置监控系统以查找高CPU使用率和I/O活动。这样做会提醒你注意网络攻击中常见的异常模式。
- 同样,在分配用户角色时,请遵循最小权限原则。
- 定期进行数据库审核。审计跟踪越久,就越安全。
- 加密备份数据。勒索软件攻击也开始感染备份。
- 考虑聘请白帽子黑客,获取局外人的观点,并探索数据库中的弱点。
- 在接受来自他们的任何通信之前,始终确定一个人的身份。问你自己:
- 我认识这个人吗?
- 我是否必须单击链接或打开该附件?
- 该人的姓名和电子邮件是否与我的联系人列表中的内容相同?
- 我期待收到他们的电子邮件吗?
11.随时了解安全领域的最新动态。
数字安全是一个不断变化的目标。由于每个企业都有自己的优势和劣势,因此最好每个企业的系统和政策都以它们为基础。