应急响应|Linux系统“幽灵登录”技术剖析

admin 2026-09-13 05:12:08 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 文章剖析Linux幽灵登录技术:用ssh-T禁用伪终端并执行bash-i,会话不写入utmp与wtmp,导致w、last、lastlog等常规排查命令失效;但SSH连接必留痕迹,可从网络层ss查看22端口连接、进程层pstree发现sshd下挂bash、日志层auth.log中Accepted记录(有认证无会话)三方面检测,防御上建议禁用root登录、启用密钥认证、配置用户白名单等SSH加固措施。 综合评分: 75 文章分类: 应急响应,网络安全,渗透测试,安全建设


应急响应 | Linux系统“幽灵登录”技术剖析

原创

火星来的小男孩 火星来的小男孩

篝火信安

2026年9月11日 10:00 北京

在小说阅读器读本章

去阅读

在公众号小说中沉浸阅读

在网络安全领域,“幽灵登录”(Ghost Login)是指一类高度隐蔽、难以被常规安全手段察觉的异常登录行为。它们如同数字世界中的幽灵,来无影去无踪,却能在悄无声息中完成对系统的渗透与控制。

相较于Windows平台“幽灵登录”所需的多重条件(UAC远程限制、防火墙规则、组策略权限等),Linux平台的“幽灵登录”利用条件极为简单——只需一个有效的SSH凭据,即可实现。

本文将聚焦Linux操作系统,剖析SSH无伪终端登录的技术原理、检测方法与防御策略。

一、核心原理:SSH无伪终端登录

1.1 什么是伪终端(PTY)?

在理解“幽灵登录”之前,首先要明确伪终端(pseudo-terminal,简称PTY)的概念。当用户通过SSH进行交互式登录时,SSH服务器会为这次会话分配一个伪终端设备(如 /dev/pts/0),用于模拟物理终端的行为——处理输入回显、信号传递、终端尺寸调整等交互特性。

系统通过是否分配了伪终端来区分“交互式登录”与“非交互式命令执行”:

| 登录方式 | 是否分配PTY | 系统记录行为 | | — | — | — | | ssh user@host (交互式) | ✅ 是 | 记录到 utmp/wtmpw 和 last 可见 | | ssh user@host "command" (执行命令) | ❌ 否 | 仅认证日志,不记录为“登录” | | ssh -T user@host "command" (强制无终端) | ❌ 否 | 同上,且更隐蔽 |

1.2 攻击命令详解

攻击者执行如下命令即可实现“幽灵登录”:

ssh -T [email protected] /usr/bin/bash -i

参数解析:

  • -T禁止分配伪终端。这是实现“幽灵登录”的核心开关。
  • [email protected]:目标机器与登录账号(也可使用普通用户)。
  • /usr/bin/bash -i:在远程执行的命令。-i 强制启动交互式Shell,即使没有终端也能接受输入。

技术流程:

  1. SSH客户端认证(密码/密钥)通过。
  2. SSH服务器验证通过后,不创建struct utmp记录(即不写入 /var/run/utmp 和 /var/log/wtmp)。
  3. 直接在远程执行指定命令,标准输入/输出通过SSH加密通道传输。
  4. 命令执行结束后,连接关闭。整个过程中,w、who、last、lastlog四个常用排查命令全部“失明”。

1.3 幽灵登录效果

通过幽灵登录方式,登录192.168.52.132。

此时在目标机器上执行:

执行w命令,没有任何用户显示。

执行last命令,没有任何来自远程IP的登录记录。

执行history命令,没有本次登录的命令执行记录。

攻击者已执行了系统命令并退出,但常规的系统排查命令无法发现。

二、检测方法:让“幽灵”显形

虽然无伪终端登录绕过了常规检测手段,但只要发生网络连接,就必然留下痕迹

2.1 网络层检测

任何SSH连接都必须经过TCP 22端口(或自定义端口)。

