跳转到主要内容

遭遇勒索病毒攻击?请立即断网隔离,切勿重启或格式化。

舍末无勒SheMo Noransom

场景解决方案

MySQL / MariaDB 数据库被勒索病毒加密

  • MySQL
  • MariaDB
  • Percona Server
  • 宝塔面板
  • Nginx
  • Apache Tomcat
  • WordPress
  • 电商与 OA Web 应用

MySQL 的 ibdata1、.ibd、.frm 文件被加密,会让官网、商城、OA 与各类 Web 业务同时不可用。这类案例多数由 Web 应用漏洞或宝塔 / phpMyAdmin 等管理面板暴露引入。本页说明 InnoDB 文件结构对恢复的影响、binlog 的价值与处置顺序。

典型现象

  • 数据目录(如 /var/lib/mysql、D:\MySQL\data)下 ibdata1、*.ibd、*.frm、*.MYD 被追加后缀
  • mysqld 无法启动,错误日志报 InnoDB 表空间页校验失败、ibdata1 文件头无效或 tablespace 丢失
  • 网站打开报数据库连接错误(如 Error establishing a database connection),商城下单与登录全部失败
  • 网站根目录同时出现勒索信 html / txt,部分静态资源与上传目录文件也被加密
  • binlog、mysqldump 导出的 .sql 文件与备份目录被加密或被清空
  • 服务器上存在陌生 PHP / JSP 文件、异常计划任务,Web 访问日志中有可疑上传与命令执行请求

业务风险与常见误操作

MySQL 被加密的案例和 SQL Server 有一个明显区别:入口通常在 Web 侧,不在数据库侧。据公开报告,TellYouThePass 家族用 Go 语言开发、支持跨平台,长期通过 Web 组件与业务系统的高危漏洞(文件上传、命令执行、反序列化)批量投放,落地后同时加密 Web 目录与数据库目录。这也解释了为什么很多受害单位会看到「网站文件和数据库一起中招」。

业务风险有三层。第一层是可用性:官网、商城、OA、小程序后端同时中断,订单与支付链路断裂。第二层是数据完整性:MySQL 常承载会员、订单、支付流水这类高价值数据,缺一段时间的数据在对账上是实质性问题。第三层是数据外泄与合规:会员手机号、身份信息属于个人信息,涉及《个人信息保护法》下的通报与处置义务,需要与法务同步评估。

这个场景下最危险的几个动作:

  • 重装系统或重装 MySQL 到原目录。 Linux 主机上 yum / apt 重装会覆盖数据目录里的残留文件,是最常见的不可逆错误。
  • 反复启动 mysqld 并加 innodb_force_recovery 逐级尝试。 在表空间被加密的情况下,强制恢复会触发页丢弃与重写,破坏可提取的数据页。
  • 在宝塔 / phpMyAdmin 里做「修复表」操作,或直接删除 ibdata1 想让服务起来。
  • 把网站从备份覆盖回原目录,把入口证据和残留数据一并冲掉。
  • 在原分区上跑恢复工具并写回同一盘。
  • 运行攻击者的解密器。

我们不建议支付赎金,也不提供代谈判服务。

