防止恶意软件嗅探 sudo 密码

防止恶意软件嗅探 sudo 密码

我经常听到人们将其sudo作为恶意软件感染 Linux 计算机的主要障碍之一。

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

但在我看来,在大多数系统上默认情况下,一旦恶意软件感染了管理员帐户,权限提升就很容易了——恶意软件只需等待用户运行sudo

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

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

答案1

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

1.为伪造提示符并窃取用户密码的~/.bashrc命令创建一个 bash 别名(在当前 shell 中和中)。[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 服务器捕获按键操作,留意单词sudo,然后尝试将接下来两次按键之间的文本Enter作为密码。

4.类似的事情可以在任何环境中完成(控制台,韦兰, X)使用例如$LD_PRELOAD

5.sudo如果恶意软件感染了使用并缓存凭据的 shell 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 时请避免输入密码。相反,请使用虚拟控制台,或者韦斯顿

5.设置timestamp_timeout=0/etc/sudoers


完全消除密码被嗅探的可能性的唯一方法sudo似乎是完全避免它。相反,以 root 身份登录到虚拟控制台。

亚历山大·佩斯利亚克:“su [和 sudo] 的唯一安全用途是从权限较高的帐户切换到权限较低的帐户…”


顺便提一下,sudo 确实有一些对策:

  • sudotty从 而不是读取stdin,因此alias sudo='tee -a /tmp/sudo-password | sudo'中断sudo(但会捕获密码)。

答案2

没有真正的保护。

受密码保护的 sudo 访问让人回想起在复杂的 shell 环境出现之前,使用 shim 执行命令的时代。提交密码后,shim 就有机会通过 sudo 执行命令,无需任何通知,并且拥有完全的系统控制权。

如果我有意访问,我会为 bash、zsh 和 fish 等创建一个有用的 shim。我会监控执行的命令。在 sudo 返回状态为零后不久,我会开始发出“sudo chmod +s /bin/sh”或其他令人讨厌的命令。

一旦 sudo 获得了令人满意的密码,并且您拥有运行命令以获取提示的 shell,您就可能陷入困境。除了乐观之外,没有任何保护措施。

其他答案都集中在保护密码上。作为攻击者,我不会担心这一点。我会关注输入密码后不需要密码的持续时间。这是最危险的时间,攻击者需要做最少的事情才能完全破坏系统。

保护自己免受攻击?您必须保护您的 RC 文件。检查命令行提示符中使用的任何垫片或其他命令。查找连接到 shell 的协同进程和用于维护 shell 环境的工具。主要防御措施是主机入侵工具,但那是事后的事情。防止攻击?仅使用简单的 shell,无需复杂的自动配置和主动提示 - 这就是 sudo 的开发环境。

我曾经和其他开发者一起玩游戏(20 世纪 80 年代),我们尝试编写一些东西来获取其他开发者正在使用的终端,以插入命令 - 这本质上是同样的问题。而且我们已经让嵌入可以执行命令插入且没有可见痕迹的工具变得更容易。:)

答案3

不确定未经授权的用户是否能够获得 root 权限,但我知道你可以做一些事情sudo危险性较小,如果你想这么说的话。 sudo允许您配置细粒度的权限,以便定义具有特定权限的用户组,以及某些用户可以运行的特定命令。

SUDO——精细控制

  • 用户部分

    您可以在此处为要指定命令的用户设置组。让我们设置一个操作组;

    User_Alias  OPS = bob, jdoe 
    

    这将创建 OPS 组并将名为 bob 和 jdoe 的用户放入该组中

  • 命令别名

    这里我们指定特定的命令集。您必须指定完整路径和要使用的任何命令选项。让我们设置操作组命令;

    Cmnd_Alias OPSCMD = /admin/bin/srvbkup, /admin/bin/test 
    

    这会将三个指定的命令添加到命令组 OPSCMD。

  • 用户权限规范

    在这里我们将使用迄今为止设置的组;

    OPS  ALL=(root)  OPSCMD 
    

    我们首先要指定的是用户,这里我们使用我们设置的 OPS 组。然后 ALL 表示它适用于所有服务器,这仅在您在多个服务器上运行 sudo 且每个服务器都使用相同的配置文件时才有用。接下来,我们指定操作组将以哪个用户身份运行指定的命令,在本例中,我们希望它们以 root 身份运行。最后,我们指定我们希望 OPS 组能够运行的命令,具体来说,我们使用我们设置的 OPSCMD 组。如果您不希望他们每次使用 sudo 时都输入密码,那么命令规范最好是 NOPASSWD: OPSCMD。

sudo就像你不信任你的用户一样,强化你的政策:)

答案4

首先看一下/etc/sudoers文件。

语法将被 user MACHINE=COMMANDS格式化。

例如,root 用户将具有root ALL=(ALL) ALL 这意味着 root 用户可以在任何地点运行任何(所有)命令。

如果您的输入也有,ALL=(ALL)那么您几乎相当于 root 用户。如果不是这种情况,并且您只有某些有限的权限,那么攻击者/恶意软件只能做您 sudo 权限所能做的事情。

可以帮助您的提示:

  1. 检查你的/etc/sudoers文件。
  2. 运行安全扫描程序,如 chkrootkit、rootkit hunter、Config server Exploit scanner、snort 等。
  3. 使用visudo命令编辑和修改sudoers文件的权限。
  4. 再次运行扫描仪。

参考:sudoers 和 sudo 的 Linux 手册页人 sudoers

相关内容