数据库被黑记录

总结

由于数据库弱密码,导致测试服务器的数据库被黑。本篇文章旨在记录并引以为鉴。

起因

2024 年 11 月某一天,数据库连接失败。于是排查发现了数据库被黑。

查询资料发现是互联网上自动扫描的攻击程序造成。这些程序会持续扫描公网 IP 段,寻找 MySQL(3306)、Redis(6379)、MongoDB(27017)等常用服务的默认端口。一旦发现,它们会立即尝试用默认用户名(如 rootadmin)和常见弱密码(包括空密码)进行登录。

攻击者成功登录后,删除了我们原有的所有数据库,并留下了一张名为 recover_your_data 的新表,内容是要求支付比特币以赎回数据的勒索信息。

处理步骤

从发现异常到服务恢复,以下是详细的步骤复盘。

第一步:数据库连接失败

在进行测试时,发现应用无法连接到数据库。

第二步:发现数据库被黑

尝试通过 Navicat 客户端工具连接数据库,发现数据库中测试业务数据全部消失不见。取而代之的是一个陌生的 PLEASE_READ_ME 库。至此,可以 100% 确认:数据库被黑。

第三步:备份数据与日志

在进行任何修改之前,首要任务是保留“犯罪现场”,以便后续排查。

  1. 备份剩余数据:虽然业务库被删,但攻击者留下的勒索信息、MySQL 的系统库(如 mysql 库中的用户信息)可能包含有价值的线索。对剩余的所有数据库进行备份。
  2. 备份日志文件:拷贝 MySQL 的错误日志(error.log)、慢查询日志(slow-query.log)以及系统日志,这些日志可能会记录下攻击者的登录 IP 和操作时间。

第四步:排查被黑原因

备份后开始排查。

  1. 检查用户权限:在 mysql 库中,执行了 SELECT user, host FROM mysql.user;。发现'root'@'%' 的存在,表示测试数据库允许任何 IP 以 root 身份登录。
  2. 检查密码:发现是弱密码。
  3. 分析日志:分析 MySQL 日志和系统日志,没有发现其他信息。

于是可以分析出:公网 IP + 3306 端口 + root@% + 弱密码导致了数据库被黑。

第五步:修改密码,重启服务

定位问题后,开始进行修复:

  1. 修改密码:为 root 用户设置一个高强度的复杂密码,并限制其登录 IP。

    -- 修改本地登录的root用户密码
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'XXXXXX';
    -- 限制登录IP
    UPDATE user SET host='192.168.X.X' WHERE user='root';
    -- 刷新权限
    FLUSH PRIVILEGES;
  2. 配置防火墙:在服务器防火墙(如 firewalld)上,关闭对公网开放的 3306 端口。如果必须远程连接,也应配置为只允许特定的白名单 IP 访问。

  3. 重启服务:完成修改后,重启 MySQL 服务,确保所有旧的、恶意的连接被断开。

第六步:数据恢复

  • 使用备份的数据脚本进行恢复(数据勤备份)

支付赎金的做法并不可取。

第七步:全面排查

对所有使用的数据库服务(包括生产、预发和所有测试环境)进行了一次彻底的安全审计,检查是否存在类似的弱密码、不合理的授权、公网端口暴露等问题,并形成规范,杜绝此类事件再次发生。

更多信息


文章作者: huan
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明来源 huan !
  目录