暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

随便聊聊:MongoDB的安全机制

无聊程序员 2021-04-01
597

因为很懒好久没写文章,正在考虑应该写点什么的时候,有人撞枪口上来了,看到一篇MongoDB数据库又被勒索攻击了,借此机会聊聊MongoDB的各种安全机制。再说,怼人的事情我最乐此不疲了。


1 怼人篇



其实这种炒冷饭的文章近几年来反反复复好多次了,本来没有什么怼的热情,但是这位仁兄另辟蹊径,自创了一个“未授权访问漏洞”。那我们就来聊聊这个“未授权访问漏洞”到底是怎么回事。

在原文“02 漏洞成因”中描述了他所认为的“漏洞”所在。其实这个行为有一个更专业的名字叫做“localhost exception”(https://docs.mongodb.com/manual/core/security-users/#localhost-exception)。与他的理解不同的是,localhost exception成立的必要条件有三:

  • 已经启用了认证授权。

  • 数据库中没有任何用户,这点他说对了。

  • 必须从localhost访问(不然为什么叫localhost exception?)

也就是说如果这个“漏洞”要生效,黑客必须先ssh到你的主机上,到你的主机上,主机上……你管这叫漏洞?我觉得ssh到你主机上才叫漏洞。这么决定性的条件你只字不提,作为一个安全类的公众号,再严谨点如何?

别的不多说了,总结一下,目前所有勒索事件的发生都是因为没有通过security.authrization启用认证授权,没有其他原因。


2 干货篇


既然聊到了安全问题,下面就来看看MongoDB都有哪些安全机制,按需取用。


认证与授权

不用我多说大家都知道MongoDB的角色权限管理了。还有少数不知道这是什么的,黑客盯上的就是你们。不过似乎很多人不知道每个数据库用户都是可以约束可访问地址的,这是3.6新加入的一个特性。包括:

  • 限制访问来源地址:使用这个用户访问系统时必须来自这个地址;

  • 限制访问目标地址:使用这个用户访问系统时只能访问这个地址;

举个例子可能更好理解:

场景一:假设A是数据库管理员,B是服务器管理员。A手上有所有数据库的账户,怎样防止A或者B删库跑路呢?可以在创建账户时限制访问来源地址,只能从某一台服务器才能登录数据库,而服务器登录权限掌握在B手上,所以A有数据库账号,B有机器权限,谁也别想单独干坏事,除非两人都想删库跑路……

场景二:A通过B的授权登录上了数据库,A想要偷偷拿到用户数据出去卖,可以防止这样的情况吗?方案之一可以是启用审计日志,把A做过的事情都记录下来,将来有迹可查。但是我只希望审计A的行为,不希望审计应用程序的行为,所以就可以限制访问目标地址,让A只能访问启用了审计的那个节点,应用程序则访问没有审计的节点。


通讯加密

MongoDB的节点之间的通讯是可以加密的,应用与数据库之间的通讯也是可以加密的。如果你的应用跟数据库经过了公网,或者数据库节点之间经过了公网,就可以通过启用TLS来确保通讯安全。启用加密本身不难,难倒大部分人的可能是签证书的问题,为了节省篇幅我把签证书的脚本放到了Github上:https://github.com/zhangyaoxing/mongodb-scripts/blob/master/create-certificate/create-certificates.md

即便如此,作为从业人员,还是强烈建议大家应该先了解TLS是如何工作的。


客户端字段级加密

完整的字段级加密功能是企业版功能,但是社区版也可以使用大部分功能,不影响正常使用。具体使用的问题限于篇幅不可能在这里讲清楚,大致说说它是用来干什么的。字面意思上大家都能理解它到底是怎么回事。但是为什么需要字段级加密呢?很大的原因还在于隐私保护。比如DBA是有数据库权限的,但是DBA并不应该看到用户隐私信息,传统的加密方案无法解决这个问题,客户端字段级加密则可以解决。在此方案下,DBA能够查询数据,但看到的是加密的字段,没有密钥的DBA是无法解读加密信息的。另外如果大家对GDPR还有印象的话,GDPR明确要求了“被遗忘权”(right to be forgotten)。在字段级加密的前提下,如果所有隐私信息都使用一个密钥加密,那么销毁了密钥就等于“遗忘”了所有的隐私信息,这也是字段级加密的目的之一。


日志编校

企业版功能。在日志输出到文件之前对所有字段做脱敏处理,在避免日志中出现用户信息等关键数据。这在很多合规场景中是强制性规定。


落盘加密

企业版功能。对使用者透明的加密,也是很多合规场景的强制性要求。


审计

企业版功能。跟踪用户的可疑行为以便在发生问题后有迹可查。其他数据库中也有相同的概念,不多做解释。同样是很多合规场景的强制性要求。


LDAP/Kerberos集成

企业版功能。由LDAP/Kerberos管理认证授权相关功能。


3 总结


另外今天是愚人节,但是我说的都是认真的。



文章转载自无聊程序员,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论