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 因配置 ...
随机推荐
- HDU 4651 (生成函数)
HDU 4651 Partition Problem : n的整数划分方案数.(n <= 100008) Solution : 参考资料: 五角数 欧拉函数 五边形数定理 整数划分 一份详细的题 ...
- MySQL性能优化的21个最佳实践 和 mysql使用索引【转载】
今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数 ...
- transient 关键字
java语言的关键字,变量修饰符,如果用transient声明一个实例变量,当对象存储时,它的值不需要维持.换句话来说就是,用transient关键字标记的成员变量不参与序列化过程. 作用 Jav ...
- Codeforces 653D Delivery Bears【二分+网络流】
题目链接: http://codeforces.com/problemset/problem/653/D 题意: x个熊拿着相同重量的物品,从1号结点沿着路走到N号结点,结点之间有边相连,保证可以从1 ...
- Spring中基于AOP的XML架构
以下内容引用自http://wiki.jikexueyuan.com/project/spring/aop-with-spring-framenwork/xml-schema-based-aop-wi ...
- easyshell 安装
EasyShell是一个可以直接在Eclipse IDE中打开shell窗口的工具,在shell中运行选中的文件,打资源管理. 百度经验:jingyan.baidu.com 工具/原料 Easy_Sh ...
- linux安装mail服务使用外部MTA发送邮件
阉割版的linux没有mail命令,也没有/etc/mail.rc文件 需要安装mail服务 yum install mailx.x86_64 几个概念:MUA.MTA.MDA 邮件用户代理(MUA, ...
- 视频录制软件&远程支持软件
视频录制软件 软件名:SCREEN2SWF 录制完成后,可以剪辑: 工程文件,需要保存为svp文件:将视频文件保存为.exe self play 文件,或者.swf flash 文件. 远程支持,远程 ...
- Codeforces Round #316 (Div. 2) C. Replacement
题意:给定一个字符串,里面有各种小写字母和' . ' ,无论是什么字母,都是一样的,假设遇到' . . ' ,就要合并成一个' .',有m个询问,每次都在字符串某个位置上将原来的字符改成题目给的字符, ...
- Python的调用程序
任务 调用系统命令ping 判断局域网内有哪些主机存活 假设你用c语言写了一个算法,需要对该算法进行测试.测试的数据集几百个.这时可以使用过GCC生成test.exe,再使用python批量调用该ex ...