删库勒索比特币!这个六一过的有意思!

没有删库跑路,却有删库勒索比特币!哈哈哈哈😄
下面给大家讲述一下今年六一儿童节发生了啥和咋解决的。

1. 事件发生

之前在腾讯云买了台基础配置的服务器,平时就部署一些练手项目,朋友偶尔也借用一下部署小项目。昨天朋友突然发消息说数据库查不出数据,让我看看咋回事。我打开Navicat一看,真的是一脸懵逼…

什么情况这是?咋多了一个数据库?其他数据库怎么数据都没了,都是同一张表?
一通搜索操作,才知道原来是被黑客勒索。幸亏这个数据库是我和朋友用来测试的,平时都是自己做一些测试用,没有什么有用的数据,这种情况就直接删除镜像重新部署一个吧。

2. 事件复盘

这个MySQL实例是使用Docker部署的,从笔记里面找到当时启动命令:

1
2
3
docker run -d -p 3306:3306 --name mysql_test01 \
-v /mydata/mysql_test01:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=1234 mysql:5.7.6

看我的作死操作:

  • root账户开启
  • 弱口令(密码1234)
  • 端口直接暴露(而且安全策略3306端口开放外网访问)

通过上面一波猛如虎的操作,我这个MySQL实例就是裸奔的节奏😂。

而且腾讯云很早就提醒有异地登录,我一直以为是朋友那边登录的,就没注意。

3. 防范步骤

经过一番搜索请教和实践,总结了下面几个防范步骤,供大家参考:

3.1 云服务器后台设置

云服务器厂家一般都会提供一些安全策略,建议大家都打开相关配置。例如异地登录等等都是可以提前通知管理员,提早做出风险防范。

3.2 开启MySQL日志

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# vi /usr/local/mysql/etc/my.cnf

添加如下内容:
#错误日志: -log-err
log-error=/usr/local/mysql-5.7.23-linux-glibc2.12-x86_64/log/error.log

#查询日志: -log
general-log=ON
general-log-file=/usr/local/mysql-5.7.23-linux-glibc2.12-x86_64/log/general.log

#慢查询日志: -log-slow-queries
# 执行超过1秒的sql会被log下来
long_query_time=1
# 开启慢查询
slow_query_log=on
# 将查询执行时间较慢的语句进行记录
#log-slow-queries=/usr/local/mysql-5.7.23-linux-glibc2.12-x86_64/log/slow.log
slow-query-log-file=/usr/local/mysql-5.7.23-linux-glibc2.12-x86_64/log/slow.log

#二进制日志: -log-bin
server_id=100
log-bin=/usr/local/mysql-5.7.23-linux-glibc2.12-x86_64/log/bin.log

重启mysqld服务使配置生效
# /etc/init.d/mysqld restart

3.3 MySQL配置鉴权

MySQL安装默认需要设置密码,安装时如果设置了弱口令,可通过以下几种方式修改密码:

  • UPDATE user SET password=PASSWORD(‘新密码’) WHERE user=’root’; FLUSH PRIVILEGES;
  • SET PASSWORD FOR root=PASSWORD(‘新密码’);
  • mysqladmin -u root -p 旧密码 新密码

一定要注意不要使用弱口令,推荐数字、字母和字符混合使用。

3.4 避免root和端口暴露

  • 不要在代码中使用root账户,同时注意控制MySQL运行账户权限,尽量让其权限最小
  • 内网系统关闭公网访问,避免默认端口直接暴露
  • 启动参数或配置文件中设置bind-address,绑定内网IP

3.5 备份

  • 备份表结构和数据
  • 备份表结构和数据
  • 备份表结构和数据

重要的事情说三遍!!!

4. 总结

想想自己能经历这一次数据库勒索还挺有意思的。这一番折腾确实让我感受到网络安全的重要性,同时也增强自己的安全意识。无论是开发公司项目还是个人练手项目都要严谨一些,习惯是慢慢养成的。
敬畏每一行代码!


欢迎大家关注😁