在服务器安全运维过程中,我们经常面临这样的问题:收到高危漏洞通报(如最近的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 元字符且通过扩展标记引用时可能发生命令注入 |
环境检测与准备:
源码获取和验证:
备份机制:
安全保障机制:
编译安装优化:
安全加固配置:
自动验证:
git clone https://github.com/blessing-gao/SecurityPatcher.git
cd SecurityPatcher
chmod +x openssl-auto-upgrade.sh
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" ]; then
log_info "发现本地文件 $filename,将使用此文件"
return 0
fi
# 自动尝试下载
for url in "${urls[@]}"; do
log_info "正在尝试从 $url 下载..."
if wget --no-check-certificate -O "$filename" "$url"; then
download_success=1
log_info "成功从 $url 下载文件"
break
else
log_warn "从 $url 下载失败,尝试下一个源..."
fi
done
if [ $download_success -eq 0 ]; then
log_error "所有下载源均失败,无法下载 $filename"
exit 1
fi
return 0
}
针对已知漏洞的配置修复:
# 配置安全选项
cat >> /etc/ssh/sshd_config << EOF
# 安全加固配置 - 添加于$(date +%Y-%m-%d)
# 禁用SSH代理转发(减轻CVE-2023-38408风险)
AllowAgentForwarding no
# 配置协议版本(只使用SSH协议版本2)
Protocol 2
# 限制使用的密钥交换算法,避免使用脆弱的算法
KexAlgorithms [email protected],diffie-hellman-group-exchange-sha256
# 限制使用的加密算法
Ciphers [email protected],[email protected],[email protected],aes256-ctr,aes192-ctr,aes128-ctr
# 限制使用的MAC算法
MACs [email protected],[email protected],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/null
if [ $? -eq 0 ] && [ -f /tmp/ssh_test_result ] && grep -q "连接成功" /tmp/ssh_test_result; then
log_info "SSH本地连接测试成功"
rm -f /tmp/ssh_test_message /tmp/ssh_test_result
else
log_warn "SSH本地连接测试失败,但这可能是由于未设置SSH密钥认证"
log_warn "请手动测试SSH连接!"
# 询问用户SSH是否能正常连接
read -p "您是否可以成功通过新的SSH连接到此服务器? (y/n): " SSH_WORKS
if [ "$SSH_WORKS" != "y" ]; then
log_error "SSH连接测试失败,请通过telnet连接进行故障排除"
exit 1
fi
fi
当前版本已在以下系统上测试:
该漏洞存在于 OpenSSH 的 SSH-agent 转发功能中,特别是在 PKCS#11 提供程序支持部分。攻击者可以通过攻击 SSH-agent 的 PKCS#11 支持在特定条件下执行远程代码。
修复原理:
Terrapin 是一种针对 SSH 协议的前缀截断攻击。通过精心调整握手期间的序列号,攻击者可以在客户端或服务器不知情的情况下移除安全通道开始时发送的任意数量的消息。
修复原理:
此漏洞允许在用户名或主机名中包含 shell 元字符,并且该名称通过扩展标记在某些情况下被引用时发生命令注入。例如,不受信任的 Git 仓库可以有一个在用户名或主机名中包含 shell 元字符的子模块。
修复原理:
除了修复特定漏洞外,SecurityPatcher 还应用了以下安全最佳实践:
算法选择:
认证控制:
服务配置: