漏洞描述和危害

Redis因配置不当可以未授权访问,被攻击者恶意利用。
攻击者无需认证访问到内部数据,可能导致敏感信息泄露,黑客也可以恶意执行flushall来清空所有数据。
攻击者可通过EVAL执行lua代码,或通过数据备份功能往磁盘写入后门文件。
如果Redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器。

已确认被成功利用的软件及系统

对公网开放,且未启用认证的redis服务器。

修复方案

1.修改redis.conf配置文件

修改如下配置,然后重启redis, 启动时请指定redis.conf文件,如: ./redis-server /etc/redis.conf

1
2
3
4
5
6
7
8
9
10
11
# 指定redis服务使用的网卡,找到 “# bind 127.0.0.1” ,把前面的#号去掉,注:修改后只有本机和内网ip才能访问Redis。
bind 127.0.0.1 10.10.53.21
#修改默认端口 port 6379
port 9376
# no 改成 yes 运行后台运行
daemonize yes
# 设置访问密码, 客户需要通过密码认证
requirepass WERDC234SDF@#$@

2.调整配置spring-shiro.xml

1
2
3
4
5
6
7
8
#vi spring-shiro.xml, DEFAULT_TIMEOUT 2000
<bean id="jedisPool" class="redis.clients.jedis.JedisPool">
<constructor-arg index="0" ref="jedisPoolConfig"/>
<constructor-arg index="1" value="${redis.ip}" type="java.lang.String"/>
<constructor-arg index="2" value="${redis.port}" type="int"/>
<constructor-arg index="3" value="${redis.timeout}" type="int"/>
<constructor-arg index="4" value="${redis.passwrod}" type="java.lang.String"/>
</bean>

3.修改Redis服务运行账号

以较低权限账号运行Redis服务,且禁用该账号的登录权限。

4.设置防火墙策略 (可选)

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

1
2
3
4
5
6
7
#1、先备份iptables
cp /etc/sysconfig/iptables /var/tmp
#2、vi /etc/sysconfig/iptables 添加配置 开启ip段192.168.1.0/24端的9376口
-A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 9376 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 9376 -j DROP
#3、重启防火墙
service iptables restart

本文地址: http://blog.up72.cn/2016/08/05/redis unauthorized access holes/