如果启用了授权,为什么对所有远程IP开放MongoDB会有危险?

时间:2018-08-30 17:14:58

标签: mongodb security

默认情况下,MongoDB仅侦听来自127.0.0.1(和端口27017)的流量。我是唯一可以将流量发送到该IP地址的人,因此,这可以防止随机的互联网用户弄乱我的数据库并窃取数据。凉。但是随后,我通过创建管理员用户来启用授权:

mongo
use admin
db.createUser(
  {
    user: "ADMINUSERNAME",
    pwd: "ADMINPASSWORD",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)
exit

,然后在security.authorization中将/etc/mongod.conf设置为“启用”。

现在,如果我将net.bindIp中的/etc/mongod.conf设置为127.0.0.1,<serveripaddress>,并用ufw allow 27017打开端口27017,那么攻击者可以使用哪种方法(暴力用户/密码的东西)闯入我的数据库?

是否建议仅将IP白名单作为一个额外的安全保护层,还是在这里缺少我所需要的?我能想到的优点:

  1. 如果在MongoDB中发现了漏洞利用,您仍然还有一层防御层。
  2. 如果您的代码中有错误,或弄乱了某些内容(例如,不小心添加了一个具有弱密码的用户),那么您将获得额外的一层。
  3. 可以防止暴力破解用户/密码攻击-但是假设我的密码是50个随机ASCII字符长,那将不是问题,对吧?
  4. 坏演员无法直接DDOS /直接将mongodb服务器注入洪水-但这很容易以我认为的其他方式解决(fail2ban之类)。

所以#1和#2似乎是唯一真正的问题-我绝对可以看到那里的危险,但是我还有其他什么吗?


注意:我认为这个问题不适合security stackexchange网站,因为它是一个非常简单的程序特定问题。

编辑:当我说“授权”时,我本来是在说“身份验证”。

1 个答案:

答案 0 :(得分:2)

我想了很久才在这里回答这个问题或将其标记为题外,但是由于“ DevOps”这些天似乎无处不在,因此在更易于访问时可以防止严重的破坏。

  

免责声明:这里有关于一般主题以及与之相关的整个工程师行业的书籍。在此,仅给出简要概述和一些提示。此外,某些主题已大大简化。 不要完全依赖此处提供的信息。

根据最佳实践的假设:攻击者对您的系统(网络,软件,操作系统等)的了解至少为

因此,让我们回顾一下(部分)一般风险。

除非您监视失败的登录尝试并在特定客户端几次尝试失败后设置自动操作(fail2ban是最简单的示例),否则可能会强行使用您的帐户和密码。

此外,除非您使用TLS,否则您的连接容易被窃听。成功后,攻击者将知道发送到服务器的所有凭据。

使用例如ssh服务器的漏洞,攻击者可能会劫持您的计算机。对于每种公开服务,此风险都会增加。到目前为止,这种攻击是最危险的,因为您的数据将被破坏 ,攻击者可能会使用您的系统来做Very Bad Things™。以您的名义,甚至在您的合法帐户的某些司法管辖区中。

将IP列入白名单肯定有帮助,但是坚定的攻击者可能会通过IP欺骗来解决此问题。而且您必须假设攻击者知道有效的源IP和目标IP。此外,当白名单中的一个IP被(部分)劫持时,很可能会从那里发起攻击。

现在有三种处理这些风险的一般方法:

  • 缓解风险,例如正确的补丁程序管理和正确的防火墙设置。
  • 入侵防御,例如fail2ban
  • 入侵检测

后者值得解释。最好的做法是假设早晚对有关系统发起成功的攻击。系统管理员必须能够检测到入侵,才能采取对策。但是,一旦攻击者获得root特权,所有对策都可以撤消。因此,当务之急是,攻击者只能在攻击的初始阶段获得非特权访问,以便您可以检测其行为以进行特权升级。相反,这意味着您必须绝对确保攻击者在攻击的初始阶段无法获得root特权(这是为什么任何公开服务都不应以root身份运行的众多原因之一)。

假设您不控制网络,则必须诉诸基于主机的入侵检测或简称HIDS。 HIDS又属于两类:基于行为的HIDS和基于状态的HIDS。 OSSEC属于后者,(相对)易于设置和维护,同时提供了广泛的功能。

在不同的级别上,将数据库服务公开到公共Internet几乎总是可以肯定地表明系统设计有问题。除非您特别想提供数据库服务,否则我没有理由考虑这样做。

如果只想公开数据:请为其编写REST- / SOAP- /任何API。如果由于某些奇怪的原因只能通过公共Internet访问您的数据库服务器,请使用VPN或stunnel

提示:根据您创建的应用程序或您所居住的司法管辖区,将数据库服务公开到公共Internet可能会违反规则,规定甚至法律

tl; dr:如果需要询问,您可能不应该这样做。