处置方案

  1. 隔离取证,先保住 Web 入口证据

    断开外网访问但保留主机运行态,不要重装、不要覆盖网站目录。对整盘(或至少数据目录与网站目录所在分区)做只读镜像。这个场景的取证重点在 Web 侧:完整保存 Nginx / Apache / Tomcat 访问日志与错误日志、PHP / JSP 文件的时间戳、上传目录内容、计划任务与 systemd 单元、/var/log/secure 与 SSH 密钥,以及 MySQL 错误日志和 binlog 索引文件。

  2. 识别家族与加密方式,同步定位漏洞入口

    识别家族(关注 TellYouThePass 这类以漏洞利用为主的谱系)与加密方式:对 ibdata1 与大体积 .ibd 做分段熵值分析,判断是全文件加密还是只加密头部 / 间歇加密。与此同时从 Web 日志倒查入口:可疑上传请求、webshell 访问路径、命令执行参数、异常 User-Agent 与时间线。入口结论会直接影响加固方案,也决定同网段其他主机是否已被波及。

  3. 可恢复性评估:表空间修复 / 备份与 binlog / 重建

    三条路径分别评估。表空间修复与数据抽取:InnoDB 以 16KB 页组织数据,未被加密的页仍含完整记录;即使 .frm / 字典信息损坏,也可通过表结构推断或从应用代码、ORM 定义中还原 DDL 后抽取数据。备份 + binlog:有可用 mysqldump 或物理备份,且 binlog 完整,可回放到接近故障点。重建:结合下游系统(支付平台对账单、物流单据、第三方平台订单)反向补齐关键业务数据。评估要按库、按表给出结论。

  4. 在干净环境实施恢复并验证业务

    新建干净主机,安装与生产一致的 MySQL 大版本,只对镜像副本操作。抽取路径下先导入表结构再灌数据,逐表核对记录数与自增主键;备份路径下按全量 → binlog 顺序回放。恢复完成后不要急着把旧网站文件直接放回——网站代码需要先做 webshell 清理与完整性比对,确认干净后再上线,否则恢复当天就会被同一入口二次投毒。

  5. 漏洞修补、暴露面收敛与验收

    按溯源结论修补具体漏洞(组件升级、上传目录禁止执行、关闭危险函数),下线或加固管理面板(宝塔、phpMyAdmin 不对公网开放,改端口并加白名单与二次认证),3306 不映射公网,重置所有数据库与系统口令。重建备份:逻辑备份 + binlog 备份 + 一份离线副本,备份不落在同一台主机。最后按业务指标验收(订单数、会员数、最新订单号连续性),出具报告与整改清单。

恢复路径

MySQL 的恢复可能性和存储引擎、文件布局关系很大,评估时要先搞清楚这几件事。

路径一:备份 + binlog 回放。 结果最好的路径。逻辑备份(mysqldump / mydumper)或物理备份(XtraBackup、文件级冷备)未被加密,加上 binlog 连续,就能恢复到接近加密发生的时刻。要特别检查 binlog:很多环境默认把 binlog 放在数据目录下,会被一起加密;如果做过独立目录或异机同步,价值就非常大。

路径二:InnoDB 表空间页级修复与数据抽取。 适用于 ibdata1 / .ibd 只被加密文件头或间歇加密的情况。InnoDB 页大小默认 16KB,页内带页号与校验,未被覆盖的页可直接解析出行记录。这条路的关键限制是表结构信息:启用 innodb_file_per_table 时每表一个 .ibd,结构信息在数据字典里;字典损坏时需要从 .frm、应用代码的建表语句、ORM 模型或历史 .sql 文件还原 DDL,再按结构解析数据。产出是可读数据,索引与部分行可能缺失。

路径三:MyISAM 表的独立修复。 老系统里仍有 MyISAM 表。.MYD 数据文件与 .MYI 索引文件分离,只要 .MYD 未被完全加密,配合结构定义常能取出较完整的数据。

路径四:外部与下游数据重建。 电商与 Web 业务的优势在于数据往往有第二份落点:支付平台流水、第三方平台订单、CDN 日志、埋点数据仓库、缓存中的热数据、邮件与短信通知记录。这些可以用来重建订单与会员主数据。

路径五:快照与公开解密工具。 云主机快照、虚拟化层快照、NAS 只读快照都要清点;公开解密工具只在家族与版本明确匹配时才可用,并且必须在副本上验证。

不承诺的事: 全文件加密 + 备份和 binlog 同目录被一起加密 + 已重装过 MySQL,这三者叠加时可恢复空间会很小。我们不使用「100%」「保证解密」这类表述,也不支付赎金、不代谈判。

常见勒索家族

