防范措施:1. 修改Redis默认端口6379,避免扫描攻击;2. 绑定本地IP或指定IP,只允许内部访问;3. 设置强密码,使用requirepass配置;4. 启用TLS加密传输数据;5. 使用防火墙如iptables限制6379端口访问,只开放信任IP;6. 禁用危险命令如CONFIG、FLUSHALL;7. 定期更新Redis版本补丁;8. 部署在隔离网络环境中。
来源1
黑客常用方式是扫描开放的6379端口,直接连接无认证Redis,执行CONFIG SET dir /var/spool/cron/ 和CONFIG SET dbfilename root.sh,然后写公钥到crontab实现反弹shell。防范:关闭远程访问,只允许本地连接127.0.0.1;或者用防火墙iptables -A INPUT -s 127.0.0.1 -p tcp --dport 6379 -j ACCEPT,其他拒绝。
来源2
Redis如果未设置密码,黑客可通过redis-cli -h target_ip执行命令:redis-cli flushall;keys * 查看数据;config set stop-writes-on-bgsave-error no;最后写webshell。安全策略:requirepass yourpassword 在redis.conf中设置密码,重启生效;测试时用redis-cli -a yourpassword连接。
来源3
利用方式:nc target_ip 6379后输入*3$3set$1x$4$?* config$3set$3dir$?/tmp/ config$3set$3dbfilename$10root.sh等payload写文件。防范:端口转发到本地,ssh -L 6379:localhost:6379 user@server,只本地访问;或用docker运行Redis,限制网络。
来源4
常见入侵:Redis监听0.0.0.0:6379无认证,黑客写cron任务反弹shell。保护数据:1. rename-command CONFIG "" 禁用CONFIG命令;2. protected-mode yes 启用保护模式;3. bind 127.0.0.1 只监听本地;4. 使用ACL用户权限控制,如user default on nopass ~* &* +@all -危险命令。
来源5
黑客脚本自动化扫描6379端口,注入payload:echo -e "\x2a\x33\x2a\x33\x73\x65\x74\x31\x78\x34\x0a\x2f\x76\x61\x72\x2f\x73\x70\x6f\x6f\x6c\x2f\x63\x72\x6f\x6e\x2f\x72\x6f\x6f\x74\n\x2a\x34\x2a\x38\x63\x6f\x6e\x66\x69\x67\x20\x73\x65\x74\x20\x64\x69\x72\x20\x2f\x76\x61\x72\x2f\x73\x70\x6f\x6f\x6c\x2f\x63\x72\x6f\x6e\x2f\n" | nc ip 6379。防范策略:u fw规则iptables -P INPUT DROP;iptables -A INPUT -p tcp -s 信任IP --dport 6379 -j ACCEPT。
来源6
数据安全选择:启用AOF持久化避免数据丢失;使用Sentinel高可用集群;部署在Kubernetes中用NetworkPolicy限制流量;监控日志用Prometheus+Grafana检测异常访问;定期备份数据到安全存储。
来源7
FAQ:
Q: Redis端口默认是多少?
A: 6379,不要暴露公网。
Q: 如何快速设置密码?
A: 编辑redis.conf加requirepass 密码,重启服务。
Q: 禁用哪些命令最重要?
A: CONFIG、FLUSHALL、FLUSHDB、DEBUG。
Q: 防火墙怎么配置?
A: iptables -A INPUT -p tcp --dport 6379 -s 192.168.1.0/24 -j ACCEPT; iptables -A INPUT -p tcp --dport 6379 -j DROP。