鉴于 10gen 公司改名叫 MongoDB 了,这篇文章里我们统一称为 MongoDB 公司。上回说到 MongoDB 公司的发展策略是尽善尽美地提供良好的使用体验,而对于产品功能本身,则是哪怕不成熟也先推出来再说。这种策略的好处是让这个数据库很快地流行开来,坏处是用户用久了各种问题层出不穷,苦不堪言,用户甚至跳出来公开说“不要用 MongoDB”。

MongoDB 作为一个不成熟的产品,在 2016 年的时候终于曝出了一个非常严重的事件:MongoDB 的安全门事件。任何一个国家的任何一个计算机产品,如果出现了安全相关的事件,对产品的影响都可能是致命的。

这个事件是安全界大牛维克托 · 格弗斯(Victor Gevers)在 2016 年底发现的,并于 2017 年初开始广为人知。做这个事情的黑客组织(HaRak1r1)把 MongoDB 的数据给删除了,然后留下一个叫作 WARNING 的数据库,里面的主要内容是说:给我们送 0.2 比特币到某个收费的地址,然后给我们发邮件(harak1r1@sigaint.org)告诉我们你的 IP 地址,这样你就能够把丢失的数据拿回来。

大概是这个事情被到处报道,闹得沸沸扬扬的,而这个黑客组织又怕暴露在聚光灯下,在两天紧锣密鼓地攻击了大概 8500 个不同的 MongoDB 以后,这个黑客组织收手了。

然而架不住“撑死胆大的,饿死胆小的”,黑客后浪推前浪,前浪虽然死在了沙滩上,后浪仍接踵而来,own3d 马上就开始继续搞事,而且收费涨到了半个比特币,一下涨了好几倍。这之后,阿猫阿狗的黑客组织鱼龙混杂地展开攻击,开始删除各种 MongoDB 的数据。事情到这个地步,问题已经扩大化了。

那么,到底是什么导致了这个问题呢?为什么有那么多人的 MongoDB 在“裸奔”呢?这个问题非常有意思,而国外早有好事者在研究。

简单来说,MongoDB 从一开始就不是一个安全的系统。MongoDB 的早期版本一直都默认侦听 0.0.0.0 这个外网地址,但如果有基本的安全常识,都应该知道默认配置要放到内网地址 127.0.0.0。

这个问题在 2011 年 11 月就有用户汇报给了 MongoDB,有兴趣的可以查 Jira 上的 Server-4216。很有意思的是,在这个汇报的问题中,MongoDB 公司 CTO 在 2012 年还回复说,如果我们修了这个 BUG,就会影响到以前的安装的行为。如此严重的 BUG 在 MongoDB 中,又是什么时候修复的呢?2014 年。

近三年的时间里,这个 BUG 的优先级居然只有 P2 级别。一般软件公司遇到这种安全问题,给的等级多半都是 P0 级别。当我亲自去查看这个 BUG 的详情时,一种恐惧感油然而生。MongoDB 的人,难道基本的安全常识都没有吗?

做个对比来看,传统的数据库,不管是商用的 Oracle、SQL Server,还是开源的 PostgreSQL、MySQL,默认的设置都有用户名和密码,都会监听在内网上。我们不能说这就特别安全,但起码默认的设置还是合情合理的。MongoDB 倒好,默认的设置是在外网上“裸奔”。我也不知道这个事情为什么长久未被解决。

根据不完全统计,这次全球暴露在黑客眼皮子底下,没有任何安全防范措施的数据近 600 TB。当然,这个数字还可能更大。这件事让我们看到了,一个产品如果做得非常好用,但是该花力气的地方却没花,可能造成的破坏力到底有多大。

MongoDB 的这次安全门事件,也引发了一些人一直以来就有的顾虑。在印度,政府对 MongoDB 一直就持怀疑态度,觉得这个软件不安全,其主要理由是 MongoDB 的投资机构里面有一家叫作 In-Q-Tel 的风险投资公司。这家公司在创投圈里很有名,可能不被普通群众熟知,但是其背后的老板,那可是无人不知无人不晓的 CIA。

一家接受了 CIA 这个美国情报机构作为老板的风险投资公司,它开发的软件到底安全性有多高,是不是有后门,有没有搞鬼,基本上是件说不清楚的问题。这次大规模的数据泄露“裸奔”事件,和产品可能既有的漏洞是不是有关系,更是谁也说不清楚的事情了。

可以说,在我见过的数据库产品中,这是第一个犯下如此常识性数据安全错误的。那么,一家企业会想让自己的数据“裸奔”于互联网,被黑客删除问你要比特币吗?如果你不想面临这样的境况,那就得仔细斟酌一下要不要使用 MongoDB 了。

当然,MongoDB 的新版里这个问题早就修复了。只是很多人,尤其是政府部门,对于这个接了 CIA 投资的公司,始终都保持了一些警惕的态度。我并没有看到中国对这家公司和这个产品的担心,但是印度已经有了这样的担心。这种担心是杞人忧天,还是确有必要呢?

2017 年下半年,震撼整个 IT 圈的事情莫过于 MongoDB 开始准备材料要上市了。具体上市的时间可能不是今年底,就是明年初。MongoDB 这一路走来,终于走向上市的道路,这的确是一件可喜可贺的事。

小道消息传来,有人采访 MongoDB 的领导,领导当然是一副天机不可泄露的样子。今年 9 月份在慕尼黑参加数据库领域的顶级会议 VLDB 时,我还和 MongoDB 的人聊天,问他们对公司即将上市是怎么看的。

对方的第一反应当然是环顾左右而言它,不想讨论这个话题。于是我说,要不我们就假设要上市吧,那么上市以后对你们有什么改变呢?当然,改变最大的就有辛辛苦苦那么久,终于要赚到钱了。

在北美市场上创业公司不计其数,能够最后走到上市的却百不存一。顺利地上市,无疑是对 MongoDB 这个产品的最大肯定。投资人终于有了回报,员工和创始人终于可以从此财务自由、衣食无忧了。上市,对于很多人来说是人生的新起点;对很多公司来说,也是发展的里程碑。

这条上市路,不知道 MongoDB 会怎样走下去,市场上对于 MongoDB 的热情毕竟没有当初那样热烈了。然而即使热度降低以后,MongoDB 依然是全球市场上占有率最高的数据库之一。MongoDB“容易上手”的特性,决定了它在初创公司里占据特殊的地位,更何况很多公司还拿它来跑更重要的非初创产品呢。

但是我们也应该承认,即使到今天,MongoDB 刨去“易用性”,在很多方面仍然存在很多这样那样的问题。MongoDB 公司赚钱的途径也有一些,但是离盈利却还比较遥远。虽然大家都知道创业公司一般都要烧钱很多年。

MongoDB 一路走来并即将上市,这也是一个成功的故事了。而从 10gen 发展至今,它在开发出 MongoDB 这个产品之后所采取的一系列开发和商业运作措施,和很多同时代、同类型的公司相比有着鲜明的特点。2017 年初的这次大规模安全事件,则是一个非常值得你我思考的严肃事件。

关于 MongoDB 的故事讲完了,MongoDB 上市的消息也已被证实。但不知道你又会如何看待 MongoDB 的这次安全门事件,以及 MongoDB 的投资机构里面有 CIA 作后台的 In-Q-Tel 呢?