遭遇MongoDB勒索

最近测试环境表现得不正常,MongoDB的数据展现不出来。
查了日志,发现有这么几条:

2017-02-08T23:28:32.384+0000 I COMMAND [conn773] dropDatabase PLEASE_READ_ME starting
2017-02-08T23:28:32.388+0000 I COMMAND [conn773] dropDatabase PLEASE_READ_ME finished
2017-02-08T23:28:34.581+0000 I COMMAND [conn773] dropDatabase iwesee starting
2017-02-08T23:28:34.601+0000 I COMMAND [conn773] dropDatabase iwesee finished

我的代码中不可能有dropDatabase的操作,也没这么手动操作过。

既然PLEASE_READ_ME,那我去就读。
在数据库中发现了PLEASE_READ_ME库,库下有PLEASE_READ_ME集合,集合中有这么个文档:

{ 
    "_id" : ObjectId("58a06f3a6d3d693e86ae59da"), 
    "info" : "Don't panic. Your DB is in safety and backed up (check logs). To restore send 0.05 BTC and email with your server ip or domain name. Each 48 hours we erase all data.", 
    "amount" : "0.05 BTC", 
    "data_we_have" : {
        "DB_H4CK3D" : [
            "URG3NT_W4RN1NG"
        ], 
        "iwesee" : [
            "ticket.subject.movie.nowplaying", 
            "ticket.subject.movie.later", 
            "ticket.subject.photo", 
            "ticket.subject"
        ]
    }, 
    "Bitcoin Address" : "16bm9fMWdmGCmhXDm3QqMgzwAFwPzLpGaR", 
    "email" : "kraken8888@sigaint.org"
}

日志中还有不少国外的ip连接记录。

于是确认自己遇上了传说中的数据库勒索者了。

0.05BTC我是没有。数据库也不过是测试数据库,删除了还能自动重建。当初为了方便访问,才绑定公网地址并没设密码。于是重建mongo容器,改为绑定内网地址,并趁这个机会,升级到3.4。以后访问,也只好加SSH通道。

mongodb用户和权限管理

mongodb官方文档已经对用户和权限管理有详细的描述,本文尝试以另一角度来对其做出说明。
由于没在集群上做过测试,集群部分就不写了。

启用用户验证:
mongod添加–auth启动参数
(或) 配置文件中配置 security.authorization: enabled

角色:
一个用户可以有多个角色
read: 读
readWrite: 读写
userAdmin: 用户管理
dbAdmin: 数据库管理
dbOwner: 读写、用户管理、数据库管理

认证源:
每个数据库都可以做为认证源。不同认证源创建的用户可以同名。用户内部的名称为: “$认证源.$用户名”。
认证源内的用户可以拥有针对对其它数据库的角色。
mongo shell中,以当前使用的数据库作为认证源。
通过连接字符串连接时,可能需要通过查询参数指定认证源。

admin数据库:
当前示例的所有用户都保存在admin数据库的system.users集合内。
admin的用户可拥有四个对实例内所有数据库都有效的特殊权限:
readAnyDatabase
readWriteAnyDatabase
userAdminAnyDatabase
userAdminAnyDatabase

超级用户:
一个拥有admin的用户管理角色的用户即为超级用户。超级用户可以为自身或其它用户赋予任何角色。

本地例外:
如果实例开启了用户验证,却还没创建管理角色用户,可以通过本地例外机制创建一个。
通过localhost连接到实例,不过验证,在admin数据库中,创建一个管理角色用户。这个新创建的用户,应当是一个超级用户。
一种更理想的方式:关闭用户认证重启实例,想干吗干吗……

参考:
Enable Client Access Control
Users
Built-In Roles
User Management Methods