一键升级OpenSSH/OpenSSL修复安全漏洞
在服务器安全运维过程中,我们经常面临这样的问题:收到高危漏洞通报(如最近的OpenSSH多个CVE漏洞),但Ubuntu系统无法通过apt直接升级到修复版本。这种情况下,传统方法需要手动编译源码,处理依赖关系,这既耗时又容易出错。
为解决这一问题,SecurityPatcher提供自动化脚本,实现一键修复多个OpenSSH/OpenSSL高危漏洞。
SecurityPatcher 是一个专注于修复 OpenSSH 和 OpenSSL 高危漏洞的一键式工具,特别针对那些无法通过包管理器(如 apt)直接升级到安全版本的 Linux 服务器环境。当您的服务器面临安全漏洞通报但无法使用标准方式升级时,SecurityPatcher 提供了一个全自动化的解决方案。

🛡️ 修复的关键漏洞
当前版本可修复以下高危安全漏洞:
| CVE 编号 | 漏洞描述 | 风险等级 | 详情 |
|---|---|---|---|
| CVE-2023-38408 | OpenSSH 代理转发远程代码执行漏洞 | 严重 | SSH-agent 的 PKCS#11 功能中存在不安全的搜索路径,如果代理被转发到攻击者控制的系统,可能导致远程代码执行 |
| CVE-2023-28531 | OpenSSH 智能卡密钥添加漏洞 | 高危 | 允许攻击者通过智能卡相关功能获取敏感信息 |
| CVE-2023-51767 | OpenSSH 身份验证绕过漏洞 | 严重 | 通过 row hammer 攻击可能导致身份验证绕过,影响 OpenSSH 9.6 及以前版本 |
| CVE-2023-51384 | OpenSSH PKCS11 目标约束漏洞 | 中危 | 添加 PKCS#11 托管的私钥时指定的目标约束可能被不完全应用 |
| CVE-2023-48795 | OpenSSH Terrapin 前缀截断攻击漏洞 | 高危 | 允许中间人攻击者截断加密的 SSH 消息,降级连接安全性 |
| CVE-2023-51385 | OpenSSH 命令注入漏洞 | 严重 | 当用户名或主机名中包含 shell 元字符且通过扩展标记引用时可能发生命令注入 |
⚙️ 技术架构
工作流程
-
环境检测与准备:
- 自动检测当前系统和 OpenSSH/OpenSSL 版本
- 创建工作目录和备份目录
- 安装必要的编译依赖
-
源码获取和验证:
- 支持从多个镜像源自动获取源码
- 支持自定义版本号(命令行参数)
- 源码完整性验证
-
备份机制:
- 自动备份现有配置到时间戳目录
- 提供回滚选项
-
安全保障机制:
- 启用 telnet 作为备用登录方式(升级期间)
- 防止因升级失败导致无法访问服务器
-
编译安装优化:
- 多核并行编译加速
- 跳过测试阶段减少时间
- 兼容性配置选项
-
安全加固配置:
- 应用针对已知漏洞的防护措施
- 配置最佳安全实践
-
自动验证:
- 服务状态检查
- 网络连接测试
- 功能验证
🚀 使用方法
基本使用
- 克隆仓库:
git clone https://github.com/blessing-gao/SecurityPatcher.git
cd SecurityPatcher
- 添加执行权限:
chmod +x openssl-auto-upgrade.sh
- 执行脚本(使用默认 OpenSSH 9.9p1 版本):
sudo ./openssl-auto-upgrade.sh
高级选项
指定 OpenSSH 和/或 OpenSSL 版本:
# 只指定 OpenSSH 版本
sudo ./openssl-auto-upgrade.sh 9.9p1# 同时指定 OpenSSH 和 OpenSSL 版本
sudo ./openssl-auto-upgrade.sh 9.9p1 3.4.1
查看帮助信息:
./openssl-auto-upgrade.sh --help
📋 脚本详解
多源下载机制
脚本使用智能下载机制,自动从多个源尝试下载,确保在某些镜像不可用时仍能成功获取源码:
# 下载文件函数,支持多源尝试
download_file() {local urls=("$@")local filename=$(basename "${urls[0]}")local download_success=0# 检查文件是否已存在于工作目录if [ -f "$filename" ]; thenlog_info "发现本地文件 $filename,将使用此文件"return 0fi# 自动尝试下载for url in "${urls[@]}"; dolog_info "正在尝试从 $url 下载..."if wget --no-check-certificate -O "$filename" "$url"; thendownload_success=1log_info "成功从 $url 下载文件"breakelselog_warn "从 $url 下载失败,尝试下一个源..."fidoneif [ $download_success -eq 0 ]; thenlog_error "所有下载源均失败,无法下载 $filename"exit 1fireturn 0
}
OpenSSH 安全配置加固
针对已知漏洞的配置修复:
# 配置安全选项
cat >> /etc/ssh/sshd_config << EOF# 安全加固配置 - 添加于$(date +%Y-%m-%d)
# 禁用SSH代理转发(减轻CVE-2023-38408风险)
AllowAgentForwarding no# 配置协议版本(只使用SSH协议版本2)
Protocol 2# 限制使用的密钥交换算法,避免使用脆弱的算法
KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256# 限制使用的加密算法
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr# 限制使用的MAC算法
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512,hmac-sha2-256# 禁用空密码
PermitEmptyPasswords no# 设置登录宽限时间
LoginGraceTime 30# 最大认证尝试次数
MaxAuthTries 3
EOF
自动测试与验证
升级后进行全面的服务测试确保正常运行:
# 测试SSH本地连接
log_step "测试SSH本地连接..."
echo "测试SSH连接到本机..." > /tmp/ssh_test_message
ssh -o ConnectTimeout=5 -o BatchMode=yes -o StrictHostKeyChecking=no localhost "echo 连接成功 > /tmp/ssh_test_result" 2>/dev/nullif [ $? -eq 0 ] && [ -f /tmp/ssh_test_result ] && grep -q "连接成功" /tmp/ssh_test_result; thenlog_info "SSH本地连接测试成功"rm -f /tmp/ssh_test_message /tmp/ssh_test_result
elselog_warn "SSH本地连接测试失败,但这可能是由于未设置SSH密钥认证"log_warn "请手动测试SSH连接!"# 询问用户SSH是否能正常连接read -p "您是否可以成功通过新的SSH连接到此服务器? (y/n): " SSH_WORKSif [ "$SSH_WORKS" != "y" ]; thenlog_error "SSH连接测试失败,请通过telnet连接进行故障排除"exit 1fi
fi
💻 系统兼容性
当前版本已在以下系统上测试:
- ✅ 已测试:Ubuntu Server 18.04/20.04/22.04
- ❓ 未测试:CentOS/RHEL 系列(计划支持)
🔧 漏洞详情与修复原理
CVE-2023-38408(OpenSSH 代理转发 RCE 漏洞)
该漏洞存在于 OpenSSH 的 SSH-agent 转发功能中,特别是在 PKCS#11 提供程序支持部分。攻击者可以通过攻击 SSH-agent 的 PKCS#11 支持在特定条件下执行远程代码。
修复原理:
- 限制 PKCS#11 提供程序的搜索路径
- 禁用 SSH 代理转发功能
- 升级到 OpenSSH 9.3p2 或更高版本
CVE-2023-48795(Terrapin 前缀截断攻击)
Terrapin 是一种针对 SSH 协议的前缀截断攻击。通过精心调整握手期间的序列号,攻击者可以在客户端或服务器不知情的情况下移除安全通道开始时发送的任意数量的消息。
修复原理:
- 禁用 ChaCha20-Poly1305 密码
- 避免使用任何带有 -etm(Encrypt-then-MAC)的算法
- 升级到 OpenSSH 9.6p1 或更高版本
CVE-2023-51385(命令注入漏洞)
此漏洞允许在用户名或主机名中包含 shell 元字符,并且该名称通过扩展标记在某些情况下被引用时发生命令注入。例如,不受信任的 Git 仓库可以有一个在用户名或主机名中包含 shell 元字符的子模块。
修复原理:
- 对用户名和主机名进行安全过滤
- 升级到 OpenSSH 9.6 或更高版本
- 对 ProxyCommand 和相关指令中的扩展标记进行安全处理
🔍 安全最佳实践
除了修复特定漏洞外,SecurityPatcher 还应用了以下安全最佳实践:
-
算法选择:
- 仅使用安全的密钥交换算法
- 仅使用强密码和 MAC 算法
- 禁用不安全的选项
-
认证控制:
- 限制认证尝试次数
- 设置合理的登录超时时间
- 禁用空密码
-
服务配置:
- 仅启用必要的功能
- 最小权限原则
- 安全日志记录
相关文章:
一键升级OpenSSH/OpenSSL修复安全漏洞
在服务器安全运维过程中,我们经常面临这样的问题:收到高危漏洞通报(如最近的OpenSSH多个CVE漏洞),但Ubuntu系统无法通过apt直接升级到修复版本。这种情况下,传统方法需要手动编译源码,处理依赖关…...
健康养生,开启新生活
在饮食上,应遵循 “均衡搭配、清淡少盐” 的原则。主食不要只吃精米白面,可适当加入燕麦、糙米等全谷物,为身体补充膳食纤维;每天保证一斤蔬菜半斤水果,深色蔬菜如菠菜、西兰花富含维生素与矿物质,水果则选…...
VLAN间通讯技术
多臂路由 路由器使用多条物理线路,每条物理线路充当一个 VLAN 的网管 注意:路由器对端的交换机接口,需要设定 Access 类型,因为路由器的物理接口无法处理 VLAN 标签 。 单臂路由 使用 以太网子接口 (sub-interface) 实现。 …...
利用Stream和OpenAI构建基于RAG的AI客服聊天机器人
利用Stream和OpenAI构建基于RAG的AI客服聊天机器人 尽管大语言模型经过海量数据训练,但其领域专业知识仍有限。这一局限使其在需要特定数据的客服聊天机器人等应用中表现欠佳。 检索增强生成(RAG)通过让大语言模型访问外部知识源来生成更精准的响应,有效解决了这一问题。…...
Easysearch Rollup 相比 OpenSearch Rollup 的优势分析
背景 在处理时序数据时,Rollup 功能通过数据聚合显著降低存储成本,并提升查询性能。Easysearch 与 OpenSearch 均提供了 Rollup 能力,但在多个关键维度上,Easysearch Rollup 展现出更优的表现。本文将从查询体验、索引管理、聚合…...
如何远程访问家中服务器-FRP内网穿透详细
💡 本文会带给你 如何远程访问家中服务器FRP自动运行的方法一、准备工作 准备一台具备公网 IP 的服务器(如阿里云、腾讯云等云服务器,要求不高,几十块一年服务的轻型服务就行),用于部署 FRP 服务端(frps)。 家中电脑(内网设备),用于运行 FRP 客户端(frpc)。 下…...
EMIF详解
一、EMIF的基本定义 EMIF(External Memory Interface,外部存储器接口) 是嵌入式处理器(如DSP、FPGA、SoC)用于连接外部存储器的专用硬件接口模块,负责管理处理器与存储器之间的地址/数据总线、控制信号及时…...
人工智能在慢病管理中的具体应用全集:从技术落地到场景创新
一、AI 赋能慢病管理:技术驱动医疗革新 1.1 核心技术原理解析 在当今数字化时代,人工智能(AI)正以前所未有的态势渗透进医疗领域,尤其是在慢性病管理方面,展现出巨大的潜力和独特优势。其背后依托的机器学习、深度学习、自然语言处理(NLP)以及物联网(IoT)与可穿戴设…...
B+树节点与插入操作
B树节点与插入操作 设计B树节点 在设计B树的数据结构时,我们首先需要定义节点的格式,这将帮助我们理解如何进行插入、删除以及分裂和合并操作。以下是对B树节点设计的详细说明。 节点格式概述 所有的B树节点大小相同,这是为了后续使用自由…...
4.20刷题记录(单调栈)
第一部分:简单介绍 单调栈我的理解是在栈中存储数字出现的位置,然后通过遍历比较当前栈顶元素与当前元素的大小关系,从而确定逻辑相关顺序。 第二部分:真题讲解 (1)739. 每日温度 - 力扣(Lee…...
线性回归之多项式升维
文章目录 多项式升维简介简单案例实战案例多项式升维优缺点 多项式升维简介 多项式升维(Polynomial Expansion)是线性回归中一种常用的特征工程方法,它通过将原始特征进行多项式组合来扩展特征空间,从而让线性模型能够拟合非线性关…...
【上位机——MFC】运行时类信息机制
运行时类信息机制的使用 类必须派生自CObject类内必须添加声明宏DECLARE_DYNAMIC(theClass)3.类外必须添加实现宏 IMPLEMENT_DYNAMIC(theClass,baseClass) 具备上述三个条件后,CObject::IsKindOf函数就可以正确判断对象是否属于某个类。 代码示例 #include <…...
POSIX多线程,解锁高性能编程
在计算机编程的广阔领域中,POSIX 标准就像是一把通用的钥匙,开启了跨平台编程的大门。POSIX,即 Portable Operating System Interface(可移植操作系统接口) ,是 IEEE 为了规范各种 UNIX 操作系统提供的 API…...
利用TCP+多进程技术实现私聊信息
服务器: import socket from multiprocessing import Process from threading import Threaduser_dic {}def send_recv(client_conn, client_addr):while 1:# 接收客户端发送的消息res client_conn.recv(1024).decode("utf-8")print("客户端发送…...
颠覆传统!毫秒级响应的跨平台文件同步革命,远程访问如本地操作般丝滑
文章目录 前言1. 安装Docker2. Go File使用演示3. 安装cpolar内网穿透4. 配置Go File公网地址5. 配置Go File固定公网地址 前言 在这个信息爆炸的时代,谁不曾遭遇过类似的窘境呢?试想,当你正于办公室中埋首案牍时,手机突然弹出一…...
CrewAI Community Version(一)——初步了解以及QuickStart样例
目录 1. CrewAI简介1.1 CrewAI Crews1.2 CrewAI Flows1.3 Crews和Flows的使用情景 2. CrewAI安装2.1 安装uv2.2 安装CrewAI CLI 3. 官网QuickStart样例3.1 创建CrewAI Crews项目3.2 项目结构3.3 .env3.4 智能体角色及其任务3.4.1 agents.yaml3.4.2 tasks.yaml 3.5 crew.py3.6 m…...
蓝桥杯 18.分考场
分考场 原题目链接 题目描述 有 n 个人参加某项特殊考试。 为了公平,要求任何两个认识的人不能分在同一个考场。 你的任务是求出最少需要分几个考场才能满足这个条件。 输入描述 第一行:一个整数 n,表示参加考试的人数(1 ≤…...
1. ubuntu20.04 终端实现 ros的输出 (C++,Python)
本节对应赵虚左ROS书籍的1.3.1-->1.3.3 1)创建一个工作空间 2)创建一个功能包和导入依赖 3)编辑源文件 4)编辑配置文件 5)编译和执行 1)创建一个工作空间 mkdir -p catkin_ws/src cd catkin_ws ca…...
Nginx下搭建rtmp流媒体服务 并使用HLS或者OBS测试
所需下载地址: 通过网盘分享的文件:rtmp 链接: https://pan.baidu.com/s/1t21J7cOzQR1ASLrsmrYshA?pwd0000 提取码: 0000 window: 解压 win目录下的 nginx-rtmp-module-1.2.2.zip和nginx 1.7.11.3 Gryphon.zip安装包,解压时选…...
vue vite打完包后依然想保留某个文件夹下的console.log方便以后的观察的详细做法
首先需要安装包 npm i terser rollup/plugin-strip 具体的包如下: "rollup/plugin-strip": "^3.0.4","terser": "^5.39.0", // 这个不用也行 如果不用则需要将build中的minify和terserOptions一并删除了然后在vite.co…...
Lateral 查询详解:概念、适用场景与普通 JOIN 的区别
1. 什么是Lateral查询? Lateral查询(也称为横向关联查询)是一种特殊的子查询,允许子查询中引用外层查询的列(即关联引用),并在执行时逐行对外层查询的每一行数据执行子查询。 语法上通常使用关…...
[langchain教程]langchain03——用langchain构建RAG应用
RAG RAG过程 离线过程: 加载文档将文档按一定条件切割成片段将切割的文本片段转为向量,存入检索引擎(向量库) 在线过程: 用户输入Query,将Query转为向量从向量库检索,获得相似度TopN信息将…...
Web 前端包管理工具深度解析:npm、yarn、pnpm 全面对比与实战建议
引言: 在现代web前端开发中,包管理工具的重要性不言而喻,无论是构建项目脚手架,安装ui库,管理依赖版本,还是实现monorepo项目结构,一个高效稳定的包管理工具都会大幅提升开发体验和协作效率 作为一名前端工程师,深入了解这些工具背后的机制与差异,对于提升项目可维护性和团队…...
【springsecurity oauth2授权中心】简单案例跑通流程 P1
项目被拆分开,需要一个授权中心使得每个项目都去授权中心登录获取用户权限。而单一项目里权限使用的是spring-security来控制的,每个controller方法上都有 PreAuthorize("hasAuthority(hello)") 注解来控制权限,想以最小的改动来实…...
spark—SQL3
连接方式 内嵌Hive: 使用时无需额外操作,但实际生产中很少使用。 外部Hive: 在虚拟机下载相关配置文件,在spark-shell中连接需将hive-site.xml拷贝到conf/目录并修改url、将MySQL驱动copy到jars/目录、把core-site.xml和hdfs-sit…...
Linux-scp命令
scp(Secure Copy Protocol)是基于 SSH 的安全文件传输命令,用于在本地和远程主机之间加密传输文件或目录。以下是详细用法和示例: 基本语法 scp [选项] 源文件 目标路径常用选项 选项描述-P 端口号指定 SSH 端口(默认…...
【PyQt5】@QtCore.pyqtSlot()的作用
在 PyQt5 中,QtCore.pyqtSlot() 是一个装饰器,用于将普通的 Python 方法标记为 可被信号连接的槽函数。它的主要作用是: 1. 标识槽函数 核心作用:告诉 PyQt 这个方法是一个槽(Slot),可以被信号…...
Go语言中的Context
目录 Go语言中的Context 1. Context的基本概念 1.1 Context的核心作用 2. Context的基本用法 2.1 创建Context 背景Context 可取消的Context 带有超时的Context 2.2 在Goroutine间传递Context 2.3 获取Context的值 为Context添加自定义数据 访问Context中的值 3. C…...
小刚说C语言刷题——1039 求三个数的最大数
1.题目描述 已知有三个不等的数,将其中的最大数找出来。 输入 输入只有一行,包括3个整数。之间用一个空格分开。 输出 输出只有一行(这意味着末尾有一个回车符号),包括1个整数。 样例 输入 1 5 8 输出 8 2.…...
一文了解相位阵列天线中的真时延
本文要点 真时延是宽带带相位阵列天线的关键元素之一。 真时延透过在整个信号频谱上应用可变相移来消除波束斜视现象。 在相位阵列中使用时延单元或电路板,以提供波束控制和相移。 市场越来越需要更快、更可靠的通讯网络,而宽带通信系统正在努力满…...
