写点什么

Docker 严重错误导致企业数据被黑客擦除,已存在七年之久

  • 2021-06-30
  • 本文字数:2454 字

    阅读完需:约 8 分钟

Docker严重错误导致企业数据被黑客擦除,已存在七年之久

谨慎对待那些承诺让工作变得轻松的热门技术——它们通常会偷工减料,而安全性往往是其中之一。


几天前,由于 Docker 中存在多年的一个错误,导致 NewsBlur(一种基于 Web 的 RSS 阅读器)的数据库被黑客删除


在本周的一篇博客文章中,NewsBlur 的创始人 Samuel Clay 详细讲述了他的遭遇:在将 MongoDB 集群迁移到 Docker 容器过程中,一名黑客获得了 NewsBlur 数据库的访问权限,删除掉了 250GB 的原始数据,并要求他支付 0.03 BTC 的赎金。


Clay 将攻击归咎于数据库迁移期间发生的防火墙错误:“在我将 MongoDB 容器化时,Docker 帮助我在 iptables 中插入了一个允许的规则,从而向全世界开放了 MongoDB。”


而 Docker 的这个问题,早在 2014 年,就有开发者以“严重错误”反馈给了 Docker 公司,但一直没有得到解决。



NewsBlur 的 MongoDB 服务器是如何被入侵的?


上周,Clay 开始了 NewsBlur 的维护工作,他准备将公司的 PostgreSQL、MongoDB、Redis、Elasticsearch 几种数据库都迁移到 Docker 容器。在攻击发生前的几个小时里,他将应用程序的 MongoDB 集群切换到新服务器,并关闭了原始服务器,打算在新设置证明稳定可用后将其删除。


大约三个小时后,暴露的数据库似乎已被自动勒索软件脚本发现并删除。Clay 说,当他在看到手机上错误消息时,就明白这等于是收到了灾难警报。



这条错误消息中包含了关键词“drop”,用于删除数据库的 SQL 命令。


随后登录到 MongoDB 机器检查数据库处于什么状态时,他发现了一个名为“READ__ME_TO_RECOVER_YOUR_DATA”新的空数据库。其中包含了一条黑客留下的信息:“你的数据已经被删除,必须在 48 小时内支付 0.03 BTC 才能恢复它。”


Clay 迅速查看了 MongoDB 的访问日志。通过分析日志可以发现两个相隔几秒钟的连接。这两个来自未知 IP 的连接都发生在整个数据库被删除的前一刻。通过跟踪连接 IP,可以轻易地发现黑客进入服务器,并在几秒钟后就将其删除。



但事实上,Clay 启用了 UFW 防火墙,并努力保持在严格的允许列表中,仅对内部服务器开放。但出于 Docker 的原因,在新的服务器上却没有发挥作用。


在他将 MongoDB 容器化时,Docker 在 iptables 中插入了一个允许的规则,从而向全世界开放了 MongoDB。因此,当防火墙处于“活动状态”状态时,执行 sudo iptables -L | grep 27017,显示 MongoDB 已经开放。


幸运的是,Clay 并未向黑客支付赎金,因为通过分析他认为数据实际上没有被盗,而且他有被擦除的数据库的备份(副本)。日志也显示自动攻击者只发出了删除命令,并没有从 MongoDB 服务器上转移任何数据。


另一个能证明数据没有转移的证据是 24 小时内 db-mongo1 机器的流量快照。



下午 6 点 10 分:新的 db-mongo1 服务器轮换为 MongoDB 主服务器。这台机器是第一台新的、即将成为私有云的机器。


晚上 9 点 35 分:三小时后,一次自动黑客攻击试图打开与 db-mongo1 服务器的连接,该数据库立即被丢弃。随后停机了。


晚上 10 点 15 分:在以前的主服务器进入轮换状态之前,NewsBlur 做了一个服务器的快照,以确保备份在重新连接时不会自我删除。这个过程花费了几个小时的停机时间,但由于没有迫使我进入每日备份档案,存下了将近 18 个小时的数据。


凌晨 3 点:快照完成,并开始从原主服务器复制到新的 db-mongo1。


凌晨 4 点 30 分:已完成从旧主服务器入站的复制,并开始在新的辅助服务器上出站复制。现在 NewsBlur 已经恢复正常。


从打开开关到黑客删除 NewsBlur 的 MongoDB 集合并假装要赎回大约 250GB 的数据,花了 3 个多小时。几个小时后,当备份恢复后,NewsBlur 就重新上线了,Docker 制造的漏洞也修补完毕。


怎样才能保证不再发生这样的事情?


在过去的七年里,“Docker 网络绕过防火墙,且没有禁用选项”一直是开发人员关注的问题。早在 2014 年的时候,就有开发者上报给 Docker 公司,但问题一直没有得到解决。


虽然在线论坛有各种解决方案的建议,但 Docker 为什么不选择直接修复,Clay 对此评论说:“这有点像方便和安全之间的权衡。在这里,Docker 认为方便更重要。”


另一方面,处于开放状态的 MongoDB 数据库受到攻击的情况早已存在。本次事件在 Riddit 上引起开发者广泛关注之后,著名安全研究员 Bob Diachenko 在推特上写道



值得注意的是,在“黑客”将其清理干净之前,这个 MongoDB 在网上处于不安全状态将近一个月。


专业人士认为该攻击是自动化的,并且是 2016 年底开始的勒索潮流的一部分。当时多个黑客组织开始擦除 MongoDB 服务器并索要赎金,这些服务器所有者都是在没有密码的情况下将 MongoDB 实例暴露在网络上。虽然黑客声称他们复制了已删除的数据,但在大多数情况下是虚张声势,希望受害者支付小额赎金,赎金要求通常在 200 美元到 2000 美元之间。


