文章总结: 文章剖析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/wtmp,w 和 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,即使没有终端也能接受输入。
技术流程:
- SSH客户端认证(密码/密钥)通过。
- SSH服务器验证通过后,不创建struct utmp记录(即不写入 /var/run/utmp 和 /var/log/wtmp)。
- 直接在远程执行指定命令,标准输入/输出通过SSH加密通道传输。
- 命令执行结束后,连接关闭。整个过程中,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协议特性绕过终端分配,从而规避 w、last、lastlog 等常规检测手段。
然而,“幽灵”并非无懈可击。通过网络层(ss/netstat)、进程层(pstree/ps)、日志层(auth.log/审计系统)能够发现登录痕迹,让隐匿的“幽灵登录”无所遁形。
在攻防对抗中,攻击者永远在寻找新的隐匿路径,而防守者则需持续深化对底层机制的理解,构建纵深防御体系,方能在这场猫鼠游戏中占据主动。
如果您觉得内容还不错的话,请关注我吧!
建议把公众号“篝火信安”设为星标,否则可能就看不到啦!因为公众号现在只对常读和星标的公众号才能展示大图推送。
操作方法:点击公众号页面右上角的【…】,然后点击【设为星标】即可。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:篝火信安 火星来的小男孩 火星来的小男孩《应急响应 | Linux系统“幽灵登录”技术剖析》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论