请选择 进入手机版 | 继续访问电脑版
查看: 109|回复: 0

【平安防范意识】阿里云对Redis漏洞提权Root的描述

[复制链接]

104

主题

104

帖子

334

积分

中级会员

Rank: 3Rank: 3

积分
334
发表于 2022-10-29 16:08:22 | 显示全部楼层 |阅读模式


黑客攻击

前言

要想成为一名优秀的程序员,除了扎实的基本功不可缺少的因素外,还有一个更不可忽视的潜意识。

那就是——安全意识!

为什么说安全防范意识会成为另一个不可或缺的因素?慢慢听我说。

服务器被植入木马



linux

实际上,这发生在几天前。

公司需要在Linux服务器上部署一个新系统,这个任务分配给了某位同事,该同事使用Redis作为缓存服务。

系统跑了几天,正常运行没有任何意外,但是突然有一天,Redis服务无法响应!包括其他局域网的服务器也在陆续招募中。

紧接着,我赶紧开始查看 ps -er 查看当前启动的所有进程,但是找不到之前正常运行的服务。并且可以看到当前服务器指标运行在高位,CPU达到了98%。

一开始以为是服务器负载太高,或者是服务器内存不够导致进程崩溃,于是干脆清理了服务,重启了异常停止的进程。但此时无法启动任何服务,所有停止的服务再启动时都会报端口占用错误日志。



病毒

我意识到这应该是一个病毒,被黑了。

于是我立马开始查毒,果然在crontab -l中找到了一个定时任务,每隔15秒访问一个调用一次(具体地址就不透露了,以防朋友中了木马)

挖矿病毒

对于病毒检测,我毕竟不是专业的运维人员,后来交由运维小伙伴来解决。

很多人看到这里,以为问题解决了,其实这只是一种状态的回归。只要不找到问题的原因,总会有安全隐患。

Redis 漏洞升级根

后来通过云盾分析,发现可能存在Redis漏洞升级行为。



平安分析

这里总结一下阿里云对Redis漏洞上报的描述

漏洞描述

Redis 因配置不当存在未授权访问漏洞,可被攻击者恶意利用。

在一定条件下,如果 Redis 以 root 身份运行,黑客可以将 SSH 公钥文件写入 root 账户,直接通过 SSH 登录受害服务器,获取服务器权限和数据。

一旦入侵成功,攻击者可以直接为SSH远程登录控制服务器添加账号,给用户的Redis运行环境和Linux主机带来安全隐患,如删除、泄露或加密重要数据,引发勒索事件,等等

受影响区域

不启用认证的Redis服务器开放公网

换句话说,我们的服务器被黑客入侵并作为“肉鸡”被挖掘。



矿业

挖矿本身需要更高配置的计算机来运行解密程序,而这些更高配置的计算机消耗的资源往往是巨大的。

而企业本身配置更高的服务器成为了不二之选,配置高,带宽也不错。能够黑客,而不是成为黑客的挖矿资源,这是一个胖错误!

Redis漏洞解决方案

找到问题的原因后泛目录提权,就该开始解决问题了。



解决方案

1.设置Redis的访问密码

很多人启动Redis后直接启动服务器,不加密码访问权限,这是最危险的。

在redis.conf文件中找到“requirepass”字段,在后面填写密码。

<p><pre>    requirepass !@QEJ1H23YGY233
</pre></p>
这里保证密码的复杂性。

2.绑定需要访问IP

默认情况下,redis.conf文件中的“bind 127.0.0.1”只能在本地访问,大大增强了安全性。

<p><pre>    bind 127.0.0.1
</pre></p>
但是还有另一种情况,需要将Redis挂在另一台服务器上进行多个服务器调用,增加了风险系数。

方法是把“bind 127.0.0.1”改成需要访问这个IP地址,或者直接清除,把“protected-mode yes”改成no,如果不关闭保护模式,其他服务器就不能访问了。

在redis.conf文件中找到“requirepass”字段泛目录提权,在后面填写密码。

<p><pre>    bind xxx.xxx.xxx.xxx
protected-mode no
</pre></p>
3.更改Redis端口号

更改 Redis 的端口号是为了增加 hack 的难度。

<p><pre>    port 6111
pidfile /var/run/redis_6111.pid
</pre></p>
4.隐藏重要命令

Redis没有权限分离,它的管理员账户和普通账户没有明显区别。攻击者登录后可以进行任意操作,因此需要隐藏以下重要命令:FLUSHDB、FLUSHALL、KEYS、PEXPIRE、DEL、CONFIG、SHUTDOWN、BGREWRITEAOF、BGSAVE、SAVE、SPOP、SREM、RENAME、DEBUG、EVAL。

此外,Redis 2.8.1 和 Redis 3.x(低于 3.0.2)存在 EVAL 沙盒逃逸漏洞,攻击者可以通过该漏洞执行任意 Lua 代码。

<p><pre>    # Example: 危险命令重命名 设置好UUID 自己记下来 避免以后要使用
rename-command CONFIG 这里为UUID
rename-command FLUSHALL 这里为UUID
rename-command FLUSHDB 这里为UUID
rename-command EVAL 这里为UUID
...
</pre></p>
5.最小化服务操作权限

由于安全问题,需要将系统中以root身份运行的redis服务转换为普通用户运行,以提高安全性。

1.创建普通用户

<p><pre>    #新建invoke用户组
$ groupadd invoke
#新建用户redisuser并加入invoke组中,并设置密码
$ useradd redisuser -g invoke -p XXXXX
</pre></p>
2.将redis配置文件复制到普通用户的家目录下

<p><pre>    #强制复制redis的配置文件到redisuser用户的家目录下
$ cp -rf /usr/local/redis/redis.conf /home/redisuser/
</pre></p>
3.修改配置文件中redis运行使用的相关文件目录的路径

<p><pre>    # 6111 是端口号,修改为自己自定义的端口号
pidfile /var/run/redis_6111.pid
#修改成为
pidfile /home/redisuser/run/redis_6111.pid
</pre></p>
4.在普通用户根目录下创建这个文件目录

<p><pre>    $ mkdir /home/redisuser/run
</pre></p>
5、以普通用户身份运行Redis

<p><pre>    $ su - redisuser
$ cd /home/redisuser
$ redis-server /home/redisuser/redis.conf
</pre></p>
6.设置防火墙策略

如果正常业务需要其他服务器访问Redis服务,可以使用iptables策略,只允许指定IP访问Redis服务。

<p><pre>    # xxx.xxx.xxx.xxx 为指定ip
# 6111是Redis端口号
iptables -A INPUT -s xxx.xxx.xxx.xxx -p tcp --dport 6111 -j ACCEPT
</pre></p>
结语



碰撞

本次安全事故只是我们日常开发项目中的一些案例,“XSS”、“SQL注入”等安全隐患需要我们注意。

就像一个你辛辛苦苦开发出来的产品,却因为你不注意安全措施而分崩离析。

千里之堤,毁于蚁巢!

豪侠泛目录站群程序,专业泛目录,站群,二级目录,泛站群程序!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表