资讯专栏INFORMATION COLUMN

为你的mongodb砌堵墙吧,防止被攻击和勒索

Meathill / 3104人阅读

摘要:起因年月,当大家都在为的逝去写总结,并为年的到来做计划的时候,一波黑客发动了一轮攻击,攻击的对象瞄准了数据库。他们删除了所有数据库数据,并留下一个勒索数据库。不幸的是,我也成为这幸运的一员。谨记,安全,安全,安全。

起因

2017年1月,当大家都在为16的逝去写总结,并为17年的到来做计划的时候,一波黑客发动了一轮攻击,攻击的对象瞄准了mongodb数据库。他们删除了所有数据库数据,并留下一个勒索数据库。不幸的是,我也成为这“幸运”的一员。
当收到用户反馈说,无法登陆网站时,我还在奇怪。当我连上线上服务器时,看到了这个:
图片描述

线上的数据库“food”已经被清空,大小为:0.000GB。而且,多了一个数据库“PLEASE_READ”,查看里面的数据,真是一个大大的惊喜。

{
    "_id" : ObjectId("58702744f933f563e815c44f"),
    "Info" : "Your DB is Backed up at our servers, to restore send 0.1 BTC to the Bitcoin Address then send an email with your server ip",
    "Bitcoin Address" : "1J5ADzFv1gx3fsUPUY1AWktuJ6DF9P6hiF",
    "Email" : "kraken0@india.com"
}

数据被删,没有做过备份,然后被勒索0.1BTC,有大神说黑客也没有证据说明他对你的数据库做了备份,且我也没有BTC啊。
不过幸好这只是我自己玩玩的一个项目,刚上线不久,数据也不多,之前备份过一点数据,将该数据恢复了。

防范措施

在查到勒索数据时,立马查看了数据库log文件:

可以看到,黑客也没有使用特别高深的技术,就像怎么把大象放到冰箱里一样,只用了三步:

直连数据库

删除数据(至于有没有备份数据,就不知道了)

留下勒索信息

多么的简单粗暴。

黑客能够直接访问数据,也是怪我没有关闭外网访问权限,尴尬!
还有就是,这是自己直接在官网下载安装,没有安装发行版,而默认安装的mongodb是没有安全设置的

记住这个教训,立马采取一些措施: 关闭万网访问权限

关闭外网访问权限,也就是限定只能是内网访问。
在mongodb.conf中配置:

bind_ip 127.0.0.1
修改默认端口

mongodb默认的端口是27017,修改端口:

port 27038
访问用户授权
在admin 数据库中创建用户,如 supper 密码为 supWDxsf67%H(此处均为举例说明,请勿使用此账号密码)
步骤一:在未开启认证的环境下,登录到数据库
[mongodb@rac3 bin]$ ./mongo 127.0.0.1:27028 (此处修改了默认端口)
MongoDB shell version: 2.0.1
connecting to: 127.0.0.1:27028/test
步骤二:切换到admin数据库
> use admin
switched to db admin
>
步骤三:创建管理员账号
> db.addUser("supper", "supWDxsf67%H")  
或
>db.createUser({user:"supper",pwd:"supWDxsf67%H",roles:["root"]})
{ "n" : 0, "connectionId" : 4, "err" : null, "ok" : 1 }
{
        "user" : "supper",
        "readOnly" : false,
        "pwd" : "51a481f72b8b8218df9fee50b3737c44",
        "_id" : ObjectId("4f2bc0d357a309043c6947a4")
}
新增的用户在system.users中
> db.getCollectionNames()
[ "system.indexes", "system.users", "system.version" ]
说明:
1)MongoDB从V3版本开始取消使用addUser方法,采用db.createUser方法创建用户;
2)账号不要设置为常见账号,密码需要满足一定的复杂度,至少8位以上,包括大小写字母、数字、特殊字符混合体,不要使用生日、姓名、身份证编号等常见密码。  
步骤四:验证用户是否创建成功
> db.auth("supper","supWDxsf67%H")
1
> exit
bye
步骤五:杀掉进程,重启mongoDB服务
./mongod --dbpath=/path/mongodb --bind_ip=192.168.0.1 --port=27028 --fork=true logpath=/path/mongod.log &
经常备份你的数据库

对数据进行本地异地备份,好的备份策略是保证数据安全的最后一根救命稻草。
推荐策略:可靠的本地备份+远程备份存储方案

MongoDB备份方式(API参考):

>mongodump -h dbhost -d dbname -o dbdirectory
-h:
MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017
-d:
需要备份的数据库实例,例如:test
-o:
备份的数据存放位置,例如:c:datadump,该目录需要提前建立,在备份完成后,系统自动在dump目录下建立一个test目录,这个目录里面存放该数据库实例的备份数据。

MongoDB数据恢复方式(API参考):

mongodb使用 mongorestore 命令来恢复备份的数据。
语法
mongorestore命令脚本语法如下:
>mongorestore -h dbhost -d dbname --directoryperdb dbdirectory
-h:
MongoDB所在服务器地址
-d:
需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2
--directoryperdb:
备份数据所在位置,例如:c:datadump	est,这里为什么要多加一个test,而不是备份时候的dump。
--drop:
恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用哦!

备份策略

全量备份:可以最快的时间快速恢复所有数据,缺点是备份成本大,时间长;

全量备份+增量备份:可以较快的恢复所有数据,缺点是恢复时间长,如果增量数据有问题,无法恢复所有数据;

搭建从库,直接切换到从库,前提是从库的数据安全可靠。

更多安全措施参考

后记

通过这次的教训,更加深刻认识到数据库安全的重要性,在以后的工作中一定要更加注重服务器和数据库的安全,做好安全措施。

谨记,安全,安全,安全。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/18925.html

相关文章

  • 你的mongodb砌堵墙吧防止攻击勒索

    摘要:起因年月,当大家都在为的逝去写总结,并为年的到来做计划的时候,一波黑客发动了一轮攻击,攻击的对象瞄准了数据库。他们删除了所有数据库数据,并留下一个勒索数据库。不幸的是,我也成为这幸运的一员。谨记,安全,安全,安全。 起因 2017年1月,当大家都在为16的逝去写总结,并为17年的到来做计划的时候,一波黑客发动了一轮攻击,攻击的对象瞄准了mongodb数据库。他们删除了所有数据库数据,并...

    calx 评论0 收藏0
  • 食品农业组织难逃网络攻击!美国农场因勒索软件攻击损失900万美元

    摘要:表示受勒索软件侵害的食品和农业企业因支付赎金生产力损失和补救成本而遭受重大经济损失。公司也可能会丢失专有信息和个人身份信息,并可能因勒索软件攻击而遭受声誉损失。年月,针对美国一家农场的勒索软件攻击致其运营暂时关闭,造成约万美元的损失。 .markdown-body{word-break:break-word;line-height:1.75;font-weight:400;font-siz...

    Jensen 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<