防护建议

  • 3306 不对公网开放。 数据库只监听内网或 127.0.0.1,远程管理走 VPN 或跳板机;云上安全组不要出现 0.0.0.0/0 的 3306 规则。
  • 管理面板是高危入口。 宝塔、phpMyAdmin、Adminer 等不要暴露公网;必须用时改默认端口、绑定来源 IP、开启二次认证,并及时升级面板版本。
  • Web 应用与组件按月跟补丁。 据公开报告,TellYouThePass 等家族主要依赖 Web 组件与业务系统高危漏洞批量投放;框架、中间件、CMS 插件、上传组件都要纳入补丁范围。
  • 上传目录禁止执行。 Nginx / Apache 配置中对上传路径关闭脚本解析,PHP 关闭 system、exec 等危险函数,限制 open_basedir。
  • binlog 与备份放到数据目录之外。 binlog 开启并独立存放(最好异机同步),逻辑备份与物理备份至少一份写入离线或不可变存储,备份账号独立。
  • 数据库账号最小权限。 应用账号不给 FILE、SUPER、PROCESS 权限,禁用 root 远程登录,删除匿名账号与 test 库。
  • Linux 主机侧加固。 SSH 禁用口令登录、审计 authorized_keys 与 crontab、部署具备勒索行为检测的主机安全产品,并监控大量文件改写。
  • 定期做还原演练。 每季度在隔离环境从备份 + binlog 完整恢复一次业务库并计时,确认链路真实可用。

紧急响应

数据已被加密?先别动,让工程师看一眼

我们不支付赎金、不代为谈判。工程师会先做免费评估,判断可恢复范围后再给出处置方案与报价。

相关行业方案

常见问题

常见问题

  • ibdata1 被加密了,数据还能取出来吗?

    取决于加密覆盖范围。InnoDB 以 16KB 页组织数据,每页带页号与校验;如果 ibdata1 只被加密了文件头(大文件常见),后面的数据页仍可逐页解析出行记录。真正的难点常常不是数据本身,而是表结构:字典信息损坏时需要先还原 DDL,来源可以是 .frm 文件、应用代码里的建表语句、ORM 模型定义或历史 .sql 导出。如果是全文件加密,这条路基本不成立,要转向备份、binlog 与下游数据重建。

  • 网站文件和数据库一起被加密,是怎么进来的?

    这种「同时中招」的形态强烈指向 Web 侧入口。常见路径是:攻击者利用框架、中间件、CMS 插件或业务系统的文件上传 / 命令执行漏洞写入 webshell,取得 Web 用户权限后提权,再在同一台主机上加密网站目录和数据库目录。据公开报告,TellYouThePass 家族正是以这种方式长期批量投放。另一类入口是暴露公网的管理面板弱口令。溯源阶段我们从 Web 访问日志倒查请求链,给出具体漏洞与时间线结论。

  • innodb_force_recovery 能救回来吗?

    不要在原数据目录上试。innodb_force_recovery 是为逻辑损坏和崩溃恢复设计的,它在启动时会丢弃有问题的页、重建部分结构并写入新的日志,面对被加密的表空间不但救不回数据,还会覆盖掉本来可以解析的页。正确做法是先对数据目录所在分区做只读镜像,在副本上做熵值分析和页级解析;确实需要尝试引擎级恢复时,也只在副本上做,并保留镜像原件。

  • 会员和订单数据涉及个人信息,我们要不要上报?

    需要和法务、合规一起判断,但技术上你首先要确认「是否发生外泄」。现代家族普遍在加密前先窃取数据,所以我们的取证会重点看外连痕迹:异常出站流量、压缩打包文件、云存储与 FTP 上传记录、攻击者使用的传输工具。结论会写进报告,作为你们评估《个人信息保护法》《数据安全法》以及相关网络安全事件报告要求的事实依据。我们提供技术事实,不替代法律判断。

  • 云上的 MySQL(RDS)会被加密吗?

    托管型 RDS 实例本身不给你操作系统权限,勒索病毒无法像本地那样直接加密数据文件,但仍有两类风险:一是攻击者拿到数据库高权限账号后删库、删备份或做数据勒索;二是自建在云主机上的 MySQL 与本地环境没有区别,照样会被加密。所以云上的重点是账号与访问控制、开启自动备份并把备份保留在独立账号 / 独立地域、对高危操作开告警。评估阶段我们会先确认你们是托管实例还是云主机自建。

更新于