mongodb 权威指南

想象一下:辛苦了一天的工作之后,大家都准备收拾行装并回家,但是就像您要关闭时一样,这弹出来:

当您拒绝时,就会开始产生下沉的感觉。 这绝不可能发生在我身上! 然后进入现实状态-您公司的数据库已删除,并备份到另一台服务器。 欢迎来到MongoDB启示录!

这样的故事在2016年12月至2017年第一季度之间太普遍了,当时将近30,000个MongoDB数据库被黑,删除并提出了赎金请求。

尽管在大多数情况下,黑客发布数据库的要求似乎微不足道(大约500美元),但正是这种入侵对公司的声誉和市场价值造成了无法弥补的损害,使高管们无法入睡。

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

这些黑客是如何发生的,您可以采取哪些措施来降低风险? 这是减少MongoDB攻击面所需的知识。

您的数据库有问题吗? 或者您?

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

我们仍然看到MongoDB数据库违规,这在2018年的一次事件中暴露了4.45亿条记录即可证明。 黑客使用诸如ZoomEye之类的搜索引擎搜索不安全的数据库。 一个简单的查询可能在几分钟之内导致成千上万的潜在受害者。

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

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

换句话说,如果组织仅向其数据库配置文件中添加几行代码,就可以避免整个事情。 显然,用户经常会犯错。 尽管MongoDB通过创建更强大的默认设置解决了该问题,但您仍然可以采取一些步骤来确保您永远不会醒来另一个MongoDB启示录。

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

现在,您可能已经很担心了。 当涉及到安全性时,担心是一件好事! 这是分步生存指南,可用于减少下次数据库灾难的脆弱性。

认证方式

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

  • SCRAM-SHA-1:盐化挑战身份验证机制使用通过基于文本的简单用户名和密码,这些用户名和密码通过受传输层安全性(TLS)保护的通道进行传输。

  • MongoDB-CR :和SCRAM一样,MongoDB-CR根据身份验证数据库验证用户名和密码。 MongoDB-CR已从3.0版中删除,如今只有较早的迭代才使用它。

每种方法都将加密的密码发送,并且为每个新会话生成不同的哈希,因此没有人可以将其嗅出。

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

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

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

MongoDB身份验证最佳做法

首先,请务必:在生产安装中始终启用身份验证。 从3.5版开始,默认情况下启用此功能。

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

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

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

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

  • 仅在受信任的网络上运行MongoDB。 即使在受信任的网络内部,也不允许将数据库路由到公用Internet的出站路由,也不要让数据库在超出其必需的接口上运行。 这样可以防止恶意攻击者将您的数据从服务器移动到另一个异地位置(对于硬件,黑客仍然可以修改基于软件的路由器和静态路由表)。

  • 养成跟踪数据库和数据中的更改的习惯。 如果您使用的是MongoDB Enterprise,请使用其审核工具进行分析。

授权/基于角色的安全性

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

角色本质上决定了用户拥有什么权限以及他/她可以访问什么。 通过角色定义用户后,该用户将无法访问超出其范围的系统。

您可以使用--auth或安全性授权设置来启用授权。 --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加密的连接。 您还可以指定值allowSSLpreferredSSL来设置端口上使用混合TLS / SSL模式。 有关详细信息,请参见net.ssl.mode。

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

强化您的MongoDB数据库

尽管这些步骤将帮助您的数据库幸免于恶意的在线活动,但要加倍努力,将进一步增强您的防御能力。 “强化”本质上是指一种增加安全性的逐层方法,其中对数据库的每个部分都赋予了自己的安全性措施。

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

通过IP绑定加强配置

从版本3.6开始,默认情况下,MongoDB绑定到本地主机,而从版本2.6到3.4,默认情况下,仅来自正式MongoDB RPM和DEB软件包的二进制文件将绑定到本地主机。

使用防火墙和VPN进行网络强化

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

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

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

了解勒索软件攻击的原理

现在您知道了如何减少对网络的威胁,下面让我们看一下勒索软件攻击的工作方式。 尽管勒索软件攻击可能只是一小段时间而已,但它已成为一种极其复杂的业务,使企业损失了数百万美元。

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

