V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zy5a59
V2EX  ›  程序员

一次 mongodb 未加密导致的惨痛教训,很痛!

  •  
  •   zy5a59 · 2020-03-30 11:07:55 +08:00 · 6405 次点击
    这是一个创建于 1703 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前做了一些开发,在阿里云上部署了服务,用的是 mongodb,因为有时候会在本地做一些数据的更新,而且我这流量太小,相当于没有,当时也有点懒,就没给 db 加权限控制,结果今天发现数据被删了,要 0.15 个比特币才给恢复。
    于是赶紧想了想有什么恢复措施,发现平时根本没做备份,突然想到之前使用过阿里云快照功能,进去一看,居然 17 年以后就开始收费了。。自然也没有自动快照生成。只能在重新录入数据了。又要花费好长时间了。。。

    pic

    网上搜了下 mongodb 数据勒索的事件,发现以前早就有了,就是利用了 mongodb 不需要身份验证来搞的。
    https://yq.aliyun.com/articles/114813

    借此机会给广大 v 友提个醒,mongodb 一定要记得加密,最好也能经常备份数据。

    顺便求问:mongodb 没有手动备份,有可以恢复数据的方法么。。。

    41 条回复    2020-03-31 22:45:21 +08:00
    AngryMagikarp
        1
    AngryMagikarp  
       2020-03-30 11:16:19 +08:00
    你的 mongodb 绑定的是公网 IP 地址吗
    zy5a59
        2
    zy5a59  
    OP
       2020-03-30 11:18:21 +08:00
    @AngryMagikarp 是。。因为在本地方便直接连数据库改些东西,就直接绑了。
    AngryMagikarp
        3
    AngryMagikarp  
       2020-03-30 11:32:03 +08:00
    @zy5a59 我自己的服务器我也都是没有密码的,不过只绑定内网 IP 。要该数据就 ssh 上去改。
    smallgoogle
        4
    smallgoogle  
       2020-03-30 11:36:53 +08:00
    淡定。我也遇到过。但是数据不重要 从新再录入一边就好了。
    type
        5
    type  
       2020-03-30 11:42:07 +08:00
    @zy5a59 将 mongodb 绑到内网 IP ;本地如果要连接数据库,使用 SSH Tunnel,就兼顾安全和方便了。
    marcTTT
        6
    marcTTT  
       2020-03-30 11:50:29 +08:00
    楼上正解,ssh 连数据库就可以,不用绑公网 ip
    spadger
        7
    spadger  
       2020-03-30 11:52:34 +08:00
    一个不加密的默认设置,害了多少人
    zy5a59
        8
    zy5a59  
    OP
       2020-03-30 11:56:55 +08:00
    lovedebug
        9
    lovedebug  
       2020-03-30 11:58:24 +08:00
    这种数据库难道不应该限制内网本地登陆吗?
    imnaive
        10
    imnaive  
       2020-03-30 12:00:21 +08:00
    可以试试 MongoDB 官方的 Atlas,需要设置信任的 IP 和管理员账号密码。
    sphawkcn
        11
    sphawkcn  
       2020-03-30 12:02:10 +08:00   ❤️ 2
    佩服,敢绑公网。
    xuanbg
        12
    xuanbg  
       2020-03-30 12:06:37 +08:00
    无论是 mysql 、redis 还是 mongo 啊 mq 啊什么的,加密码,不用默认端口,有条件就用白名单是基操啊。
    diferent
        13
    diferent  
       2020-03-30 12:39:12 +08:00
    这不不叫未加密吧.
    这个叫未认证.
    nicevar
        14
    nicevar  
       2020-03-30 12:43:00 +08:00
    隔一段时间在 v 站上就看到楼主这样犯错的,很多人还是一样,开公网,即使加密有啥用呢,有漏洞照样危险,不开公网才是最保险的,楼上的人也说了,直接用 ssh 就可以了,bitvise 这样的软件直接就能隐射到本地。
    Vegetable
        15
    Vegetable  
       2020-03-30 12:51:48 +08:00
    很常见,我还和同事分析了一波,认为就算你给了 btc 。也不可能给你恢复数据,因为他们的网络环境根本不可能允许他们下载超大数据库,而小数据库往往是没价值的。
    PHPer233
        16
    PHPer233  
       2020-03-30 12:53:41 +08:00 via Android
    黑客给你上了一课,吃一堑长一智,以后要保护好自己的东西,别有侥幸心理。
    zxfgds
        17
    zxfgds  
       2020-03-30 13:04:39 +08:00
    @type

    木错~~
    zy5a59
        18
    zy5a59  
    OP
       2020-03-30 13:59:11 +08:00
    @lovedebug
    @xuanbg
    还是之前意识不够,感觉这种小数据库没人会搞,这次真是上了一课
    zy5a59
        19
    zy5a59  
    OP
       2020-03-30 13:59:28 +08:00
    @diferent 嗯是,未认证。。
    zy5a59
        20
    zy5a59  
    OP
       2020-03-30 14:01:51 +08:00
    @nicevar 嗯嗯,重要的还是不能有侥幸心理
    hantsy
        21
    hantsy  
       2020-03-30 14:04:00 +08:00
    开发环境不要用户认证就罢了,生产环境这么来能怪谁。
    tt67wq
        22
    tt67wq  
       2020-03-30 14:04:35 +08:00
    标题不太对,者不叫加密,叫鉴权
    hyyou2010
        23
    hyyou2010  
       2020-03-30 14:10:30 +08:00
    我倾向于数据库本身就应该设计为默认需要口令。
    wmhx
        24
    wmhx  
       2020-03-30 14:15:39 +08:00
    不要用默认端口, 不要用默认端口, 不要用默认端口
    renmu
        25
    renmu  
       2020-03-30 14:47:00 +08:00 via Android
    他们都是用机器来扫的,不会在意你是大的还是小的数据库(我被黑过一次博客,然后就被我关了 2333 )
    xcstream
        26
    xcstream  
       2020-03-30 14:51:16 +08:00
    能使用 mysql 的尽量使用 mysql
    janxin
        27
    janxin  
       2020-03-30 15:15:02 +08:00
    你这是没加权限认证🤦‍♂️
    no1xsyzy
        28
    no1xsyzy  
       2020-03-30 15:43:31 +08:00
    @zy5a59 #18 大概三年前就看到这种消息了…… 而且被删的数据库查流量会发现没有大上传,上传量连十分之一的数据库都没有,所以根本没留底,只是简单帮你删了然后留段信息。

    完全自动化扫过去的,确实没有 “人” 搞你。
    Vegetable
        29
    Vegetable  
       2020-03-30 15:47:02 +08:00
    @hyyou2010 mongodb 本身设计时 bind 127.0.0.1,这样其实足够了吧,我非常反对像 MySQL 那样还要去日志找密码的设计。
    xuanbg
        30
    xuanbg  
       2020-03-30 16:21:14 +08:00
    @zy5a59 不是有目的地搞你,是被机器扫到了,自动地就搞了。所以,像你这种,只要稍微加点安全措施,能防机器就行了。
    zy5a59
        31
    zy5a59  
    OP
       2020-03-30 22:22:16 +08:00
    感谢上面各位老哥的建议,再同步一下最新的结果:
    我在 db 文件里找了半天,发现有 journal 文件,会保存每一条插入记录,还好当前数据不多,于是把 journal 文件里面的数据拿出来重新插入了一遍,避免了重新再手动录入。
    后面如果大家有类似问题,也提供一个思路
    proqj
        32
    proqj  
       2020-03-31 04:06:15 +08:00 via Android
    可以,又提醒了大伙儿
    123444a
        33
    123444a  
       2020-03-31 07:58:19 +08:00 via Android
    aws 有 security group 设置硬件防火墙的,绑公网很正常
    123444a
        34
    123444a  
       2020-03-31 07:59:29 +08:00 via Android
    加什么密,都是来源 IP 限制,难道黑客黑入到你公司的 IP 那就没辙
    123444a
        35
    123444a  
       2020-03-31 08:00:02 +08:00 via Android
    你以为加密扫描的人就破解不了么
    Kobayashi
        36
    Kobayashi  
       2020-03-31 08:29:12 +08:00 via Android
    大清亡了?
    lc7029
        37
    lc7029  
       2020-03-31 11:41:47 +08:00
    1,数据库权限控制
    2,访问来源控制
    3,MongoDB 不给公网 IP
    三选一就行
    xyjincan
        38
    xyjincan  
       2020-03-31 12:58:05 +08:00
    别开放端口啊,内部用就行了
    mostkia
        39
    mostkia  
       2020-03-31 13:33:12 +08:00
    不备份的真大丈夫。我数据库每天零点准时备份。。虽然站点基本基本没什么人来,写个计划任务那么难嘛。。
    kiddingU
        40
    kiddingU  
       2020-03-31 22:44:55 +08:00
    心大
    1 、公网 IP
    2 、默认端口
    3 、不加权限
    4 、数据不备份

    删库了,只能说买教训了
    kiddingU
        41
    kiddingU  
       2020-03-31 22:45:21 +08:00
    备份,写个脚本自动每天 dump 不就行了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1088 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 19:36 · PVG 03:36 · LAX 11:36 · JFK 14:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.