记一次MongoDB裸奔
导言
大意失荆州,裸奔的 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 path
和 db 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
较高的安全性,可这却是非常容易忽略的点。希望大家引以为戒。
总结
- 一定不能疏忽大意,安全意识要加强。
- 一定要结果实际验证,才能下结论。不能不清楚外置条件,人云亦云。
- 不要有我的应用小,就不会被黑这种想法。批量攻击,才不会放过你。
- 定期做好数据备份,被攻击是一回事,能否恢复又是另外一回事了。
记一次MongoDB裸奔的更多相关文章
- 裸奔的智能插座:博联Broadlink SP2/SP mini的分析、破解
https://www.jianshu.com/p/028b10bc3dd1 智能设备的联动通常采用IFTTT的方式,但这种方式受限于官方软件提供的功能.想要自主地灵活控制,需要有官方SDK,或知道协 ...
- S3C6410裸奔之旅——RVDS2.2编译、仿真、调试过程 LED流水灯---转的
S3C6410裸奔之旅——RVDS2.2编译.仿真.调试过程 LED流水灯 (2012-10-13 23:56:30) 转载▼ 标签: s3c6410裸奔 ok6410 rvds2.2 rvds2.2 ...
- (转)裸奔的后果!一次ssh被篡改的入侵事件
裸奔的后果!一次ssh被篡改的入侵事件 原文:http://blog.51cto.com/phenixikki/1546669 通常服务器安全问题在规模较小的公司常常被忽略,没有负责安全的专员,尤其是 ...
- 裸奔着造房子——对政府禁止采购Win8系统的一些看法
前段时间有消息称政府招标的项目将禁止使用Win8系统,原因是Win8系统的安全架构将有利于暴露敏感信息给微软,而微软的老子是美利坚,老子想要知道什么,儿子当然不敢不从.因此Win8也被打入冷宫,微软多 ...
- 裸奔的支付X聊天,你还敢用吗?
- 语音消息 使用HTTP明文传输,没有任何加密措施,使用域名为up-mayi.django.t.taobao.com,从报文中可以看出,语音消息是以文件形式在网络中传输的,下图为一次语音的发送传输过 ...
- PJzhang:如何在裸奔的年代找到一些遮羞布
猫宁!!! 很久以前的一篇,搬过来. 我一直在“裸奔”,而且很久了,只是不太愿意承认. 想起了“皇帝的新装”,好奇何种经历和灵感让安徒生写出了如此精彩的故事. 一次百度了一个商品,不久接到了大规模电话 ...
- 跟我一起学.NetCore之WebApi接口裸奔有风险(Jwt)
前言 撸码需谨慎,裸奔有风险.经常在一些技术交流群中了解到,还有很多小伙伴的项目中Api接口没有做任何安全机制验证,直接就裸奔了,对于一些临时项目或是个人小项目还好,其余的话,建议小伙伴们酌情考虑都加 ...
- 网骗欺诈?网络裸奔?都是因为 HTTP?
先跟大家讲个故事,我初恋是在初中时谈的,我的后桌的后桌.那个时候没有手机这类的沟通工具,上课交流有三宝,脚踢屁股.笔戳后背以及传纸条,当然我只能是那个屁股和后背,还不是能让初恋踢到的后背. 但是说实话 ...
- 裸奔mysql
centos 7 下裸奔mysql # vim /etc/my.cnf在[mysqld]的段中加上一句:skip-grant-tables例如:[mysqld]datadir=/var/lib/mys ...
随机推荐
- java中传值方式的个人理解
前言 这几天在整理java基础知识方面的内容,对于值传递还不是特别理解,于是查阅了一些资料和网上相关博客,自己进行了归纳总结,最后将其整理成了一篇博客. 值传递 值传递是指在调用函数时将实际参数复制一 ...
- dmesg七种用法
dmesg 命令的使用范例 ‘dmesg’命令设备故障的诊断是非常重要的.在‘dmesg’命令的帮助下进行硬件的连接或断开连接操作时,我们可以看到硬件的检测或者断开连接的信息.‘dmesg’命令在多数 ...
- [转]Docker容器可视化监控中心搭建
[原文链接]https://www.jianshu.com/p/9e47ffaf5e31?hmsr=toutiao.io&utm_medium=toutiao.io&utm_sourc ...
- 03-13_WLST导航和定位MBean
本文重点:WLST导航和定位MBean MBean切换图 如上:红色的字体表示切换的命令.ls和cd是在当前树下切换,其他命令是在不同树之间切换. 其中: DomainMBeanServer有 ...
- echars关系图
<!DOCTYPE html> <html> <head> <meta name="viewport" content="wid ...
- ubuntu通过apt-get安装JDK8
安装python-software-properties apt-get install python-software-properties apt-get install software-pro ...
- IP Core 分类
IP(Intelligent Property)核是具有知识产权核的集成电路芯核总称,是经过反复验证过的.具有特定功能的宏模块,与芯片制造工艺无关,可以移植到不同的半导体工艺中.到了SOC阶段,IP核 ...
- python——虚拟环境之virtualenv(windows10,64位)
1 问题 当我们拥有两个甚至多个项目A.B.C......,各个项目正常运行需求的python运行环境都不相同.而默认情况下,不管哪个项目,使用的都是全局的Python环境.上述情况,造成的问题就是, ...
- 【转】ICCAVR TAB键设置
转载于: http://blog.163.com/liuyunqian@yeah/blog/static/7039584320099159545292/ 在使用ICCAVR C编译器的时候会发现TAB ...
- File类_常见的方法(获取目录中指定规则的内容)_listFiles
import java.io.File; public class ListDemo { public static void main(String[] args) { ListDemo(); } ...