Redis 未授权访问原理与防御

理解 Redis 未授权访问的成因、风险链路和常见利用面,总结绑定地址、密码、网络隔离、审计日志等防御措施。

写在前面:合法学习边界

本文只讲原理和防御。Redis 未授权访问属于高风险问题,未经授权读取、写入、修改、配置或控制 Redis 服务都可能造成安全事故。

一、为什么 Redis 容易出问题

Redis 常用于缓存、队列和会话存储。如果配置不当,可能直接暴露到公网,造成严重风险。

常见错误配置:

1
2
3
4
bind 0.0.0.0
无 requirepass
未启用 ACL
公网端口暴露

二、风险链路

如果 Redis 未授权且公网可访问,攻击者可能:

1
2
3
4
5
读取敏感缓存
写入恶意配置
写计划任务
写 SSH 公钥
篡改业务数据

因此 Redis 不应默认暴露在公网。

三、常见表现

1
2
3
4
6379/tcp open
Redis 服务无认证
CONFIG 命令可用
SET/GET 命令可访问

在授权测试中,可以验证:

1
2
3
是否存在认证要求
是否能读取敏感 key
是否能写文件

但只能在授权环境中进行。

影响与危害

Redis 未授权访问能造成:

1
2
3
4
数据泄露与篡改
写入 crontab/SSH key 实现服务器接管(配合写入)
内网横向
勒索/清空数据

风险等级:高到严重。

四、防御建议

1. 绑定内网地址

1
bind 127.0.0.1 或内网地址

2. 启用密码

1
requirepass

3. 使用 ACL

限制命令和 key 访问范围。

4. 网络隔离

不要把 Redis 直接暴露公网。

5. 开启审计日志

记录配置变更、敏感命令和异常访问。

6. 最小权限

应用只给需要的读写能力。

修复

1
2
3
4
5
开启 requirepass 设置强密码
bind 限制监听地址,禁止 0.0.0.0
禁用危险命令(CONFIG/SLAVEOF/DEBUG 等改名或禁用)
用防火墙/安全组限制 6379 暴露
修复后复测:无密码无法访问、危险命令被拒

验证操作步骤

1
2
3
4
第 1 步:端口扫描确认 6379 开放
第 2 步:redis-cli/nc 连接,执行 ping 或 CONFIG GET dir
第 3 步:无需认证即确认未授权
第 4 步:进一步验证写入能力(授权内)

五、报告中的正确写法

示例:

1
2
3
发现:6379/tcp 端口开放,Redis 服务未配置认证。
风险:可能导致敏感数据泄露、配置篡改、计划任务写入或服务器控制。
建议:限制监听地址;启用 requirepass;使用 ACL;隔离网络;补充审计日志。

六、小结

Redis 最大的问题通常不是软件本身,而是网络暴露和认证缺失。安全重点是“不要公网裸奔”。