一旦恶意软件获得对用户帐户的访问权限,它就可以:
1.在命令中创建一个bash别名(在当前shell中,在中~/.bashrc
),该别名伪造[sudo] password for $USER:
提示并窃取用户密码。
alias sudo='echo -n "[sudo] password for $USER: " && \
read -r password && \
echo "$password" >/tmp/sudo-password'
2.同样地,它可以将命名的可执行sudo
在~/.bin
和修改PATH
变量以达到相同的效果:PATH="$HOME/.bin:$PATH"
3.按下X服务器上的Catch键,注意单词sudo
,然后尝试在下两次Enter按键之间输入文本作为密码。
4.在任何环境(控制台,Wayland,X)中都可以使用例如来完成类似的操作$LD_PRELOAD
。
5.如果恶意软件感染使用的外壳sudo
并sudo
缓存凭据,则该恶意软件可以连续检查是否可以在sudo
没有密码的情况下:
while : ; do
echo | sudo -S echo "test" &>/dev/null && break
sleep 10
done
sudo echo "We now have root access"
预防:
1&2.使用\/bin/sudo
。该\
忽略别名和/bin/…
忽略$PATH
。或者,添加一个别名,例如:ssudo="\/bin/sudo"
,并始终使用ssudo
代替sudo
。病毒似乎不可能足够聪明地重新映射此别名。
3.避免在使用X11时输入密码。而是使用虚拟控制台或Weston。
5.设置timestamp_timeout=0
在/etc/sudoers
。
完全消除sudo
密码被盗的机会的唯一方法似乎是完全避免密码。而是以root用户身份登录到虚拟控制台。
据亚历山大·佩斯利亚克(Alexander Peslyak)说:“ su [和sudo]的唯一安全用途是从特权较高的帐户切换到特权较低的帐户……”
另外,sudo确实有一些对策:
sudo
从而tty
不是从中读取stdin
,因此alias sudo='tee -a /tmp/sudo-password | sudo'
会中断sudo
(但会捕获密码)。