那么,勒索软件攻击是如何工作的呢? 尽管它们的执行可能有所不同,但大多数攻击都有一些共同的元素。 这是典型勒索软件攻击的工作原理的简要概述。

步骤1:传送

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

  • 电子邮件:迄今为止最大的目标。 绝大多数勒索软件尝试均源自网络钓鱼攻击,该攻击使用带有恶意内容的看上去真实的电子邮件。

  • 基于Web的攻击:在这里可以选择下载脚本和未注册软件,跨站点脚本攻击,受感染的广告以及对社交媒体的入侵。

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

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

步骤2:感染

如果用户不经意地点击并执行了一段恶意代码,则该恶意软件(一种持续存在的高级威胁)将Swift开始对目标文件进行加密。 在某些情况下(例如MongoDB),它会完全删除它们。

向用户显示赎金记录,告诉他们向他们的地址发送一些钱(通常是比特币,因为它们无法追踪),然后通过电子邮件跟进以解锁系统。

步骤3:复原

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

无论如何,企业现在必须清除受感染的文件并使系统重新联机。 全面更新的网络和端点安全系统将对帮助他们节省时间至关重要。 各个公司的步骤各不相同,但是所有步骤都涉及对系统日志,备份副本以及之前/之后的状态进行全面分析,以找到最佳的解决方案。

结论性思想

迈克菲(McAfee)报告显示,网络犯罪的商业成本每年约为6,000亿美元,这一趋势没有停止的迹象。 网络犯罪分子正在使用更新,更强大的技术,以至于今天我们有了网络犯罪即服务的业务模型。 加密货币和诸如Tor之类的匿名浏览器的兴起仅使网络犯罪分子大胆,因为他们的活动几乎无法追踪。

不幸的事实是,任何技术都不可能完全免受攻击,因为它的人为因素总是容易受到操纵的。 即使对大多数网络犯罪的工作原理一目了然,也无法证明它们主要依靠人为错误,无知或疏忽作为作案手法。 如果用户愿意让系统访问恶意代码,那么任何安全系统都无法阻止它。

因此,拥有一个最新的安全系统是一个好的开始,而创建强大且经过深思熟虑的安全策略将最终帮助您抵御攻击并减轻系统风险。 请考虑以下步骤:

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

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

  3. 切勿使用标准的用户名,例如root,user或app,因为它们最容易猜到。

  4. 尽可能限制公共网络的访问。 仅需要与您的数据库服务器通信的IP地址才可以访问它。 强烈建议使用高质量的VPN。

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

  6. 同样,在分配用户角色时,请遵循最小特权原则。 这一点不够强调。

  7. 定期进行数据库审核。 审核记录越长,您的安全性就越高。

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

  9. 考虑雇用道德黑客来获得局外人的观点并探查您的数据库中的弱点。

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

    • 我认识这个人吗?

    • 我是否绝对必须单击链接或打开该附件?

    • 该人员的姓名和电子邮件地址与我的联系人列表中的名称和电子邮件地址相同吗?

    • 我是否希望他们发送电子邮件?

  11. 使自己保持最新状态,以了解安全领域的最新动态。

数字安全是一个不断变化的目标,从一瞬间到下一刻都是不同的。 由于每个企业都有自己的优点和缺点,所以最好每个组织的系统和策略都基于它们。

翻译自: https://opensource.com/article/19/1/mongodb-security

mongodb 权威指南

