当前位置: 首页 > news >正文

一键升级OpenSSH/OpenSSL修复安全漏洞

在服务器安全运维过程中,我们经常面临这样的问题:收到高危漏洞通报(如最近的OpenSSH多个CVE漏洞),但Ubuntu系统无法通过apt直接升级到修复版本。这种情况下,传统方法需要手动编译源码,处理依赖关系,这既耗时又容易出错。

为解决这一问题,SecurityPatcher提供自动化脚本,实现一键修复多个OpenSSH/OpenSSL高危漏洞。

SecurityPatcher 是一个专注于修复 OpenSSH 和 OpenSSL 高危漏洞的一键式工具,特别针对那些无法通过包管理器(如 apt)直接升级到安全版本的 Linux 服务器环境。当您的服务器面临安全漏洞通报但无法使用标准方式升级时,SecurityPatcher 提供了一个全自动化的解决方案。

在这里插入图片描述

🛡️ 修复的关键漏洞

当前版本可修复以下高危安全漏洞:

CVE 编号漏洞描述风险等级详情
CVE-2023-38408OpenSSH 代理转发远程代码执行漏洞严重SSH-agent 的 PKCS#11 功能中存在不安全的搜索路径,如果代理被转发到攻击者控制的系统,可能导致远程代码执行
CVE-2023-28531OpenSSH 智能卡密钥添加漏洞高危允许攻击者通过智能卡相关功能获取敏感信息
CVE-2023-51767OpenSSH 身份验证绕过漏洞严重通过 row hammer 攻击可能导致身份验证绕过,影响 OpenSSH 9.6 及以前版本
CVE-2023-51384OpenSSH PKCS11 目标约束漏洞中危添加 PKCS#11 托管的私钥时指定的目标约束可能被不完全应用
CVE-2023-48795OpenSSH Terrapin 前缀截断攻击漏洞高危允许中间人攻击者截断加密的 SSH 消息,降级连接安全性
CVE-2023-51385OpenSSH 命令注入漏洞严重当用户名或主机名中包含 shell 元字符且通过扩展标记引用时可能发生命令注入

⚙️ 技术架构

工作流程

  1. 环境检测与准备

    • 自动检测当前系统和 OpenSSH/OpenSSL 版本
    • 创建工作目录和备份目录
    • 安装必要的编译依赖
  2. 源码获取和验证

    • 支持从多个镜像源自动获取源码
    • 支持自定义版本号(命令行参数)
    • 源码完整性验证
  3. 备份机制

    • 自动备份现有配置到时间戳目录
    • 提供回滚选项
  4. 安全保障机制

    • 启用 telnet 作为备用登录方式(升级期间)
    • 防止因升级失败导致无法访问服务器
  5. 编译安装优化

    • 多核并行编译加速
    • 跳过测试阶段减少时间
    • 兼容性配置选项
  6. 安全加固配置

    • 应用针对已知漏洞的防护措施
    • 配置最佳安全实践
  7. 自动验证

    • 服务状态检查
    • 网络连接测试
    • 功能验证

🚀 使用方法

基本使用

  1. 克隆仓库:
git clone https://github.com/blessing-gao/SecurityPatcher.git
cd SecurityPatcher
  1. 添加执行权限:
chmod +x openssl-auto-upgrade.sh
  1. 执行脚本(使用默认 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 还应用了以下安全最佳实践:

  1. 算法选择

    • 仅使用安全的密钥交换算法
    • 仅使用强密码和 MAC 算法
    • 禁用不安全的选项
  2. 认证控制

    • 限制认证尝试次数
    • 设置合理的登录超时时间
    • 禁用空密码
  3. 服务配置

    • 仅启用必要的功能
    • 最小权限原则
    • 安全日志记录

相关文章:

  • 第十一章:多 Agent 系统:复杂协作、挑战与智能涌现
  • -实用类-
  • 基于若依开发公网访问项目
  • 【网络】通过Samba实现Window挂在Linux服务器路径
  • 数字图像处理知识点小记1
  • 力扣每日一题781题解-算法:贪心,数学公式 - 数据结构:哈希
  • stm32 13位时间戳转换为时间格式
  • 蒋一侨《乘风2025》绽放多面魅力:突破自我便有无限可能!
  • Java编程基础(第二篇:类的基本创建)
  • 对于校园网如何进行用户识别——captive portal的原理学习总结
  • 星拍相机APP:时尚与科技的完美融合,打造你的专属美
  • 第35讲:构建属于自己的遥感大模型平台,并接入地理数据工作流
  • 6. 字符串
  • Kubernetes控制平面组件:调度器Scheduler(二)
  • AI书籍大模型微调-基于亮数据获取垂直数据集
  • 解决Docker 配置 daemon.json文件后无法生效
  • 【KWDB 创作者计划】_上位机知识篇---ESP32-S3Arduino
  • seata db模式,nacos注册中心,spring boot ,spring cloud ,jdk1.8 完成的配置步骤
  • 利用 HEMT 和 PHEMT 改善无线通信电路中的增益、速度和噪声
  • ​opencv图像库编程
  • 电子产品已拆封,还能申请“七天无理由退货”吗?上海法院这样判
  • 南部战区回应菲护卫艇非法侵入中国黄岩岛领海:依法警告驱离
  • 义乌女老板对CNN霸气喊话:美国要货就给,不要就分给其他客户
  • 85岁眼科专家、武汉大学人民医院原眼科主任喻长泰逝世
  • 对话地铁读书人|来自法学教授的科普:读书日也是版权日
  • 正义网评“一男两女举办婚礼”:“一夫多妻”流量闹剧该歇了