1.勒索病毒组织介绍
PLEASE_READ_ME 是一个针对 MySQL 数据库服务器的活跃数据勒索活动,其历史至少可以追溯到 2020 年1月。
1.1组织特征
在2020年10月左右,攻击者通过TOR网络创建了一个专门的暗网网站,用于向受害者索要赎金。该网站通过令牌识别的方式确认已支付赎金的受害者,并公开列出了来自全球83,000个MySQL服务器的250,000个不同数据库。网站上还展示了高达7TB的被盗数据,作为勒索的筹码。攻击者使用了11个IP地址,其中大多数来源于爱尔兰和英国。
1.2攻击目标
攻击的目标是全球互联网的 MySQL 服务器,攻击者会在名为“WARNING”的表格中留下了一封勒索信,要求支付高达 0.08 个比特币(约为56747元)的赎金。勒索信告诉受害者:“您的数据库已被下载并备份到我们的服务器上。如果我们在这接下来的 9 天内没有收到您的付款,我们将把您的数据库卖给出价最高者或用于其他目的。”
1.3真实案例
2024年11月,我司安全人员在为客户提供安全运营服务时,发现某香港IP在短时间内对客户服务器进行大规模密码爆破攻击。在封禁该IP后,团队随即展开溯源反制,并在攻击服务器上发现批量扫描与密码爆破工具。进一步调查发现,某广东IP长期通过RDP远程登录该服务器,疑似与此次攻击有关。
2.攻击分析
攻击链极其简单,利用面向互联网的 MySQL 服务器上的弱凭证,PLEASE_READ_ME(其名称来源于攻击者在受感染服务器上创建的数据库)是一种无特定目标的短暂性勒索攻击。这种攻击方式不会在受害者网络中长期停留,而是直接针对数据库进行加密勒索,完成攻击后立即撤离,通常不会涉及横向移动(即不会扩散到其他系统或设备)。
2.1黑客攻击路线图
3.溯源分析
攻击服务器上安装的的mysql爆破工具及其他扫描工具
在其爆破的结果中有3000个mysql数据库已爆破成功
在其中一个中国IP(事后查找此IP为某事业单位)爆破结果下发现其数据库内有其勒索信息
其中的勒索信指向一个链接
4.本地复现
4.1爆破
使用 hydra进行爆破得到其密码
4.2远程连接
使用mysql进行远程连接
4.3数据导出删除
使用mysqldump将数据导出
删除数据
写入勒索信
5.应急响应排查
如果怀疑机器通过MySQL爆破,可以通过查询mysql日志来进行排查。
MySQL 日志是排查问题的重要依据,主要包括:
5.1错误日志(Error Log)
记录 MySQL 启动、运行和停止时的错误信息。
-
位置:通常位于 /var/log/mysql/error.log
或通过以下命令查看:
SHOWVARIABLESLIKE'log_error';
-
排查内容:检查是否有异常登录、权限错误或 SQL 注入痕迹。
5.2通用查询日志(General Query Log)
记录所有 SQL 查询语句。
-
启用:
SETGLOBAL general_log = 'ON';SETGLOBAL log_output = 'FILE';
-
位置:通常位于 /var/log/mysql/mysql.log
或通过以下命令查看:
SHOWVARIABLESLIKE'general_log_file';
-
排查内容:检查是否有异常查询(如 DROP
、DELETE
、UPDATE
)。
5.3慢查询日志(Slow Query Log)
记录执行时间超过指定阈值的查询。
-
启用:
SETGLOBAL slow_query_log = 'ON';SETGLOBAL long_query_time = 1; -- 设置阈值为 1 秒
-
位置:通常位于 /var/log/mysql/mysql-slow.log
或通过以下命令查看:
SHOWVARIABLESLIKE'slow_query_log_file';
-
排查内容:检查是否有异常慢查询或资源消耗过高的操作。
5.4二进制日志(Binary Log)
记录所有数据更改操作(如 INSERT
、UPDATE
、DELETE
)。
-
启用:
SETGLOBAL log_bin = 'ON';
-
位置:通常位于 /var/log/mysql/
或通过以下命令查看:
SHOWVARIABLESLIKE'log_bin';
-
排查内容:检查是否有异常数据更改操作。
1.检查用户和权限
-
查看当前用户:
SELECTuser, host FROM mysql.user;
-
排查内容:检查是否有未授权的用户或异常权限分配。
2.检查数据库状态
-
查看当前连接:
SHOWPROCESSLIST;
-
排查内容:检查是否有异常连接或长时间运行的查询。
6.安全建议
6.1密码要求
-
长度:至少 12 个字符。 -
组成:混合大小写字母、数字和特殊符号(如 !@#$%^&*
)。 -
禁止常见弱密码:如 123456
、password
、root
等。 -
强制用户每 90 天更换一次密码。 -
禁止重复使用最近 5 次的历史密码。 -
修改 MySQL 配置( my.cnf
或my.ini
)启用密码校验插件:
[mysqld]plugin-load-add=validate_password.sovalidate_password_policy=STRONG # 密码强度策略(MEDIUM/STRONG)validate_password_length=12 # 最小长度validate_password_mixed_case_count=1 # 至少1个大写和1个小写字母validate_password_number_count=1 # 至少1个数字validate_password_special_char_count=1 # 至少1个特殊字符
6.2账户要求
-
删除匿名账户:
DROPUSER''@'localhost';
-
禁止 root
远程登录:
DELETEFROM mysql.user WHEREUser='root'AND Host NOTIN ('localhost', '127.0.0.1');FLUSHPRIVILEGES;
-
为每个应用创建专用用户,仅授予必要权限:
CREATEUSER'app_user'@'192.168.1.%'IDENTIFIEDBY'StrongPassword123!';GRANTSELECT, INSERT, UPDATEON app_db.* TO'app_user'@'192.168.1.%';
6.3修改默认端口
-
将 MySQL 默认端口 3306
改为非标准端口(如33706
):
[mysqld]port=33706
-
禁止 MySQL 直接暴露在公网,通过 VPN 或跳板机访问。
6.4启用 SSL/TLS 加密
-
生成 SSL 证书并配置 MySQL:
[mysqld]ssl-ca=/etc/mysql/ca.pemssl-cert=/etc/mysql/server-cert.pemssl-key=/etc/mysql/server-key.pemrequire_secure_transport=ON # 强制使用 SSL 连接
-
禁用 mysql_old_password
(旧版身份验证) 插件,仅允许caching_sha2_password
:
[mysqld]default_authentication_plugin=caching_sha2_password
6.5启用详细日志
-
错误日志:记录所有登录失败事件。 -
通用查询日志:监控异常 SQL 操作:
SETGLOBAL general_log = 'ON';
6.6定期备份备份
-
备份策略:每日全量备份 + 二进制日志增量备份。 -
恢复测试:定期测试备份文件恢复流程。
原文始发于微信公众号(solar应急响应团队):【紧急警示】PLEASE_READ_ME勒索家族死灰复燃,MYSQL数据库大面积受灾
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论