防止恶意软件嗅探 sudo 密码

Zaz*_*Zaz 10 linux security sudo malware

我经常听到人们sudo说这是恶意软件感染 Linux 计算机的主要障碍之一。

最常见的说法似乎是这样的:修改系统配置需要root权限,获得root权限需要密码,因此恶意软件无法在不提示输入密码的情况下修改系统配置。

但在我看来,在大多数系统上,默认情况下,一旦恶意软件感染了管理员帐户,权限提升就变得微不足道——恶意软件只需要等待用户运行即可sudo

恶意软件有哪些方法可以在用户运行时获得 root 权限sudo,我们如何防范它们?

编辑:我对防止管理员帐户遭到入侵特别感兴趣;也就是说,一个具有完全 root 权限sudo的帐户(例如,典型桌面系统上的用户帐户)。

Zaz*_*Zaz 9

一旦恶意软件获得了对用户帐户的访问权限,它就可以:

1.~/.bashrc为一个伪造[sudo] password for $USER:提示并窃取用户密码的命令创建一个 bash 别名(在当前 shell 和 in 中)。

alias sudo='echo -n "[sudo] password for $USER: " && \
            read -r password && \
            echo "$password" >/tmp/sudo-password'
Run Code Online (Sandbox Code Playgroud)

2.同理,可以放置一个名为sudoin的可执行文件~/.bin,修改PATH变量达到同样的效果:PATH="$HOME/.bin:$PATH"

3.通过 X 服务器捕捉按键,注意单词sudo,然后尝试将接下来两次Enter按键之间的文本作为密码。

4.类似的事情可以在任何环境(控制台、Wayland、X)中使用 eg 来完成$LD_PRELOAD

5.如果恶意软件感染了使用sudosudo缓存凭据的外壳,恶意软件可以不断检查是否可以在sudo没有密码的情况下进行:

while : ; do
    echo | sudo -S echo "test" &>/dev/null && break
    sleep 10
done
sudo echo "We now have root access"
Run Code Online (Sandbox Code Playgroud)


预防:

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(但确实捕获了密码)。

  • @rob:这实际上取决于你如何配置 `sudo`,但无论哪种方式,恶意软件现在都拥有 `sudo` 所需的密码,所以如果用户具有 root 访问权限,恶意软件也是如此。 (3认同)