这些攻击多年来一直存在,至今仍然活跃。我们从本次事件中能吸取到的教训是:


  • 将数据迁移到 VPC(即虚拟私有云,Virtual Private Cloud),可让关键服务器只能通过私有网络中的其他服务器访问。但正是这一迁移过程中,遭受到了黑客的攻击。讽刺的是,将数据迁移到私有网络时,NewsBlur 需要从公共可访问的机器上迁移所有数据。它是整个过程的第一步。

  • 需要在所有的数据库上启用数据库用户认证机制。长期以来,NewsBlur 都依赖防火墙来保护自己免受威胁,但当防火墙默默地失效时,数据库就被暴露了。如今,谁能说,如果防火墙失效了,但是由于已经存在认证机制,那么黑客攻击将会被发现。这个密码需要足够长,才能避免暴力破解,因为到最后,一个开放的数据库,如果不受密码保护,它就很可能会出现在黑客攻击的名单上。

  • 需要调整具有删除权限的数据库用户。大多数数据库用户应该只需要读和写的权限。在最理想的情况下,只允许本地主机用户执行潜在的破坏性操作。


但这些都只是防御策略的一部分,一项合适的防御策略绝不能仅仅依赖于一个精心设置的层。对于 NewsBlur 来说,这一层是一个只允许访问的防火墙。


像往常一样,真正的有用的是“备份”策略。定期的、经过测试的备份是任何网络服务的必要组成部分。


参考链接:


http://blog.newsblur.com/2021/06/28/story-of-a-hacking/


2021-06-30 15:264905

评论 4 条评论

发布
用户头像
docker怎么设置的也不贴
2021-07-01 08:55
回复
2021年最新整理,名企校招各大岗位的技能树,含技术细节,Python, Golang, iOS, Android, Java,C/C++,前端,运维,测试,运营岗位。
https://github.com/0voice/develop_skill_tree
2021-07-08 15:23
回复
用户头像
这不能叫严重错误,应该是工作人员的失误
2021-06-30 17:06
回复
用户头像
设置个密码能死?
2021-06-30 15:52
回复
没有更多了
发现更多内容

SAP 交货单与HU指派关系数据不一致问题的解决方案

SAP虾客

SAP 公司间STO 外向交货单 HU DEBUG改表

Tapdata Cloud 场景通关系列:将数据导入阿里云 Tablestore,获得毫秒级在线查询和检索能力

tapdata

photozoompro2023下载激活教程

茶色酒

PhotoZoom photozoompro

EasyRecovery2024永久版手机数据恢复软件

茶色酒

EasyRecovery EasyRecovery15 easyrecovery2023

EasyRcovery软件最新版本V15电脑版安装包下载

茶色酒

EasyRcovery2023 EasyRcovery

如何破越发展 to B 市场亏损越多问题?

风铃架构日知录

互联网 程序人生 后端 IT tob产品

模块9毕业设计项目

冷夫冲

架构设计实战

【架构设计】你真的理解软件设计中的SOLID原则吗?

小小怪下士

Java 程序员 架构设计

David Murray 加入 VeraViews 担任需求总监

鳄鱼视界

【Java基础】Java8 使用 stream().filter()过滤List对象(查找符合条件的对象集合)

No8g攻城狮

java; 开发语言 语言 & 开发 Java’

Tapdata 杨庆麟:实时数据如何赋能制造业,实现业务卓越与持续发展?

tapdata

Alluxio 2022技术干货年终大赏

Alluxio

大数据 分布式 案例 Alluxio 数据编排

小兔子在终端给大家拜年啦

陈明勇

Go golang 后端

2023-01-13:joxit/docker-registry-ui是registry的web界面工具之一。请问部署在k3s中,yaml如何写?

福大大架构师每日一题

k8s k3s 福大大

Pytorch 基础-tensor 数据结构

嵌入式视觉

Tensor ndarray 张量的基本操作 view函数 reshape

【深入浅出Seata原理及实战】「入门基础专题」探索Seata服务的AT模式下的分布式开发实战指南(2)

洛神灬殇

分布式事务 分布式架构 Alibaba SpringCloud Alibaba

【Java基础】Java8 使用 stream().sorted()对List集合进行排序

No8g攻城狮

java; 开发语言 语言 & 开发 Java’

WEB开发人员应该知道 10 个 Docker 命令

devpoint

Docker 前端开发 docker image Docker 镜像

tinyrpc源码阅读

骑牛上青山

golang 源码 RPC

算力狂热时代的冷静之道:宁畅总裁秦晓宁分享企业的算力最优解

脑极体

算力 东数西算 算力网络

读懂深度学习,走进“深度学习+”阶段

白洞计划

【架构设计】你真的理解软件设计中的SOLID原则吗?

JAVA旭阳

Java 架构

详解ThreadLocal

threedayman

第四周作业-千万级学生系统课程存储设计

不爱学习的程序猿

非常实用的代码阅读策略!

风铃架构日知录

Java 程序员 后端 IT 代码

总结一下经典机器学习算法

风铃架构日知录

Java 程序人生 算法 后端 IT

一个比一个牛皮的5个杨辉三角特性!

风铃架构日知录

Java 程序员 算法 IT 杨辉三角

【Redis实战专题】「性能监控系列」全方位探索Redis的性能监控以及优化指南

洛神灬殇

redis监控 Redis优化 redis性能

Hive的条件函数与日期函数汇总

Steven

设计千万级学生管理系统的考试试卷存储方案 - 模块四

Geek_e5f2e5

Hero动画应用之列表详情页切换

岛上码农

flutter ios 前端 安卓 移动端开发

Docker严重错误导致企业数据被黑客擦除,已存在七年之久_服务革新_Tina_InfoQ精选文章