导言

大意失荆州,裸奔的 MongoDB 被黑了。虽然并不是什么非常重要的数据,但也给自己敲响的一个警钟。虽然我们平时不容易接触到数据安全,但我们在开发,部署项目的时候,一定要养成良好的安全意识。

根据木桶原理,整个系统的安全性,取决于整个系统最薄弱的环节。所以,我们要尽可能多的考虑更多组成部分的安全性。

事件发现

本月初,发生了大家所熟知的 MondoDB赎金事件。当时本人也保持了一定的关注,并去 https://www.shodan.io/ 溜达了一圈,顺便连了几个裸奔的MongoDB(当然,绝未做任何更改)。

直到昨天下午,发现我应用的管理员账户登录不上了。多次检查密码,发现还是无法解决,此时有点怀疑被黑了。由于应用有新建用户功能,新建一个和管理员账户同名的账户,居然成功了。这个时候,我想多半是遭了,只等晚上回去确认了。

回到家,远程到服务器,一连接,果然遭了(可怜我那几十个代码片段 + 几个Gist),需要赎金0.1BTC。

原因分析

此时可能就要问了,都知道了裸奔不安全,为嘛还不修复?

我能说我懒么?心大么?

因为当时我部署的版本的3.2,据说3.2默认没有开启外网访问。我心大到直接未经尝试就认为这是对的。

实际这句话也没错,Linux版本的 3.x 确实是默认绑定到 127.0.0.1 上的。可TM我是运行在 Windows 上的,由于安装的时候,默认没有创建配置文件,导致一运行就绑定到所有host上了。

当上,以上都是外因!根本原因还是自己疏忽大意,安全意识薄弱。

解决(重头再来)

没有备份,直接无法恢复。

另外,0.1个BTC我是拿不出来的(我也不相信他会好心给你恢复),再加上数据也不是太重要,就直接把安全设置配置上,重头开始。

那现在是如何配置安全性的呢?

以下操作,均在未开启授权访问时执行

首先是添加用户并设置角色:

# 切换到admin库
use admin # 创建User
db.createUser({user: '<name>', pwd: '<password>', roles: [
{role: 'readWrite', db: '<dbname>'},
{role: 'dbAdmin', db: '<dbname>'}
]})

接下来就是创建一个配置文件(2.6之后,配置文件是yaml格式),内容如下:

systemLog:
destination: file
path: c:\data\log\mongod.log
storage:
dbPath: c:\data\db
net:
bindIp: 127.0.0.1
port: 27017

注意:配置文件中一定要设定 log pathdb path

注意2:如果要限制外网访问,就可以配置 net -> bindIp,另外也可以调整端口

此时如何运行呢?

mongod --config "D:\MongoDB\mongod.conf" --auth

带上 --auth 就是开启授权访问。

最后客户端访问也需要稍微修改下,只需要修改 mongoAddress 配置即可:

# MongoDB Connection String Format
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]] # 实例地址
const mongoAddress = 'mongodb://admin:Pwd0603@127.0.0.1:27017/dojo'

就这么一点简单的步骤,就能实现 MongoDB 较高的安全性,可这却是非常容易忽略的点。希望大家引以为戒。

总结

  1. 一定不能疏忽大意,安全意识要加强。
  2. 一定要结果实际验证,才能下结论。不能不清楚外置条件,人云亦云。
  3. 不要有我的应用小,就不会被黑这种想法。批量攻击,才不会放过你。
  4. 定期做好数据备份,被攻击是一回事,能否恢复又是另外一回事了。

