MySQL被黑的一次记录


微信搜索“coder-home”或扫一扫下面的二维码,关注公众号,第一时间了解更多干货分享,还有各类视频教程资源。扫描它,带走我
在这里插入图片描述



不知道大家有没有经历过MySQL数据库被黑底的情况,今天给大家分享一下我这次的经历。

背景

昨天我们的一个同事给我们反馈说,我们的一个应用不能正常使用了,我们就去排查了一下具体的原因。最后定位到是数据库连接有问题,再进一步排查发现表都不存在了,只有一个这样的表在我们的数据库里面。

在这里插入图片描述

打开这个表之后,里面有这样下面截图中的这样的信息。
在这里插入图片描述

大概意思就是:我们的数据库被他们给攻击了,数据已经备份到他们的服务器上,要向恢复数据库需要在9天之内根据他们给出的链接和token去支付比特币。否则他们就把数据卖给其他人使用了。

问题排查

我们是使用的云服务器,然后我们就赶紧通联系云服务商。我们和云服务商一起排查。

我们平时的访问是下面这样的流程。

  1. 通过VPN账号信息,用来连接我们VPN服务。
  2. 连接上VPN之后,我们访问一个跳板机。
  3. 通过跳板机器去访问MySQL服务器和应用服务器。

然后我们按照如下的几个方向排查问题出现在哪里:

  1. 查看云服务器的安全组信息
  2. 部署MySQL数据库的服务器流量的出入大小,以此来推测数据库文件是不是被转移走了?
  3. 部署MySQL数据库的服务器对公网开放的端口有哪些?是否除了443之外没有其他对公网开放。
  4. MySQL数据库的密码是否够复杂?
  5. 部署MySQL数据库的服务器root的密码是否被黑客锁获取,查看服务器的日志。
  6. 查看MySQL的操作日志、现有的用户列表和授权信息列表。
  7. 部署的应用在连接MySQL数据库的时候,是否使用了明文的密码。
  8. 除了这台MySQL数据库被攻击之外,是否其他数据库服务器也被攻破。

推测原因

经过最后的层层排查最后发现以下几种可能:

  1. MySQL服务器,除了443端口之外还对公网暴露了3306、22端口。
    • 这个应是在云平台开端口的时候配置错误了,本想对内网开放,却错误操作,把端口开放到了外网。与此同时,MySQL的root密码确实比较简单,如果想暴力破解应该也很容易。
  2. 黑客通过SQL注入的方式把数据库表给删除。
    • 这个可能性不是很大,因为我们扫描了我们的代码,里面的SQL都是配置在spring boot的配置文件中,没有使用${para}这方式传入参数到SQL语句中。

最后的决定

让我们庆幸的是,这次被攻击的环境是一个测试环境,不是真正的生产环境。另外对于这个数据我们本地都有备份。所以这个对于我们来说不太重要。

另外就是我们根据连接点击进去看到需要我们支付0.05个比特币,折合人民币大概5000元左右。后来网上也查了一下,即便是你支付了比特币,你的数据页不一定能拿回来。他们可能任务你既然支付了比特币,那么这个数据可能对你特别的重要,所以他们会进一步要求支付更多的比特币。

最后,我们没有理会这个,而是基于我们本地备份数据,重新部署我们测试环境的数据库。

防御措施

既然这次被黑掉了,以后如果不提高警惕,还有可能在这个地方再栽倒一次。所以,我们最后制定了以下安全措施。

  1. 云服务器网络层面

    • 服务器端口在开放的时候,一定要走审批流程,再三确定是否需要对外开放某个端口。
    • 安全组定期审查。
  2. 云服务器层面

    • 在服务器上登录MySQL数据库的时候,不能把密码写在命令行中,因为在history中可以看到密码。
    • 服务器的登录必须需要通过跳板机才可以访问。
  3. 数据库配置层面

    • MySQL的端口号,不使用3306,改为其他端口。
    • MySQL的root用户名称,不再使用root,改为其他名称。
    • 应用在部署的时候,连接数据库需要单独创建应用使用的账号密码,不能直接使用root这一的管理员账号连接数据库。
    • 在授权的时候,禁止远程连接到MySQL服务,如果需要远程连接,则对指定IP地址进行授权
    • 某一个账号在连续3次输入错误密码后,禁用该账号。
    • 数据库要定时定点的备份。
    • 开启数据库的审核日志功能。
    • bin-log功能要开启。
  4. 数据库账号密码层面

    • 密码一定要足够长、足够复杂,要包含大写字母、小写字母、特殊符号、数字四种规则。
    • 如果有可能可以考虑使用base64加密后的字符串作为密码。
  5. 应用层面

    • 连接MySQL数据库的账号和密码,不能使用明文的方式配置在配置文件中。需要加密后配置在配置文件中。
  • 应用中使用公司的工具包,对加密后的账号密码进行解密然后去连接数据库。

结束语:

后续的在给大家分享如果开启MySQL的日志审计功能、如何配置账号密码3次输入错误被禁止登录的功能等等。

敬请期待…


微信搜索“coder-home”或扫一扫下面的二维码,关注公众号,第一时间了解更多干货分享,还有各类视频教程资源。扫描它,带走我
在这里插入图片描述


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL Slave库恢复是指在主从复制的环境下,当从库出现异常或数据丢失时,需要将从库数据恢复到与主库一致的状态。下面是一次MySQL Slave库恢复的实战记录,供参考: 1. 确认从库数据丢失或异常情况 在主从复制的环境下,当从库出现异常或数据丢失时,需要先确认是从库数据丢失还是复制链路中出现问题。 可以通过以下方式进行确认: - 在从库上执行 SHOW SLAVE STATUS 命令,查看 Slave_IO_Running 和 Slave_SQL_Running 的状态,如果其中任意一个为 NO,则说明复制链路出现了问题; - 在从库上执行 SELECT COUNT(*) FROM 表名 命令,查看数据是否与主库一致,如果不一致,则说明从库数据出现了异常或数据丢失。 2. 确认主库数据一致性 在从库数据出现异常或数据丢失之前,需要先确认主库数据是否一致,可以通过以下方式进行确认: - 在主库上执行 SELECT COUNT(*) FROM 表名 命令,查看数据数量与从库是否一致; - 在主库上执行 SHOW MASTER STATUS 命令,查看 File 和 Position 的值。 如果主库数据不一致或者无法确认主库 File 和 Position 的值,则需要先进行主库数据修复。 3. 停止从库复制 在从库数据出现异常或数据丢失后,需要先停止从库复制,可以执行 STOP SLAVE 命令。 4. 备份主库数据 在进行从库恢复前,需要先对主库进行备份,可以通过以下方式进行备份: - 执行 mysqldump 命令备份主库数据; - 将主库数据目录进行复制备份。 5. 恢复从库数据 在备份主库数据后,需要将备份数据恢复到从库中,可以通过以下方式进行恢复: - 执行 mysql 命令将备份数据导入到从库中; - 将备份数据目录进行复制恢复。 6. 启动从库复制 在恢复从库数据后,需要启动从库复制,可以执行 START SLAVE 命令。 7. 确认从库数据一致性 在从库复制成功后,需要再次确认从库数据是否与主库一致,可以通过以下方式进行确认: - 在从库上执行 SELECT COUNT(*) FROM 表名 命令,查看数据数量与主库是否一致; - 在从库上执行 SHOW SLAVE STATUS 命令,查看 Slave_IO_Running 和 Slave_SQL_Running 的状态是否正常。 以上就是一次MySQL Slave库恢复的实战记录,希望对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值