云务器厂商: 腾讯云 操作系统:Ubuntu(22.04)
禁用了密码登录,禁用了 root 远程登录,删除了默认的 ubuntu 用户,新建了一个用户,只允许 ssh 连接。
docker(root 模式)下安装了一个 mysql, 测试的时候,将 root 的 host 修改为了%, 然后修改了 root 密码为 128 位的随机复杂密码,可以确保只有我一个人有密码信息,但是服务器开放一天后,所有数据库全部被黑了,全部被替换了加密地址表。虽然没啥有用的信息,毕竟只是临时开出的一个测试服务器。
想要问一下,这个环境有哪些薄弱的安全环节导致 mysql 被人搞定了。docker 容器镜像是官方最新的版本。
1
ajiangstudy 333 天前
如果数据库对外开放,感觉像是数据库的问题吧,数据库有指定过允许登录 IP 吗?
|
2
fredcc 333 天前
云防火墙入站策略怎么配的
|
3
thinkershare OP @ajiangstudy 没有限制 IP 地址,任何 IP 地址都可以访问。
|
4
thinkershare OP @fredcc 防火墙开了 3306 的入站端口,我难以理解,这是操作系统的密码存在漏洞,还是 mysql 数据库的密码系统存在安全漏洞,按道理来说,我随机生成的 128 位的密码,是不可能通过撞库来破解的。
|
5
qiaorenzhi 333 天前
docker 或者数据库是不是存在版本上的漏洞
|
6
daxin945 333 天前
查一下 mysql 的版本是多少,找一找有没有对应版本的已知漏洞
有可能是直接通过 mysql 漏洞进去的,不是撞库 用 docker 的话 你在宿主机上开一个 30000 之后的端口,最好奇怪些,然后映射到 docker 内的 3306 限制一下网络请求,最次也要把境外的 IP 封了 防火墙开着 |
7
thinkershare OP @daxin945 就是感觉很奇怪,就第一次公网 3306 没改端口,而且用的还是复杂密码,不到一天就被人给破了,主要是镜像还是上周五拉取的 docker hub 上的 mysql@latest 镜像。幸好上面没有任何有用的数据, 虽然有很多个数据库,但里面的数据都是伪造的垃圾数据。我本来想要设置一个足够复杂的密码,应该没啥大问题,我也就做多开一周,结果周五开的,周一来看,就被人给全部办了,看来公网果然还是危险。
|
8
blackeeper 333 天前
你这个环境的 MySQL 服务器安全性应该是没有问题的,毕竟你的服务器系统文件是正常的,数据库服务也是正常的,只不过数据库表被加密了,按照这个被黑的情况,问题点可能在于你的应用
1 ,你的 web 应用可能被挂马,或者有后门 2 ,连接 MySQL 的客户端工具有问题 |
9
thinkershare OP @blackeeper 我的应用使用的不是 root 用户,权限很低,不可能修改其它数据库。而且我的应用理论上来说就不可能有 SQL 注入漏洞,因为没有任何语句支持动态 SQL 。我感觉只有可能是密码被爆破了,不过这个机器本来就是随便开来做一次性单元测试的,有点想不通到底是那个环节出错了。
|
10
yw9381 333 天前 via Android
两个方向
1. 腾讯云的 aksk 是否泄露。aksk 的权限是否可以管理 vm 。如果可以。那通过应用泄露的 aksk 拿到 vm 权限进而勒索 mysql 就顺理成章了 2. 从服务角度。ssh mysql 自身应该都不存在安全问题。那么只能考虑密码泄露。或是应用层问题。你的应用是否存在安全问题。比如任意文件读取。配置信息泄露等等问题 抛开应用和场景只说环境安全其实是比较片面的。个人觉得楼主的关注方向可以放在应用 如果方便的话可以把应用发出来。或是咱俩私下沟通。可以顺手帮你看看安全问题(不那么耗精力的话可以免费) |
11
rc5ayc 333 天前
查日志看看吧
|
12
daxin945 333 天前 1
@thinkershare
即使你啥也不部属,就绑定了公网 IP ,网卡上的流量也会蹭蹭的涨 要是愿意折腾,你就在你的机器上用 tcpdump 抓点流量包,或者用类似 suricata 的 IDS 抓些流量日志看看到底咋回事。 看不懂没事,把公网 IP 拿出来 去微步/VirusTotal 这些威胁情报站查,但凡黑 IP 都给它封了 可以参考这个差缺补漏,我觉得基本面是没问题的 https://github.com/guanhui07/blog/issues/360 |
13
blackeeper 332 天前
@thinkershare
额,为啥你会认为我说的被挂马或者有后门是:SQL 注入漏洞。 你给的信息太少,不确定你是 root 账户泄露了,还是 web 应用的数据账户泄露了。 如果只有 web 应用的数据库被加密了,那么就是 web 数据库账户被泄露了,有很多中方式可以获取你 web 的数据库配置文件 1 ,查你的 web 应用是否多了什么文件或者脚本,我猜你的应用应该是 PHP 写的 2 ,128 位的密码爆破?没有人愿意做这个事情,其实就是账户密码被 hacker 获取了,具体是哪里泄露的有可能是 web 应用,你的 IDE ,或者你电脑的破解版 MySQL 连接客户端 3 ,你可以查看 MySQL 的 binlog 和 log ,可以查到相关的信息 |
14
thinkershare OP @blackeeper 这些地方都没有可能性,因为数据库被攻破的时候,我的应用是停止状态,另外我的引用也全部是容器化的,msyql 工具用的是官方下载的 MySQL Workbench 8.0 CE ,密码除了通过微信发给过我自己,没有任何人知道。
|
15
blackeeper 332 天前
@thinkershare
我想告诉你:数据库被攻破的时候,应用是停止状态,不代表数据库配置文件没有泄露,加密数据库表不需要走你的应用去攻击,因为你的 mysql 是可以公网访问的 |
16
thinkershare OP @blackeeper 数据库配置文件根本没有被请求的可能性,数据库配置是通过环境变量注入到应用的(一次性环境变量),数据库被入侵的时候应用容器组都是停止状态)。我远程的 root ssh 都是关闭了的,而且 root 的密码也是修改过的,默认用的也不是 root 账号,整个环境除了存在 0day 我实在想不通到底是哪里导致问题的,我现在甚至怀疑微信发送消息是不是会被泄露,因为整个流程我只有通过微信自己给自己(文件助手)发送过 mysql 密码,密码除了我的微信上有,我自己甚至都记不住。
|