以下命令可发现异常连接:

| 命令 | 用途 | 检测要点 | | — | — | — | | ss -tnp | grep :22 | 查看所有22端口的TCP连接 | 关注 ESTABLISHED 状态的连接及关联进程PID | | netstat -tnp | grep :22 | 类似ss,兼容性更好 | 显示源IP,可发现异常外部地址 | | lsof -i :22 | 列出端口关联进程详情 | 显示 sshd 进程与客户端的连接 | | ss -tnp | grep ESTABLISHED | grep sshd | 过滤出活跃SSH连接 | 即使没有PTY,连接依然存在 |

示例:

此时即使w 没有显示用户,ss 命令依然能够发现来自 192.168.52.1(远程IP)的SSH连接。

2.2 进程层检测

无伪终端登录会在远程机器上生成Shell进程(如 bash),其父进程为 sshd。通过进程树可以发现异常:

命令:

pstree -p | grep sshdps aux --forest | grep sshd
输出示例:
unic0rn@ubuntn22:/var/log$ pstree -p | grep sshd     |-sshd(40093)---sshd(84900)---sshd(84961)---bash(84962)

当 w 显示0用户但 ps 中存在 sshd 下挂载的 bash 进程,即为“幽灵登录”的确凿证据。

2.3 日志层检测

无伪终端登录不会在 /var/log/wtmp 中产生记录,但一定会在认证日志中留下 Accepted 记录。

日志位置:

  • Debian/Ubuntu:/var/log/auth.log
  • RHEL/CentOS/Fedora:/var/log/secure

检测命令:

# 查看所有成功的SSH认证grep "Accepted" /var/log/auth.log | grep sshd# 查看所有成功的记录,并输出关键字段grep "Accepted" /var/log/auth.log | awk '{print $1,$2,$3,$9,$11}'# 统计各IP的认证成功次数grep "Accepted" /var/log/auth.log | grep -o "from [0-9.]*" | sort | uniq -c

输出示例:

“幽灵登录”的特征:有认证,无会话。

三、防御策略:SSH服务安全加固(可选)

| 配置项 | 推荐设置 | 作用 | | — | — | — | | PermitRootLogin | no | 禁止root直接SSH,减少高危账户暴露 | | PasswordAuthentication | no | 禁用密码认证,强制使用密钥 | | PubkeyAuthentication | yes | 启用公钥认证 | | MaxSessions | 10 | 限制最大会话数 | | MaxStartups | 10:30:60 | 限制并发连接,防爆破 | | ClientAliveInterval | 300 | 空闲超时断连 | | AllowUsers | user1 user2 | 白名单限制登录用户 | | Port | 自定义高位端口 | 减少扫描暴露面 |

配置示例 /etc/ssh/sshd_config

PermitRootLogin noPasswordAuthentication noPubkeyAuthentication yesMaxSessions 5ClientAliveInterval 300AllowUsers admin opsProtocol 2

结语

Linux平台的“幽灵登录”技术,其核心在于用SSH协议特性绕过终端分配,从而规避 wlastlastlog 等常规检测手段

然而,“幽灵”并非无懈可击。通过网络层(ss/netstat进程层(pstree/ps日志层(auth.log/审计系统)能够发现登录痕迹,让隐匿的“幽灵登录”无所遁形。

在攻防对抗中,攻击者永远在寻找新的隐匿路径,而防守者则需持续深化对底层机制的理解,构建纵深防御体系,方能在这场猫鼠游戏中占据主动。

如果您觉得内容还不错的话,请关注我吧!

建议把公众号“篝火信安”设为星标,否则可能就看不到啦!因为公众号现在只对常读和星标的公众号才能展示大图推送。

操作方法:点击公众号页面右上角的【…】,然后点击【设为星标】即可。


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:篝火信安 火星来的小男孩 火星来的小男孩《应急响应 | Linux系统“幽灵登录”技术剖析》

评论:0   参与:  0