MongoDB安全事件的防范与反思
此文已由作者温正湖授权网易云社区发布。
欢迎访问网易云社区,了解更多网易技术产品运营经验。
近段时间来,全球范围内数以万计的MongoDB实例被攻击,作为旨在为用户提供最优MongoDB云服务的网易蜂巢MongoDB团队在第一时间跟进了相关报道,虽然蜂巢MongoDB服务从设计初就将数据的安全性列为第一位,确保用户数据安全,但本着高度负责的态度我们对MongoDB服务又进行了安全自检,显然,结果也没让大家失望。这次事件从技术层面看并没有什么高深之处,应对措施也非常方便,下面结合蜂巢MongoDB进行介绍。
首先,不要把MongoDB实例直接暴露在公网下,这是原则问题。可以说没有任何理由将您的数据存储服务部署在公网环境,蜂巢用户的MongoDB实例都部署在私有网络中,跟公网相隔离。通过这个措施,可以抵挡掉绝大部分伤害。进一步,MongoDB实例所在的私网是用户专用的,也就是说,该私网对蜂巢中的其他用户也是隔离的,这又消除了被同一云平台下其他用户攻击的可能。
其次,为MongoDB实例开启认证并设置访问账号,这也是最基本的。启动认证后,访问者若不指定正确的账号和密码就无法正常访问MongoDB实例。密码应该设置成字母、数字和特殊符号的组合,可以极大降低被破解的难度。显然,包括蜂巢MongoDB在内的主流MongoDB云服务都开启了认证。
可以说,做了上述几点,基本上可以保证您的MongoDB数据是安全的。但还可以做得更好。
做好账号权限控制。MongoDB引入了非常细粒度的基于角色的权限控制机制(RBAC),实例拥有者可以为不同的MongoDB使用者提供适当权限等级的账号,比如仅能读/写某个集合、数据库;为MongoDB管理员提供 dbAdmin/userAdmin等权限的账号,可参考官方文档https://docs.mongodb.com/manual/core/authorization/,该文档对权限管理进行了详细地介绍。这样,即使某个账号泄露或被攻破,也可以最大限度减少损失。蜂巢MongoDB服务为用户提供readWriteAnyDatabase权限的账号,用户仅能通过云控制台来修改密码。避免账号泄露密码被篡改。后续,我们还将为用户提供增强版的MongoDB数据库和账号管理功能,敬请期待!
将MongoDB端口设置为非默认端口。大家都知道27017端口是MongoDB的,3306是端口MySQL的,暴露在公网的MongoDB实例,如果使用默认端口,别有用心的他们telnet下就连上了。当然了,你选择其他端口无法从根本上解决问题,但至少加了层防护,所以也应该考虑。在网易蜂巢云平台,用户在创建蜂巢MongoDB实例时可以指定端口。
在网易蜂巢(云计算基础服务),除了以上防护外,我们还提供了平台级的安全保证,网易内部有专门的安全部门负责扫描和识别安全隐患,一旦发现既会通知相应的产品负责人第一时间解决问题,排除隐患。
如果因为上述防护没有做到位等原因,您的MongoDB实例还是被攻破了,数据被删或被勒索,那么至少应该有备份可以用来恢复数据。所以平时做好数据备份是非常重要的,不仅仅在防“盗”(黑客)时有用,防“火”(软硬件故障)时也很有用,同时也可以用来防止数据被误删。蜂巢MongoDB提供手动备份功能,用户可以随时为您的实例进行备份,比如在load完一批重要数据后;还提供了自动备份能力,周期性地将您的数据备份到网易对象存储服务NOS上,免费的哦!在需要进行数据恢复时,用户可选择对应时间点的备份,将数据恢复到一个新的实例上。
到此,本文可以结束了。但我一直有个疑问未解:为什么会有那么多裸奔的MongoDB实例?我认真阅读了该事件被报道后的几乎每篇文章,但目前还没有分析这些实例的具体情况,这些实例创建者到底是些什么人,是不是“傻子太多,骗子不够用了”?下面谈谈我的看法:
裸奔的MongoDB很多是用于学习的。MongoDB目前已经在全球数据库排老四了,肯定有一大波App开发者、数据库运维、在校学生和其他对MongoDB感兴趣的朋友们在学习MongoDB,那么在公有云平台上搭建个测试实例用于学习这种事情很好理解。什么,开启认证设置密码?一是或许还不会,二是估计也是嫌麻烦,反正裸奔也挺时尚。
裸奔的MongoDB很多是用于测试的。这么火的MongoDB,公司要上新业务做数据库选型时,怎么也得纳入候选列表,那就得搭个测试环境,调研试用一番,再测测功能。于是,也会产生一堆实例,或许数据量还挺大的。
如果上面两种情况占了裸奔实例大部分,那么不是坏事,我们应该以积极的心态来看待。当然,可能还有很多的确是跑着线上业务的。对于这部分实例,可能又可以分为两种:
一是,程序开发者搭建的。因为MongoDB对移动App开发者等程序员来说比较友好,使用JSON、模式自由、故障移动处理,所以很省事、上手很快,某些项目为了赶进度,或为了控制成本,团队中没有专门的数据库运维,直接让App开发搭个用于存储后端数据的MongoDB实例,于是,难免就出现在公网裸奔的MongoDB实例。对于这种情况,真不能怪App开发,人家本来就不是干这块的。MongoDB能够大大提高项目的开发效率,确实很好用,但团队中如果没有MongoDB运维能人,劝项目的负责人还是将MongoDB部署在专业的MongoDB云服务平台上或请MongoDB官方技术团队协助吧,但相比应该前一种更实惠,尤其是网易蜂巢MongoDB云服务。
二是,确实是团队专职的运维人员负责搭建的。对于这类,只能说:“把数据库暴露在公网实在是心太大…”。暴露在公网而且不设密码,这行为绝对是公害啊,被坑的项目负责人应该把他们一个个找出来判刑,并把名单全球公布,永久封杀。然后把MongoDB实例迁到蜂巢上。
最后总结下,对于数据存储这类安全性要求极高的服务,应该把部署和运维交给专业的团队,不能用“临时工”。欢迎大家使用网易蜂巢(云计算基础服务)MongoDB服务。
网易云免费体验馆,0成本体验20+款云产品!
更多网易技术、产品、运营经验分享请点击。
相关文章:
【推荐】 分布式存储系统Kudu与HBase的简要分析与对比
【推荐】 从疑似华住集团4.93亿开房信息泄露 看个人如何预防信息泄露
MongoDB安全事件的防范与反思的更多相关文章
- 关于MongoDB安全事件的一些思考
刚刚过去的这个周末,各位大数据和数据库从业者想必是被MongoDB的"安全事件"给刷屏了,MongoDB作为当前NoSQL在全球的领军人物,遭到这么大规模的黑客攻击,这也再次让我们 ...
- 2017年开年的第一次比较大的安全事件: MongoDB “赎金事件”,如何看待互联网安全问题
今天上午(2017年1月7日),我的微信群中同时出现了两个MongoDB被黑掉要赎金的情况,于是在调查过程中,发现了这个事件.这个事件应该是2017年开年的第一次比较大的安全事件吧,发现国内居然没有什 ...
- 安全防范:nginx下git引发的隐私泄露问题
安全防范:nginx下git引发的隐私泄露问题 1 安全事件 最近阿里云服务器后台管理系统中收到一条安全提示消息,系统配置信息泄露: http://my.domain.com/.git/confi ...
- MongoDB数据库未授权访问漏洞及加固
1.漏洞危害 开启MongoDB服务时不添加任何参数时,默认是没有权限验证的,登录的用户可以通过默认端口无需密码对数据库任意操作(增删改高危动作)而且可以远程访问数据库. 2.漏洞成因 在刚安装完毕的 ...
- 成功熬了四年还没死?一个IT屌丝创业者的深刻反思
三个IT屌丝创业的故事 从前有三个屌丝,聚在一起做网络.提供免费的网络服务,砸锅卖铁,通宵达旦,除了卖肾,啥都做了.3年后终于做到了五百万用户.对于年轻人来说,能把五百万人玩弄于鼓掌之间,已经是很牛逼 ...
- HBase、Redis、MongoDB、Couchbase、LevelDB主流 NoSQL 数据库的对比
最近小组准备启动一个 node 开源项目,从前端亲和力.大数据下的IO性能.可扩展性几点入手挑选了 NoSql 数据库,但具体使用哪一款产品还需要做一次选型. 我们最终把选项范围缩窄在 HBase.R ...
- SQL注入攻击的种类和防范手段
观察近来的一些安全事件及其后果,安全专家们已经得到一个结论,这些威胁主要是通过SQL注入造成的.虽然前面有许多文章讨论了SQL注入,但今天所讨论的内容也许可帮助你检查自己的服务器,并采取相应防范措施. ...
- 每天200亿次查询 – MongoDB在奇虎360【转】
100多个应用,1,500多个实例,每天200亿次查询 奇虎是中国最大的安卓移动发布平台.奇虎也是中国最顶尖的病毒软件防护公司,同时为网络以及移动平台提供产品.自从2011年成为MongoDB的用户之 ...
- springboot(十一):Spring boot中mongodb的使用
mongodb是最早热门非关系数据库的之一,使用也比较普遍,一般会用做离线数据分析来使用,放到内网的居多.由于很多公司使用了云服务,服务器默认都开放了外网地址,导致前一阵子大批 MongoDB 因配置 ...
随机推荐
- 设置select的默认选项
2014-01-07 09:54:34| 通过后台传出的值进行选择默认项的设置 <select name="user_id" id="user_id" ...
- SVN 学习笔记-高级操作
所谓高级操作,只是曲高和寡,其实都不怎么用的.但是关键时候,可能会很有用. 这个高级只是针对基本操作而言.有些操作可能也是比较基本的. 清除锁 有时候我们在操作的时候,可能系统崩溃了,或者SVN非正常 ...
- Hive安装中遇到过的坑
实现说明每一个用户的环境都有细微的不一致,所以这里只是个人经过这些坑的处理,但是不意味着所有处理都是这样的操作,仅作为参考. 第一个坑 数据库安装,数据库最好装在Linux上,一直出了很多错,这里有一 ...
- jq自定义裁剪,代码超级简单,易修改
1.自定义宽高效果 1.html 代码 index.html <!DOCTYPE html> <html lang="en"> <head> ...
- SQLAlchemy的group_by和order_by的区别
1.官网解释: group_by(*criterion) apply one or more GROUP BY criterion to the query and return the newly ...
- GPIO简介
GPIO(General Purpose I/O Ports)意思为通用输入/输出端口,通俗地说,就是一些引脚,可以通过它们输出高低电平或者通过它们读入引脚的状态-是高电平或是低电平. GPIO口一是 ...
- Angular结构简单介绍
在当前项目目录下,使用Angular-CLI生成一个组件:heroes ng generate component heroes 主界面(也就是一个主模块+多个单模块,例如我们创建的heroes(单模 ...
- Windows和linux双系统——改动默认启动顺序
电脑上装了Windows 7和Ubantu双系统,因为Linux系统用的次数比較少而且还是默认的启动项对此非常不能容忍,因此得改动Windows为默认的启动项. 因为电脑上的系统引导程序是GRUB,因 ...
- C#使用SharpZipLib压缩解压文件
#region 加压解压方法 /// <summary> /// 功能:压缩文件(暂时只压缩文件夹下一级目录中的文件,文件夹及其子级被忽略) /// </summary> // ...
- 全栈JavaScript之路(十六)HTML5 HTMLDocument 类型的变化
HTML5 扩展了 HTMLDocument, 添加了新的功能. 1.document.readState = 'loading' || 'complete' //支持readyState 属性的浏 ...