记一次MongoDB裸奔的更多相关文章

  1. 裸奔的智能插座:博联Broadlink SP2/SP mini的分析、破解

    https://www.jianshu.com/p/028b10bc3dd1 智能设备的联动通常采用IFTTT的方式,但这种方式受限于官方软件提供的功能.想要自主地灵活控制,需要有官方SDK,或知道协 ...

  2. S3C6410裸奔之旅——RVDS2.2编译、仿真、调试过程 LED流水灯---转的

    S3C6410裸奔之旅——RVDS2.2编译.仿真.调试过程 LED流水灯 (2012-10-13 23:56:30) 转载▼ 标签: s3c6410裸奔 ok6410 rvds2.2 rvds2.2 ...

  3. (转)裸奔的后果!一次ssh被篡改的入侵事件

    裸奔的后果!一次ssh被篡改的入侵事件 原文:http://blog.51cto.com/phenixikki/1546669 通常服务器安全问题在规模较小的公司常常被忽略,没有负责安全的专员,尤其是 ...

  4. 裸奔着造房子——对政府禁止采购Win8系统的一些看法

    前段时间有消息称政府招标的项目将禁止使用Win8系统,原因是Win8系统的安全架构将有利于暴露敏感信息给微软,而微软的老子是美利坚,老子想要知道什么,儿子当然不敢不从.因此Win8也被打入冷宫,微软多 ...

  5. 裸奔的支付X聊天,你还敢用吗?

    - 语音消息 使用HTTP明文传输,没有任何加密措施,使用域名为up-mayi.django.t.taobao.com,从报文中可以看出,语音消息是以文件形式在网络中传输的,下图为一次语音的发送传输过 ...

  6. PJzhang:如何在裸奔的年代找到一些遮羞布

    猫宁!!! 很久以前的一篇,搬过来. 我一直在“裸奔”,而且很久了,只是不太愿意承认. 想起了“皇帝的新装”,好奇何种经历和灵感让安徒生写出了如此精彩的故事. 一次百度了一个商品,不久接到了大规模电话 ...

  7. 跟我一起学.NetCore之WebApi接口裸奔有风险(Jwt)

    前言 撸码需谨慎,裸奔有风险.经常在一些技术交流群中了解到,还有很多小伙伴的项目中Api接口没有做任何安全机制验证,直接就裸奔了,对于一些临时项目或是个人小项目还好,其余的话,建议小伙伴们酌情考虑都加 ...

  8. 网骗欺诈?网络裸奔?都是因为 HTTP?

    先跟大家讲个故事,我初恋是在初中时谈的,我的后桌的后桌.那个时候没有手机这类的沟通工具,上课交流有三宝,脚踢屁股.笔戳后背以及传纸条,当然我只能是那个屁股和后背,还不是能让初恋踢到的后背. 但是说实话 ...

  9. 裸奔mysql

    centos 7 下裸奔mysql # vim /etc/my.cnf在[mysqld]的段中加上一句:skip-grant-tables例如:[mysqld]datadir=/var/lib/mys ...

随机推荐

  1. 一种快速部署开发用oracle的办法

    前段时间工作中需要在不少开发环境中快速提供开发可用的oracle环境,由于一一培训并部署原生oracle人力和时间成本过高,后来使用docker版本oracle,大大方便了开发工作的快速启动,方法记录 ...

  2. [20180627]测试bbed是否支持管道命令.txt

    [20180627]测试bbed是否支持管道命令.txt --//测试bbed是否支持管道命令.txt 1.环境:SCOTT@test01p> @ ver1PORT_STRING         ...

  3. 转:更改SQLServer实例默认字符集

    需求 安装数据库时,将字符集安装成了“SQL_Latin1_General_CP1_CI_AS”,现在需要将其更改为“Chinese_PRC_CI_AS”.   方法 重新生成系统数据库 ,然后还原配 ...

  4. 添加RPMfusion仓库

    先添加epel Fedora的意识形态很是严谨,它不会自带任何非自由组件.官方仓库不会提供一些包含有非自由组件的基本软件,比如像多媒体编码.因此,安装一些第三方仓库很有必要,这些仓库会为我们提供一些基 ...

  5. 12个HTML和CSS必须知道的重点难点问题

    这12个问题,基本上就是HTML和CSS基础中的重点个难点了,也是必须要弄清楚的基本问题,其中定位的绝对定位和相对定位到底相对什么定位?这个还是容易被忽视的,浮动也是一个大坑,有很多细节.这12个知识 ...

  6. 第 16 章 C 预处理器和 C 库(qsort() 函数)

    /*---------------------------------------- qsorter.c -- 用 qsort() 排序一组数字 --------------------------- ...

  7. Dubbo+zookeeper+SpringMVC搭建最简单的分布式项目

    Dubbo 是什么 一款分布式服务框架 高性能和透明化的RPC远程服务调用方案 SOA服务治理方案 Dubbo 架构流程图 Provider:服务提供方 Consumer:服务消费者 Registry ...

  8. Spring AOP的实现研究

    1. 背景 在前文Spring IOC容器创建bean过程浅析已经介绍了Spring IOC创建初始化bean的大致过程.现在对Spring的AOP实现机制进行研究分析. 2. 名词与概念 名词 概念 ...

  9. luogu P2860 [USACO06JAN]冗余路径Redundant Paths

    题目描述 In order to get from one of the F (1 <= F <= 5,000) grazing fields (which are numbered 1- ...

  10. 原生js删除元素

    //删除id var idObject = document.getElementById('sidebar'); if (idObject != null) idObject.parentNode. ...