简单记录分析过程。

收到阿里云报警短信

【阿里云】尊敬的xxx@xxx.com:云盾云安全中心检测到您的服务器:xx.xx.xx.xx(dev)出现了紧急安全事件:Linux可疑计划任务,建议您立即登录云安全中心控制台-安全告警处理http://a.aliyun.com/f1.PXzRj 进行处理。

查看告警详情

liunx redis离线安装 linux安装redis cli_liunx redis离线安装

liunx redis离线安装 linux安装redis cli_liunx redis离线安装_02

阿里云安全后台报告的问题是 admin 用户下,有每分钟执行一次的定时任务。

查看服务器后,发现不止 admin 用户的定时任务有问题,恶意程序创建了好多用户的定时任务。

liunx redis离线安装 linux安装redis cli_liunx redis离线安装_03

查看定时任务具体执行的代码,并不是我们公司的业务逻辑。所以要分析一下这个定时任务是怎么被加进来的。

分析原因

首先检查 ssh 认证及登录

只有 root 和 ubuntu 两个用户通过 ssh 登陆过服务器。然后检查这两个用户下的 .ssh/authorized_keys ,都是公司内部人员的公钥,所以排除是 ssh 认证信息泄露,人为登录服务器导致的问题。

liunx redis离线安装 linux安装redis cli_liunx redis离线安装_04

然后排查软件漏洞

阿里云安全后台显示,软件漏洞较多。而且被攻击机器的操作系统还是 Ubuntu 16.04,所以决定直接升级到 18.04。

liunx redis离线安装 linux安装redis cli_liunx redis离线安装_05

此处略过升级过程。

但不幸的是,操作系统升级成功后,问题仍然存在,而且手动删除恶意定时任务后,还会重新出现。

继续分析,既然排除了人为登录导致的问题,那么在服务器上肯定还有软件漏洞;而且升级过程会重启服务器,说明有漏洞的软件,会开机自动重启。

柳暗花明

此时,突然注意到,恶意定时任务中除了 curl 命令,还有如下字符串。

REDIS0009   redis-ver5.0.7redis-bits  escused-mem

所以可以初步定为是 redis 的问题,网上搜索,验证了自己的想法,具体可见这篇文章 https://zhuanlan.zhihu.com/p/111634439。

liunx redis离线安装 linux安装redis cli_liunx redis离线安装_06

根据文章描述,检查自己服务器上 redis 的配置,配置的确实有问题:

“允许所有ip连接”

liunx redis离线安装 linux安装redis cli_liunx redis离线安装_07

“关闭保护模式”

liunx redis离线安装 linux安装redis cli_liunx redis离线安装_08

“后台运行”

liunx redis离线安装 linux安装redis cli_liunx redis离线安装_09

再检查 redis 是怎样被安装到服务器上的。

并不是通过 apt 命令安装的。

liunx redis离线安装 linux安装redis cli_liunx redis离线安装_10

那就肯定是编译安装的,也发现了源代码目录,符合文章中对 redis 漏洞的分析描述。

liunx redis离线安装 linux安装redis cli_liunx redis离线安装_11

再检查是否开机启动,确实是开机启动。

liunx redis离线安装 linux安装redis cli_liunx redis离线安装_12

至此,问题原因,基本就定位清楚了:某个同事在服务器上,自己编译安装了 redis,配置上也没有考虑安全性,导致被攻击。

解决方法

删掉恶意添加的定时任务;

卸载手动编译安装的 redis,通过 apt 命令安装;

更改服务器上 redis 的配置、在阿里云后台为此服务器安全组增加入网规则,只允许白名单 ip 访问 redis 端口。