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…...

全面了解机器学习
目录 一、基本认识 1. 介绍 2. 机器学习位置 二、机器学习的类型 1. 监督学习 2. 无监督学习 3. 强化学习 三、机器学习术语 1. 训练样本 2. 训练 3. 特征 4. 目标 5. 损失函数 四、机器学习流程 五、机器学习算法 1. 分类算法 2. 聚类算法 3. 关联分析 4. …...

作为图形渲染API,OpenGL和Direct3D的全方位对比。
当你在网页看到很多美轮美奂的图形效果,3D交互效果,你知道是如何实现的吗?当然是借助图形渲染API了,说起这个不就不得说两大阵营,OpenGL和Direct3D,贝格前端工场在本文对二者做个详细对比。 一、什么是图形…...

安装Rabbitmq遇到的坑
!!!一定要对号版本号 不同的虚拟机unbontu、cetenos和不同的erlang和不同的rabbitmq之间要对应下载对应版本 下面给出我的版本centos7erlangrabbitmq 分割线 安装好后,如果在虚拟机的服务器上可以打开,在本地浏览器…...

React+TS 从零开始教程(4):useEffect
上一节传送门:ReactTS 从零开始教程(3):useState 源码链接:https://pan.quark.cn/s/c6fbc31dcb02 上一节,我们已经学会了React的第一个Hook:useState。 这一节,我们要学习的是另一…...

网络安全学习路线图(2024版详解)
近期,大家在网上对于网络安全讨论比较多,想要学习的人也不少,但是需要学习哪些内容,按照什么顺序去学习呢?其实我们已经出国多版本的网络安全学习路线图,一直以来效果也比较不错,本次我们针对市…...

你了解人工智能吗?
前言 人工智能(Artificial Intelligence,AI)是计算机科学的一个重要分支,致力于开发能够执行通常需要人类智能的任务的系统。本文将从历史发展、关键技术、应用领域以及未来挑战等方面,深入探讨人工智能的相关内容。 …...

如何使用Vue.js实现动态文档生成与下载功能
在现代Web应用开发中,用户往往需要在浏览器端完成复杂的操作,如生成和下载特定格式的文档,而无需服务器直接干预。本文将以一个Vue.js应用程序为例,详细介绍如何利用axios(或自定义请求模块)结合FileReader…...

web基础及http协议
一、WEB:就是我们所说的页面,点开的每个页面都是web。(全球广域网、万维网) 分布式图形信息系统:同一个服务,但是部署在不同的机器上且提供的服务和内容全部一致,集群就是建立在分布式的基础上。…...

【vuejs】vue-router 之 addRoute 动态路由的应用总结
1. Vue Router 概述 Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用。它与 Vue.js 深度集成,让开发者能够轻松地构建具有复杂用户界面的单页面应用。Vue Router 允许你定义不同的路由,并通过 router-view 组件在应用中显示匹配的…...

LeetCode 30. 串联所有单词的子串
LeetCode 30. 串联所有单词的子串 给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。 s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。 例如,如果 words [“ab”,“cd”,“ef”], 那么 “abcd…...