mongodb 权威指南_有关MongoDB安全性的权威指南相关推荐

  1. mongodb 搜索速度_初识 MongoDB 数据库

    初识 MongoDB 数据库 前言 Flask 基础框架在之前的三篇文章中写完了.想要学习 web 相关的同学可以自己回顾翻一下,相信看完了,你也可以写出来一个简单的小案例来炫耀一波! 说到 web ...

  2. mongodb存储数据_在MongoDB中存储分层数据

    mongodb存储数据 继续使用MongoDB进行 NoSQL之旅,我想谈一谈一个经常出现的特定用例:存储分层文档关系. MongoDB是很棒的文档数据存储,但是如果文档具有父子关系,该怎么办? 我们 ...

  3. 给服务器mongodb设置权限_认识 MongoDB

    大部分数据库都是 C/S 架构,服务端提供服务,操作时需要使用客户端. MongoDB 也是如此,需要启动服务端进程 mongod 提供服务,然后使用其自带的 mongo 命令行程序或者其它客户端与服 ...

  4. mongodb数据可视化_使用MongoDB实时可视化开放数据

    mongodb数据可视化 Using Python to connect to Taiwan Government PM2.5 open data API, and schedule to updat ...

  5. mysql mongodb b树_为何Mongodb索引用B树,而Mysql用B+树?

    引言 很久没写文章了,今天回来重操旧业. 今天讲的这个主题,是<面试官:谈谈你对mysql索引的认识>,里头提到的一个坑.mysql 也就是说,若是面试官问的是,为何Mysql中Innod ...

  6. mongodb java 学习_《 mongodb 学习 》java 基本操作

    环境 springboot 结合 monggodb 一.pom.xml org.springframework.boot spring-boot-starter-data-mongodb 配置: sp ...

  7. mongodb连接失败_深入浅出mongodb(一)

    我年轻时注意到,我每做十件事有九件不成功,于是我就十倍地去努力干下去.--萧伯纳 前言 在大数据的驱使下,我们要实现数据持久化存储,数据共享,数据集中管理数据库是不二之选,小编在这里要阐述的是 mon ...

  8. mongodb副本集_设置MongoDB副本集分为4个步骤

    mongodb副本集 介绍 在详细介绍配置MongoDB副本集之前,让我简要介绍一下它们: 副本集是Mongodb数据库提供的功能,可实现高可用性和自动故障转移. 它是一种传统的主从配置,但具有自动故 ...

  9. go mongodb排序查询_《MongoDB》day two

    Mongodb的更新方式有? db.集合名.update() 函数:用于更新已存在的文档. 语法格式:db.COLLECTION_NAME.update({查询条件},{更新内容},{更新参数(可选) ...

最新文章

  1. RequireJS学习笔记(转)
  2. 查看回调几个选项含义_C 盘总是莫名变大?更改这个文件位置至少腾出几个 G !...
  3. python打开指定文件-python打包压缩、读取指定目录下的指定类型文件
  4. Window 窗口层次关系
  5. android快速点击两次,如何通过在Android中快速单击两次按钮来防...
  6. IsWindow,findwindow
  7. spring cloud alibaba_SpringCloudAlibaba与Cloud搭配方案
  8. jprofiler安装与使用
  9. Pentium Pro架构/流水线及其优化 (2) - 指令流水线 存储子系统详解
  10. linux系统中怎么设置网络,vmware中linux怎么设置网络
  11. 多操作赋的语义判断(如 int *a和int* a)
  12. 微信小程序背景音乐的调试
  13. 2021-09-02最大矩形
  14. 外行也看得懂!了解量子计算的奇迹
  15. Oracle格式化总结
  16. 三十岁仍一事无成,一个失败工程师的自白
  17. 计算机毕业设计Java某银行OA系统某银行OA系统演示2021(源代码+数据库+系统+lw文档)
  18. 邮件中html内嵌图片,邮件内嵌html
  19. ur机器人编程-坐标系
  20. 《精益数据分析》-第二部分概括笔记

热门文章

  1. 微信跳转到支付宝App自动领取赏金红包,无需服务器和域名。
  2. ORACLE 10.2.0.4 rac for aix query gv$instance with ORA-12850
  3. thinkbook14+(thinkbook16+) 屏幕亮度忽明忽暗
  4. C++中的定时器-SetTimer
  5. Windows:SetTimer定时器编程
  6. 杭州AI开发者Meetup报名开启!
  7. 低功耗设计-isolation cell
  8. mysql中level_Mysql中的isolation level
  9. 23种设计模式(第二章创建者模式5种)
  10. 数字化器Digitizer框架