Redis 授权漏洞导致测试服务器被黑

Posted by Deadline on April 22, 2016

0x00

昨天晚上洗完澡收到 boss 发来的信息,阿里云通知服务器在国外异地登陆了。
哇擦类,这是被黑了的节奏啊。
赶紧上控制台看看啥情况,一看 cpu 的使用率就知道肯定被黑了,一直接近 100% 的使用率。平时都是 1% 的好么。
于是晚上先停掉,今天上午再来看看具体啥情况。
好在只是测试服务器,官网服务器,要不然肯定死翘翘了。

0x01

云盾里会帮助分析应用漏洞。
有提示 Redis 未授权访问漏洞,不看不知道,一看吓一跳。
这个漏洞这么严重啊!可以直接写入 ssh 公钥文件,然后来登陆服务器。

阿里的介绍

这么想来之前安装 RAP 的时候确实安装了 Redis,后来只是配置了下进程守护,其他的啥都没有配置,也没有设置访问密码。
所以只有测试服务器中招,正式库因为没有安装 Redis ,所以没事。

0x02

阿里的介绍里有建议修复方案:

1、指定redis服务使用的网卡 (需要重启redis才能生效) 在 redis.conf 文件中找到 “# bind 127.0.0.1” ,把前面的#号去掉,然后保存。注:修改后只有本机才能访问Redis。

2、设置访问密码 (需要重启redis才能生效) 在 redis.conf 中找到“requirepass”字段,在后面填上你需要的密码,Redis客户端也需要使用此密码来访问Redis服务。

3、修改Redis服务运行账号 请以较低权限账号运行Redis服务,且禁用该账号的登录权限。可以限制攻击者往磁盘写入文件,但是Redis数据还是能被黑客访问到,或者被黑客恶意删除。

4、设置防火墙策略 如果正常业务中Redis服务需要被其他服务器来访问,可以设置iptables策略仅允许指定的IP来访问Redis服务。

最适合我的方法就是 1 了,因为只有一个服务实例,而且应用和 Redis 在同一台服务器上,所以限制本机访问没有问题。
如果是集群或者应用和 Redis 不在一个服务器上这个方法就不好用了。

方法 2 也很方便,应用和 Redis 不在同一台服务器上也没有关系,只是要在应用配置上多个配置项而已。

方法 3 的话安装 Redis 的时候就要麻烦些了,要单独创建一个用户,而且安装的时候可能会碰到文件权限的问题。

方法 4 比较复杂,不推荐使用。

还有个建议就是关闭持久化功能(将数据保存到磁盘上),Redis 基本都是用来做缓存的,很少有人需要用到持久化功能吧。
将 ssh 公钥保存就是用了持久化的特性。所以不用的话最好也关掉这个功能,还可以节省点磁盘空间。 找到配置文件把下面这些都注释掉好了。

#save 900 1
#save 300 10
#save 60 10000

关于如何利用漏洞的方式可以看看这篇文章:Redis 未授权访问缺陷可轻易导致系统被黑

0x03

别人的 ssh public key 可能添加了额外属性无法被 root 用户删除。
是的,我就碰到了,root 用户都删不掉,提示 Operation not permitted ,有点懵逼。。。。。我都 root 用户了,居然还提示我没权限。
搜索了下,原来还有 chattr 这个命令可以给文件附加额外属性,使用 lsattr 命令看查看附加属性。
具体的你们自行搜索吧,这里就不细说了。

0x04

还有个小问题

src/redis-server     
src/redis-server redis.conf

一直以为 src/redis-server 和 src/redis-server redis.conf 这两个命令是等效的

官网文档上说,直接用 ./redis-server 命令启动的就是使用默认的配置项,redis.conf 不就是默认的配置项么?

那么修改 redis.conf 里面的配置,再使用 ./redis-server 启动应该会加载新的配置吧。

然而事实并非如此,redis.conf 应该只是一个配置示例,你在该文件中修改了配置,还是需要显式加载该配置项才会生效,即使用 src/redis-server redis.conf 命令启动。


There are no comments on this post.