防止恶意软件嗅探sudo密码


10

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

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

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

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

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


有关我要找的东西的示例,请参阅我的答案。我希望有人可以详细说明那里(或他们可以想到的任何其他)所引发的一些安全风险,并提供减轻这些风险的方法。
Zaz

您要求类似UAC或Windows中的安全注意序列。Unixy系统没有。管理员(可能)的方法是不要将自己的帐户用于愚蠢的事情。您可以使用基于角色的强制性访问控制系统(例如SELinux或Grsecurity)来防止自己回答中提到的几件事。在那里,您可以建立策略,禁止执行非root用户可写二进制文件,因此该级别没有特洛伊木马。顺便说一句,如果您不信任X,则根本不信任系统,因为X具有超级用户特权。

谢谢,我研究了SELinux,但它似乎是为大型安装而设计的,需要大量时间进行管理和设置。我希望有一些简单的方法。我是一名开发人员,因此,关于运行程序的严格政策也不是真正的选择。
Zaz

“ X以超级用户特权运行”-什么?在默认安装的X上startx可以像普通用户一样正常工作。实际上,我现在以普通用户身份运行X。
2014年

是的,学习曲线陡峭。看看Grsecurity,它更简单但功能强大。〜X的特权:在我的机器上,X服务器是SUID根目录并运行一个根目录。
countermode

Answers:


9

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

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.如果恶意软件感染使用的外壳sudosudo缓存凭据,则该恶意软件可以连续检查是否可以在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(但会捕获密码)。

sudo要求用户提供密码,因此恶意软件将捕获已经获得访问权限的用户的密码。
2014年

3
@rob:实际上,这取决于您的sudo配置方式,但是无论哪种方式,恶意软件现在都具有所需的密码sudo,因此,如果用户具有root用户访问权限,则恶意软件也是如此。
Zaz 2014年

3

没有真正的保护。

密码保护的sudo接入可以追溯到使用Shims执行的复杂外壳环境之前的时代。提交密码后,将有一个机会之窗,使垫片可以通过sudo执行命令,而无需任何通知,并具有完全的系统控制权。

如果我打算进行访问,则可以为bash,zsh和fish等创建有用的填充程序。我将监视执行的命令。在状态为零的sudo返回后不久,我将开始发出“ sudo chmod + s / bin / sh”或其他错误信息。

一旦给sudo给出了令人满意的密码,并且您具有运行命令以获取提示的shell,就很可能会遇到麻烦。除了乐观之外,没有任何保护。

其他答案集中在保护密码上。作为侵略者,我不会为此担心。我将重点介绍不需要密码时提供密码后的持续时间。这是最危险的时间,此时攻击者只需要做最少的工作即可完全破坏系统。

保护它吗?您必须保护自己的RC文件。检查命令行提示符中使用的所有垫片或其他命令。寻找连接到外壳的协同流程以及用于维护外壳环境的工具。主要防御措施是主机入侵工具,但这是事后的做法。预防攻击?仅使用简单的外壳程序,而无需复杂的自动配置和活动提示-这就是sudo开发的环境。

我曾经和其他开发人员(1980年代)一起玩游戏,我们试图编写一些东西来获得其他开发人员正在使用的终端,以插入命令-这本质上是相同的问题。而且,我们可以更加轻松地嵌入无需进行可视跟踪即可执行命令插入的工具。:)


1

不知道未经授权的用户的任何方法来获得root权限,但我知道的东西,你可以做,使sudo少一点危险的,如果你要这么说。 sudo允许您配置细化权限,以便定义具有特定特权的用户组以及某些用户可以运行的特定命令。

SUDO-颗粒控制

  • 用户部分

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

    User_Alias  OPS = bob, jdoe 
    

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

  • Cmnd_Alias

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

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

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

  • 用户权限规范

    在这里,我们将使用到目前为止已设置的组。

    OPS  ALL=(root)  OPSCMD 
    

    我们指定的第一件事是用户,这里我们使用设置的OPS组。那么ALL意味着它适用于所有服务器,仅当您或在使用相同配置文件的多台服务器上运行sudo时,此功能才有用。接下来,我们指定操作组将以其身份运行指定命令的用户,在这种情况下,我们希望它们以root用户身份运行。最后,我们指定希望OPS组能够运行的命令,特别是我们正在使用设置的OPSCMD组。如果您不希望他们每次使用sudo时都输入密码,那么命令规范将改为NOPASSWD:OPSCMD。

只需强化您的sudo策略,直到您不信任用户即可:)


抱歉,如果我不清楚这个问题,但是我有兴趣防范受到破坏的管理员帐户,也就是说,该帐户具有的完全root特权sudo。具体来说,我在考虑普通的台式机系统。
Zaz 2014年

1

如果您对可能会受到威胁的系统感兴趣,请运行“ Rootkit”并使用“ Tripwire”检查文件系统的完整性。

还建议您加强sudo权限,例如您不需要所有用户都可以访问所有root命令,而可以通过SUDO来访问特定命令。


0

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

语法将为 user MACHINE=COMMANDS格式。

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

如果您的条目也有,ALL=(ALL)那么您几乎等于root用户。如果不是这种情况,并且您仅具有某些有限的特权,那么攻击者/恶意软件只能执行您的sudo特权所能做的事情。

可以帮助您的提示:

  1. 检查您的/etc/sudoers文件。
  2. 运行安全扫描程序,例如chkrootkit,rootkit hunter,配置服务器漏洞扫描程序,snort等。
  3. 使用visudo命令来编辑和修改sudoers文件的特权。
  4. 再次运行扫描仪。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.