OpenSSH远程代码执行漏洞 (CVE-2024-6387)
1. 前言
OpenSSH是一套基于安全外壳(SSH)协议的安全网络实用程序,它提供强大的加密功能以确保隐私和安全的文件传输,使其成为远程服务器管理和安全数据通信的必备工具。
OpenSSH 自 1995 年问世近 20 年来,首次出现了未经验证的远程执行(RCE)漏洞,攻击者可以提权至 root 最高权限,在不需要用户交互的情况下执行任意代码。
该漏洞是由于OpenSSH服务器 (sshd) 中的信号处理程序竞争问题,未经身份验证的攻击者可以利用此漏洞在Linux系统上以root身份执行任意代码。
2. 漏洞信息
2.1 发现
该漏洞于今年 5 月被网络安全公司 Qualys 发现,追踪编号为 CVE-2024-6387,存在于 OpenSSH 服务器(sshd)中,由于信号处理器竞赛条件存在缺陷,可以让未经认证的远程攻击者以 root 用户身份执行任意代码。
2.2 相关公告
Debian 安全公告:
如果客户端没有在 LoginGraceTime 秒(默认为 120 秒)内通过身份验证,那么 sshd 的 SIGALRM 处理程序就会被异步调用,并调用各种不安全的异步信号函数。
Qualys 公司的公告:
攻击者利用该漏洞,可以让系统全面瘫痪,以 root 最高级别权限全面接管系统,安装恶意软件、篡改数据和创建后门便于后续访问等等。
而且攻击者可以利用该漏洞发起连锁攻击,以已经被入侵的系统为立足点,辐射攻击网络中其它存在问题的设备。
奇安信公司的安全风险通告:
2.2技术细节
以下是我对Qualys 提供的技术文档的总结。
CVE-2024-6387是一个影响OpenSSH服务器的漏洞(sshd),存在于glibc基础的Linux系统上。这一漏洞源于一个信号处理竞态条件,当客户端未在指定的LoginGraceTime秒内完成认证时,sshd的SIGALRM信号处理程序会被异步调用,而这个信号处理程序调用了非异步信号安全的函数(如syslog())。这个漏洞的重现来源于2006年报道的CVE-2006-5051漏洞。
影响版本
- OpenSSH < 4.4p1:若未对CVE-2006-5051完成补丁,容易受到这个信号处理竞态条件的影响。
- 4.4p1 <= OpenSSH < 8.5p1:不受此漏洞影响。
- 8.5p1 <= OpenSSH < 9.8p1:由于2020年10月的一个错误提交重新引入了这个漏洞。
漏洞细节及利用
- 信号处理竞态条件:当sshd的LoginGraceTime到期后,其SIGALRM处理程序会调用syslog()等非异步信号安全的函数,从而导致潜在的远程代码执行(RCE)。
利用方式
-
理论研究:
- 找到一个有用的代码路径,如果在正确的时间被SIGALRM打断,那么sshd会处于一种不一致的状态,然后利用这种不一致状态进行攻击。
-
实践经验:
- 通过中断sshd的公钥解析代码中的free()调用,造成堆中内存状态不一致。
- 利用这种不一致状态在SIGALRM处理程序的另一个free()调用中实现远程代码执行。
时间策略
-
旧版本攻击:
- SSH-2.0-OpenSSH_3.4p1:通过实践发现平均需要约10,000次尝试来赢得竞态条件,最终大约需要一周时间获得远程root shell。
- SSH-2.0-OpenSSH_4.2p1:类似的方法大约需要1-2天获得远程root shell。
-
现代版本攻击:
- SSH-2.0-OpenSSH_9.2p1:
- 在SIGALRM中断malloc()调用,造成堆内存不一致。
- 利用不一致内存状态在SIGALRM处理程序中的另一个malloc()调用(尤其在syslog()内部)。
- 平均需要10,000次尝试约3-4小时以内实现,最终6-8小时内获得远程root shell。
- SSH-2.0-OpenSSH_9.2p1:
针对amd64的利用前景
- 计划针对Rocky Linux 9进行攻击,利用glibc映射的地址特点及malloc系列函数的漏洞进行远程代码执行。
修复与缓解
- 官方修复:2024年6月6日的commit(81c1099)修复了这一漏洞,改进了sshd信号处理的机制。
- 临时解决方案:对于无法立即更新或重编译的系统,可以通过配置LoginGraceTime为0来暂时规避远程代码执行问题,但会造成潜在的拒绝服务(DoS)风险。
2.3 漏洞利用
尽管该漏洞很严重,但 Qualys 称 regreSSHion 很难被利用,需要多次尝试才能实现必要的内存破坏。
Qualys 的技术文件对漏洞利用的描述如下:
由于该漏洞的远程竞态条件性质,使得利用它变得具有挑战性,需要多次尝试才能成功攻击。这可能导致内存损坏,并需要克服地址空间布局随机化(ASLR)。深度学习技术的进步可能显著提高利用率,从而为攻击者在利用此类安全漏洞时提供巨大的优势。
2.4 影响版本
8.5p1 <= OpenSSH < 9.8p1
2.5 处理建议
1. 目前官方已有可更新版本,建议受影响用户升级至最新版本:
OpenSSH > 9.8p1
官方补丁下载地址:
https://www.openssh.com/releasenotes.html
2. 使用防火墙等网络控制手段限制 SSH 访问,并实施网络分段以防止横向移动(指网络攻击者或威胁行为者在搜索最终成为攻击活动目标的关键数据和资产时用来逐步在网络中移动的技术)。
3. 如果 OpenSSH 服务器无法立即更新,可在 sshd 配置文件中将 "LoginGraceTime" 设置为 0,但要注意这可能会使服务器遭受拒绝服务攻击。
最后
这个漏洞影响极广,因为openSSH被广泛使用。漏洞成功利用后的影响也是极大的,因为可以以root身份执行任意代码。但是同时我们也发现这个漏洞利用难度很大,需要多次尝试才能实现攻击。
在如今AI时间,深度学习技术的加持可以帮助黑客显著提高漏洞利用成功率,所以这个漏洞我们不容轻视。
参考资料
Qualys博客:
regreSSHion: Remote Unauthenticated Code Execution Vulnerability in OpenSSH server | Qualys Security Blog
问题代码:
whttps://www.qualys.com/2024/07/01/cve-2024-6387/regresshion.txt
奇安信CERT
OpenSSH 远程代码执行漏洞(CVE-2024-6387)安全风险通告 (qq.com)
阿里云漏洞库
阿里云漏洞库
IT之家
相关文章:

OpenSSH远程代码执行漏洞 (CVE-2024-6387)
1. 前言 OpenSSH是一套基于安全外壳(SSH)协议的安全网络实用程序,它提供强大的加密功能以确保隐私和安全的文件传输,使其成为远程服务器管理和安全数据通信的必备工具。 OpenSSH 自 1995 年问世近 20 年来,首次出现了…...
高薪程序员必修课-java并发编程的bug源头
前言 Java并发编程虽然强大,但也容易引发复杂的bug。并发编程的bug主要源自以下几个方面:竞态条件、死锁、内存可见性问题和线程饥饿。了解这些bug的源头及其原理,可以帮助开发者避免和解决这些问题。以下是详细的讲解和相应的示例。 1. 竞态…...
c++:#include 某文件.h底层如何寻找其.cpp实现
在C中,当你编写了一个头文件(如MyLibrary.h)和对应的实现文件(如MyLibrary.cpp)时,其他源文件(如main.cpp)只需要包含头文件(#include "MyLibrary.h"ÿ…...

uniapp中如何进行微信小程序的分包
思路:在uniapp中对微信小程序进行分包,和原生微信小程序进行分包的操作基本上没区别,主要就是在pages.json中进行配置。 如图,我新增了一个包diver-page 此时需要在pages.json中的subPackages数组中新增一项 root代表这个包的根…...

win10下安装PLSQL14连接Oracle数据库
问题背景 在使用Oracle开发过程中,经常会使用工具来连接数据库,方便查询、处理数据。其中有很多工具可以使用,比如dbeaver、plsql等。本文主要介绍在win10环境下,plsql14的安装步骤以及安装过程中遇到的一些问题。 安装步骤及问题…...

高考失利咨询复读,银河补习班客服开挂回复
补习班的客服在高考成绩出来后,需要用专业的知识和足够的耐心来回复各种咨询,聊天宝快捷回复软件,帮助客服开挂回复。 前言 高考成绩出来,几家欢喜几家愁,对于高考失利的学生和家长,找一个靠谱的复读补…...

java 代码块
Java中的代码块主要有三种类型:普通代码块、静态代码块、构造代码块。它们的用途和执行时机各不相同。 普通代码块:在方法内部定义,使用一对大括号{}包围的代码片段。它的作用域限定在大括号内,每当程序执行到该代码块时就会执行其…...
vue中避免多次请求字典接口
vuex缓存所有字典项 背景vuex管理所有字典项调用字典接口处理字典项数据的filter页面中使用字典 背景 每次用到字典都需要通过对应的字典type调用一次字典接口,当一个页面用到字典项很多时,接口请求炒鸡多,会导致接口响应超时。 本篇文章改为…...

Snappy使用
Snappy使用 Snappy是谷歌开源的压缩和解压的开发包,目标在于实现高速的压缩而不是最大的压缩 项目地址:GitHub - google/snappy:快速压缩器/解压缩器 Cmake版本升级 该项目需要比较新的cmake,CMake 3.16.3 or higher is requi…...
跨越重洋:在Heroku上配置Pip镜像源的终极指南
🌐 跨越重洋:在Heroku上配置Pip镜像源的终极指南 Heroku是一个支持多种编程语言的云平台即服务(PaaS),它允许开发者部署和管理应用程序。然而,由于Heroku的服务器位于海外,直接使用Python的包管…...

SpringBoot + 虚拟线程,性能炸裂!
一、什么是虚拟线程 虚拟线程是Java19开始增加的一个特性,和Golang的携程类似,一个其它语言早就提供的、且如此实用且好用的功能,作为一个Java开发者,早就已经望眼欲穿了。 二、虚拟线程和普通线程的区别 “虚拟”线程…...

Java Character类
Character是char的包装类 转义序列 Character类的方法...
Python中的爬虫实战:猫眼电影爬虫
随着互联网技术的快速发展,网络上的信息量越来越庞大。猫眼电影作为国内领先的电影数据平台,为用户提供了全面的电影信息服务。本文将介绍如何利用python编写简单的猫眼电影爬虫,获取电影相关数据。 爬虫概述 爬虫,即网络爬虫&a…...

WAIC2024 | 华院计算邀您共赴2024年世界人工智能大会,见证未来科技革新
在智能时代的浪潮汹涌澎湃之际,算法已成为推动社会进步的核心力量。作为中国认知智能技术的领军企业,华院计算在人工智能的广阔天地中,不断探索、创新,致力于将算法的潜力发挥到极致。在过去的时日里,华院计算不断探索…...

数据库原理之数据库基本概念
目录 前言 基本概念 数据库完整性 前言 今天我们来看看数据库的基本概念,帮助大家对数据库有一点点最基本的了解 基本概念 4个基本概念 数据data:描述事物的符号,数据库中存储的基本对象。 数据库Database:长期存储在计算机…...

vue2项目的打包以及部署
打包 当我们写好vue2的项目后,可以通过npm build来对项目进行打包 npm build 打包完成后我们可以看到在当面目录下生成了dis目录,src下的文件都会被打包进这个目录里,当然打包后的文件我们不能直接在浏览器打开,需要进行部署 部署 1.新建一个…...
Java的全局异常处理代码
第一步:先写一个异常管理类: package com.example.firefighting.exceptions;import com.example.firefighting.utils.Result; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerA…...

Hi3861 OpenHarmony嵌入式应用入门--LiteOS semaphore作为锁
CMSIS 2.0 接口中的 Semaphore(信号量)是用于嵌入式系统中多线程或中断服务例程(ISR)之间同步和共享资源保护的重要机制。Semaphore 是一种用于控制对多个共享资源访问的同步机制。它可以被看作是一个计数器,用于跟踪可…...

注意!年龄越大,社交圈子越窄?其实这是老人的理性选择!数学家告诉你:何时该跳槽,何时该坚守!你必须知道的三个智慧:让你的人生更加精彩!
我们到底应该在什么情况下探索新事物,什么情况下专注于已有的东西呢?本质上来说,这个问题就是在询问,你究竟应该耗费精力去探索新的信息,还是专注从既有的信息中获取收获? 有人采访了临终的老人,…...

[SwiftUI 开发] 嵌套的ObservedObject中的更改不会更新UI
1. 发生问题的demo 业务逻辑代码 class Address: ObservableObject {Published var street "123 Apple Street"Published var city "Cupertino" }class User: ObservableObject {Published var name "Tim Cook"Published var address Addr…...

SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...

大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...

有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...

基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...

搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...