Redis无密码被别人上了以后
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。
Redis因配置不当可以未授权访问。攻击者无需认证访问到内部数据,可导致敏感信息泄露,也可以恶意执行flushall来清空所有数据。 攻击者可通过EVAL执行lua代码,或通过数据备份功能往磁盘写入后门文件。
如果Redis以root身份运行,可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器。
1 起源
故事是这样的。。。
我在补充渗透搜索引擎的时候顺手去fofa搜索了一个redis
1.1 第一位受害者
这里看到第一台是有授权的(也就是设置了密码)
第二台连接成功
redis版本比较新,不排除是测试使用的,系统应该就是centos7了。
本来想要利用一下看看能不能ssh上去的,发现里面已经有4个key了。
我这边看了里面的内容都是一样的。
key的内容,脚本地址http://194.87.139.103/cleanfda/init.sh,脚本肯定是一个人写的然后所有人都在用。
门罗币挖矿木马
脚本分析查看→挖矿木马简单分析
1.2 第二位受害者
redis版本和上一个一样,处理系统内核有点区别。
里面的key大同小异
key的内容,还是定时任务下载挖矿木马。
脚本内容和上一个略有差异,但一样是门罗币挖矿木马
还有一个Windows服务器受害者
疑似挖矿木马,不过脚本404看不到了。
还有写入公钥
2 什么是Redis未授权访问漏洞?
Redis在默认情况下,会绑定在0.0.0.0:6379
。如果没有采取相关的安全策略,比如添加防火墙规则、避免其他非信任来源IP访问等,这样会使Redis服务完全暴露在公网上。如果在没有设置密码认证(一般为空)的情况下,会导致任意用户在访问目标服务器时,可以在未授权的情况下访问Redis以及读取Redis的数据。攻击者在未授权访问Redis的情况下,利用Redis自身的提供的config命令,可以进行文件的读写等操作。攻击者可以成功地将自己的ssh公钥写入到目标服务器的 /root/.ssh
文件夹下的authotrized_keys
文件中,进而可以使用对应地私钥直接使用ssh服务登录目标服务器。
简单来讲,我们可以将漏洞的产生归结为两点:
- redis绑定在
0.0.0.0:6379
,且没有进行添加防火墙规则、避免其他非信任来源IP访问等相关安全策略,直接暴露在公网上 - 没有设置密码认证(一般为空),可以免密码远程登录redis服务
漏洞可能产生的危害:
- 攻击者无需认证访问到内部数据,可能导致敏感信息泄露,黑客也可以通过恶意执行
flushall
来清空所有数据 - 攻击者可通过EVAL执行lua代码,或通过数据备份功能往磁盘写入后门文件
- 如果Redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害者服务器
3 防护
Redis在网络上被黑的案例不少,Redis本身的安全性并不高,所以大家在使用Redis的时候一定要做好安全措施。
3.1 为Redis添加密码验证
我们可以通过修改redis.conf
文件来为Redis添加密码验证
requirepass mypassword
3.2 禁止外网访问 Redis
我们可以通过修改redis.conf
文件来使得Redis服务只在当前主机可用
bind 127.0.0.1
还可以通过防火墙等进行配置,如果是云服务器安全组也可以进行配置。
3.3 禁止使用Root权限启动
使用Root权限去运行网络服务是比较有风险的,所以不建议使用Root权限启动Redis。加固建议如下:
useradd -s /sbin/nolog -M redis
sudo -u redis /<redis-server-path>/redis-server /<configpath>/redis.conf
3.3.1 修改默认的监听端口
Redis默认监听的端口为6379,为了更好地隐藏服务,我们可以在redis.conf
中修改Redis的监听端口。找到包含port的行,将默认的6379改为其他自定义的端口号,然后重启Redis。
port 6379