暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

redis 安全措施修改

一笑而起 2021-03-25
1166

Redis是一套开源的使用ANSIC编写、支持网络、可基于内存亦可持久化的日志型、键值存储数据库,并提供多种语言的API。Redis默认情况下会开启6379端口,在未开启认证的情况下,可导致任意用户在可以访问目标服务器的情况下未授权访问Redis,读取Redis的数据。该漏洞在较早前就已经被发现,而近期研究者给出了更为危险的利用方法。攻击者可利用Redis的相关方法,将自己的公钥写入目标服务器 /root/.ssh 文件夹的authotrized_keys文件中,进而可以直接登录目标服务器。CNVD对该漏洞的综合评级为“高危”。


生产环境中经常要设置redis的登陆密码,来保证数据的安全。

  1. 查看redis进程:ps -ef | grep redis

  2. 根据上一步可以获取redis的进程pid,如果对环境不熟悉,可以通过lsof -p:pid 的方式获取该redis进程的部署路径

  3. 根据得到的部署路径进入redis

单节点修改或增加密码

  1. 通过info replication命令,可以确认该redis是否为集群;如果是单节点部署参考本节如下步骤:

  2. 修改redis.conf文件,增加 【 requirepass  password

-- 关闭redis

redis-cli -h ip -p port shutdown

-- 启动redis

redis-server /usr/local/redis/redis.conf &

-- 登陆并验证redis

redis-cli -h ip -p port

> keys * (这会提示没有权限)

>auth password

>keys *

主从集群模式修改

基本同上。配置修改注意:

从库:masterauth password

主从+哨兵 修改

从库:masterauth password

哨兵配置文件:sentinel auth-pass mymaster password

注意:auth-pass 配置要在 monitor的配置下面

集群模式

集群模式下,所有节点的配置文件均需要增加:

## SECURITY ##

requirepass "password"

## REPLICATION ##

masterauth "password"

查看集群信息:cluster info;cluster nodes;

集群启停:分别修改各个redis节点,在启动各个redis节点即可



参数说明:

masterauth

当master服务设置了密码保护时,slav服务连接master的密码

requirepass password

设置Redis连接密码,如果配置了连接密码,客户端在连接Redis时需要通过AUTH 命令提供密码,默认关闭

slaveof

设置当本机为slave服务时,设置master服务的IP地址及端口,在Redis启动时,它会自动从master进行数据同步

sentinel auth-pass mymaster password

哨兵模式的配置


Redis未授权访问漏洞的防护

禁止远程使用一些高危命令

修改 redis.conf 文件,添加

rename-command FLUSHALL ""

rename-command FLUSHDB ""

rename-command CONFIG ""

rename-command KEYS ""

rename-command SHUTDOWN ""

rename-command DEL ""

rename-command EVAL ""


打开保护模式 修改bind

Redis监听在0.0.0.0,可能导致服务对外或内网横向移动渗透风险,极易被黑客利用入侵

bind 127.0.0.1或者内网IP

redis默认开启保护模式。要是配置里没有指定bind和密码,开启该参数后,redis只能本地访问,拒绝外部访问

protected-mode yes


附阿里云redis基线:供参考

名称

描述

加固建议

开启redis密码认证,并设置高复杂度密码

redis在redis.conf配置文件中,设置配置项requirepass, 开户密码认证。redis因查询效率高,auth这种命令每秒能处理9w次以上,简单的redis的密码极容易为攻击者暴破。

打开redis.conf,找到requirepass所在的地方,修改为指定的密码,密码应符合复杂性要求:

1、长度8位以上

2、包含以下四类字符中的三类字符:

英文大写字母(A 到 Z)

英文小写字母(a 到 z)

10 个基本数字(0 到 9)

非字母字符(例如 !、$、#、%、@、^、&)

3、避免使用已公开的弱密码,如:abcd.1234 、admin@123等

再去掉前面的#号注释符,然后重启redis

禁止监听在公网

Redis监听在0.0.0.0,可能导致服务对外或内网横向移动渗透风险,极易被黑客利用入侵。

在redis的配置文件redis.conf中配置如下:bind 127.0.0.1或者内网IP,然后重启redis

禁止使用root用户启动

使用root权限去运行网络服务是比较有风险的(nginx和apache都是有独立的work用户,而redis没有)。redis crackit 漏洞就是利用root用户的权限来替换或者增加authorized_keys,来获取root登录权限的

使用root切换到redis用户启动服务:

useradd -s /sbin/nolog -M redis

sudo -u redis /<redis-server-path>/redis-server /<configpath>/redis.conf

限制redis 配置文件访问权限

因为redis密码明文存储在配置文件中,禁止不相关的用户访问配置文件是必要的,设置redis配置文件权限为600

执行以下命令修改配置文件权限:chmod 600 /<filepath>/redis.conf

修改默认6379端口

避免使用熟知的端口,降低被初级扫描的风险

编辑文件redis的配置文件redis.conf,找到包含port的行,将默认的6379修改为自定义的端口号,然后重启redis

禁用或者重命名危险命令

Redis线上使用keys *命令,也是非常危险的。因此线上的Redis必须考虑禁用一些危险的命令,或者尽量避免谁都可以使用这些命令,Redis没有完整的管理系统,但是也提供了一些方案。

修改 redis.conf 文件,添加

rename-command FLUSHALL ""

rename-command FLUSHDB ""

rename-command CONFIG ""

rename-command KEYS ""

rename-command SHUTDOWN ""

rename-command DEL ""

rename-command EVAL ""

然后重启redis。重命名为"" 代表禁用命令,如想保留命令,可以重命名为不可猜测的字符串,如: rename-command FLUSHALL joYAPNXRPmcarcR4ZDgC

打开保护模式

redis默认开启保护模式。要是配置里没有指定bind和密码,开启该参数后,redis只能本地访问,拒绝外部访问。

redis.conf安全设置:# 打开保护模式 protected-mode yes


文章转载自一笑而起,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论