数户几乎毫无用处吗?

2020-06-10 01:49:13

一旦攻击者拥有了一个shell作为您的sudoer用户(或者仅仅是充分危害了本地进程),他/她甚至可以使用众多权限提升工具中的一个来自动将自己设置为apt或由root调用以获得root访问权限的其他进程(另请参阅在此场景中攻击者可以做什么?(不可写bashrc、配置文件等))。

那么,除了阻止较小的有效负载或使其变得更难之外,sudo还有什么意义呢?看来重点应该放在SELinux之类的。

编辑:这个问题有两个方面(我应该说得更具体些)。首先,我最初的意思是针对标准的Linux桌面用户。对于一台由其他人管理的机器,可能会给出一个完全不同的答案。

#34;……。他/她可以使用众多权限提升工具中的一种.&您似乎认为这些都是通用工具,一定会在目标系统上运行。但这些工具依赖于未修复的错误或错误配置。它们不能在正确更新和正确配置的系统上工作。基本上,您是在问,如果所有系统都坏了,sudo是否毫无用处。但这一基本假设已经是错误的。--斯特芬·乌尔里希(Steffen Ullrich)。

这比你想象的要简单得多,如果你愿意等一会儿的话;看看@Reed的例子,看看下面的链接问题,就可以避免这种情况的发生。请注意,对于公司机器,有限的sudoers可以提供保护。-Wernight。

说得好(回答也很好),但这假设用户调用的是sudo,而不是/usr/bin/sudo。诚然,大多数用户都会这样做。--斯特芬·乌尔里希(Steffen Ullrich)。

无论如何,可以将sudo配置为授予远比root用户访问所有内容更精细的权限。不过,大多数人并不使用该功能。-Ajedi32。

你在这里只有半个问题。真正的问题是,与什么相比,sudo几乎毫无用处吗?sudo在安全性方面绝对比su更好,而且这两种方式都比始终以root身份登录要好得多。除了su/sudo/root登录(您认为这比sudo更好)之外,您有没有其他方法可以让合法用户访问管理功能,同时阻止未经授权的访问?如果不是,那么它至少是这三个选项中最无用的。-戴夫·斯英雄曼(Dave SHerhman)

SUDO没有针对恶意第三方的真正安全目的。因此,是的,对于那个目的来说,它基本上是无用的。在过去,我认为它实际上是一种安全控制,以防止特权升级,使攻击变得更加困难,因为一些人坚持认为它也有这个目的,但这实际上是错误的。事实上,目前你的问题只有一个答案,而这个答案就是传播这个神话。sudo的唯一目的是保护您免受自己的伤害,即避免错误地扰乱您的系统。一次点击或一次按键获得所有权限可能是危险的,而sudo至少会迫使您有意识地键入密码。如果您(或某个程序或脚本)在无意中使用sudo错误地接触了系统文件或其他用户文件,您将收到权限被拒绝的通知。因此,归根结底,它只是一个管理工具,而不是一个旨在保护您免受攻击的安全控制。

下面是一个非常基本的示例,说明为什么sudo没有针对恶意代码提供真正的保护:

#create payload:将sudo替换为aliaspayload=';fake_sudo(){#模拟sudo提示符echo-n";[sudo]${user}的密码:";read-s password echo#运行您的命令,让您愉快地回应";$password";|sudo-S";$@";#用您的密码echo";执行我的邪恶操作,现在我可以使用$password来做什么了。#将有效负载写入bashrc配置文件echo";$payload";>;>;~/.bashrc。

这是攻击者可以在您的机器上运行的一个非常基本的代码示例。它并不完美,它甚至不能处理所有情况(如果您输入了错误的密码,它将不会很好地工作),但它只是向您展示了sudo可以被攻击者取代。如果运行该脚本,则下次打开终端并运行sudo时,实际上将运行fake_sudo。攻击者可以用别名替换您的程序,或者替换二进制文件(将恶意版本放在~/bin或可以在您的路径中执行的任何位置)等。

这甚至不是真正的权限提升,因为可以运行sudo成为root的用户已经拥有所有权限。真正的非特权用户不应该具有sudo功能。要实现真正的特权分离,您应该在一个完全独立的帐户上运行管理内容。

评论不适用于扩展讨论;此对话已移至聊天。-罗里·阿尔索普♦。

根据您的系统将sudo日志调用到/var/log/secure或/var/log/auth.log。这会告诉您是谁的帐户弄乱了您的系统,或者是谁有可能被泄露。-SnakeDoc。

通常,当您使用Linux时,您将充当非root用户。很多事情,比如使用apt安装软件包,都需要root/sudo权限才能使用。sudo二进制文件提供给普通用户使用根级操作(如apt install)的权限。

您不应该一直以root身份使用Linux。这是因为如果您再次受到攻击,攻击者将拥有对您的系统的超级用户访问权限,这意味着他们几乎可以在您的系统上执行任何操作。相反,您以非root用户身份运行Linux,这样即使您的帐户受到攻击,攻击者也不能立即获得root用户访问权限。

当然,没有一个系统是完全安全的,您系统中的某些东西可能会被利用。如上所述,使用sudoers帐户而不是root是保护系统的一个步骤。

如果你是说黑客无论如何都会侵入任何Get root,我为什么要使用sudo?这就像是说,如果有人进入我的房子,他们无论如何都能(以某种方式)拿走我的珠宝。我为什么要用保险箱或锁呢?它是一层额外的保护层。我们不是在寻找一种可以保护一切的锁,而是寻找许多锁来提供额外的安全性,以防其中几把锁坏了。

数独是一种保障。它允许您仅在需要时运行根级程序。这就是说,你只需要偶尔打开你的最高机密房间的门,而不是总是让它开着,即使让它一直开着(总是以root身份运行)更方便。

此外,当您是合法用户时,并不是每次要使用sudo操作时都运行权限提升脚本,而是使用sudo。

攻击者可以利用sudo二进制文件获取一些信息,甚至获得超级用户访问权限。有时,用户的sudoers文件中可能包含类似MY_USER ALL=(ALL)NOPASSWD:ALL的内容,在这种情况下,如果您可以作为用户MY_USER获得访问权限,则可以在没有密码的情况下运行任何和所有sudo/root命令。运行sudo-l还可能提供一些信息,比如即使没有密码也可以作为root用户运行哪些命令。这种错误配置的一个示例是username all=(All)NOPASSWD:/bin/vi,它允许您以root用户身份运行vi,而无需使用密码作为用户用户名。这是手动提升权限的一种方式。

每个额外的程序都可能会出现一些额外的漏洞。运行Tomcat会将系统引入Tomcat攻击。sudo可能只是您可以在您的利用中使用的另一个程序。

另外,您认为那些方便的权限提升脚本/工具是如何让您获得root访问权限的呢?他们中的很多人以这样或那样的方式使用sudo。

如今扎根真的很容易(@Reed举了个简单的例子)。几乎没有保险箱把它锁起来。它就在一个很容易找到的盒子里。-Wernight。

@Wernight给出了Reed的例子,如果你有用户访问权,并且用户将其交给你,那么更像是很容易获得根目录。是的,当然,如果你有用户级别的访问权限,如果你包括与用户的交互,它就会变得非常容易(而那个用户恰好给了你他们的根密码,因为他们想做一些需要它的事情,或者不在乎他们的机器突然要求它)。-弗兰克·霍普金斯(Frank Hopkins)。

管理员可以灵活而精细地分配权限,并具有责任选项(体面的日志记录)。这是使用团队的一个明显更好的解决方案。

如果您将其与SELinux进行比较,自然会发现sudo的性能和功能相形见绌,尽管要付出巨大的实现和配置(以及维护)成本。

相反,从攻击者的角度来看,他们可能会走运,用sudo权限捕获帐户或利用错误配置。不过,从具有sudo权限的标准用户升级到root用户的工作量可能会很大。另一方面,这两个问题都不是由sudo本身引起的。

然而,其有效性完全取决于配置。如果允许受攻击的标准帐户在没有密码的情况下以超级用户身份运行任何东西,则将主机私有化是微不足道的;如果允许该帐户以超级用户身份运行某些可被操纵的命令,则会比较困难;如果只允许以超级用户身份执行精心选择的二进制文件和情况,则会相当困难。

此外,sudo还可用于启用以root用户以外的用户身份运行命令,因此这是另一种使用sudo的方式,可能不会导致系统完全受损。

我认为升级对于一个标准的Linux用户来说是非常容易的。我做sudo apt更新等价物的所有时间。虽然我不认为大多数桌面用户会设置日志记录,但是管理员是一个公平点,一旦攻击者获得根权限,该用户就可以删除日志(但我同意这很难)。到目前为止还没有安排过这件事。-Wernight

这完全取决于sudo配置。如果允许用户以超级用户身份运行任何东西,这是微不足道的;如果允许用户以超级用户身份运行某些可操作的命令,则比较困难;如果只允许以超级用户身份执行精心选择的二进制文件和情况,则非常困难。此外,sudo还可用于以root以外的用户身份运行命令,因此这是使用sudo的另一种方式,而不是直接进入root。-大卫·佩德罗(Pedro)。

即使攻击微不足道,也取决于用户与系统的交互(通过键入sudo命令并提供其密码)。根据系统的不同,这可能是一个很大的障碍,特别是如果攻击者的目标是时间敏感的。--Jajpaugh。

我认为这个帖子对维护公园或公司机器的系统管理员有很好的帮助。这样的设置允许日志记录,例如,它可能会将本地sudoer操作限制为仅特定的二进制文件。我不相信这是大多数个人电脑用户的情况(或发行版的默认设置)。在公司的案例中仍然有很好的观点。-Wernight。

@Wernight-我不能与其他发行版交谈,但是Debian的默认sudo配置确实包括记录到/var/log/auth.log。当然,普通家庭用户是否会真正查看这些日志则完全是另一个问题……-戴夫·斯英雄曼(Dave SHerhman)。

sudo最流行的替代方案是允许部分或所有用户使用su提升其权限。最常见的情况是,只要知道目标用户的密码,所有用户都可以这样做。与sudo不同,sudo几乎总是设置为需要用户自己的密码(并且仅限于受信任的用户),而su需要目标用户的密码。

有人认为这使su比sudo更安全,但事实并非如此。SU和Sudo受到相同类型的攻击。假设您是一个有时运行su以成为root用户的用户。进一步假设攻击者不知道root的密码,并且还不能以root用户身份执行操作,但仍能以您的非root帐户执行任意代码。正如此攻击者可以使您在运行sudo时运行其恶意命令一样,此攻击者也可以使其在您运行su时运行其恶意命令。

也就是说,Reed';答案中的技术同样适用于引入一个假su命令,该命令捕获目标用户的密码(当使用su管理系统时,该密码通常是root用户)。

一旦有人可以像您一样运行任何命令,他们通常就可以任意更改您的shell的行为方式,从而创建假的sudo、su、doas或任何其他特权提升命令。

但是,只要您可以避免与假登录屏幕交互,就可以通过使用单独的管理和非管理用户帐户来缓解这种情况。这听起来不像是一个新想法,当然也不是,但令人惊讶的是,真正做到这一点的人是如此之少。

您的管理帐户可以只是root帐户。但是,如果您想要不以root身份登录的好处,其中包括日志记录(以便找出在发生非恶意错误的情况下出了什么问题),以及能够运行不以root身份运行的程序(大多数图形界面),那么您可以拥有两个非root帐户,其中一个用于管理(根据需要运行sudo或su),而另一个则不是。

如果课程不与非管理帐户共享访问凭据,则此帐户不应。它们不应该有相同或相似的密码,并且应该有不同的密钥对。此外,您不能从非管理帐户提升到管理帐户,原因与您不能从非管理帐户提升到root的原因相同。

在这个设置中,sudo比su有一个好处,尽管它不是决定性的好处。您可以避免意外地使用错误的帐户(用于可能使系统面临更大风险的各种其他非管理内容的帐户)来管理系统,方法是将其设置为常规的受限用户帐户,该帐户不会在/etc/sudoers文件中列出,也不是列出的任何组的成员。

但是,您也可以使用su来实现此目标,方法是进行适当的自律并确保您永远不会使用您设计为非管理员的帐户使用su,或者通过阻止指定为非管理员的帐户使用su提升权限。(在GNU/Linux系统上,实现这一点的一种方法是使用AppArmor,这就是Ubuntu阻止来宾帐户成功使用su的方法--在过去启用了来宾帐户的Ubuntu发行版中)。

您可能可以接受以通常方式使用sudo或su的风险。

说了这么多,我并不是说你一定要这么做。这取决于您,或者,在适用的情况下,取决于您和其他利益相关者。

对于许多人来说,使用相同的帐户(A)使用sudo(或类似的机制,如polkit)或su(或类似的机制,如doA)升级到root,与用于(B)运行web浏览器等非管理任务相关的风险可能是一个可以接受的权衡。

在由不同人使用的计算机上,您可以配置sudo,以使某些用户可以使用sudo访问某些命令:

您可以配置sudo,使某些用户可以使用sudo执行特定命令(例如IP),但不能执行任何其他命令。

另一件事是,sudo应该以要求您输入密码的方式进行配置。即使攻击者有权访问控制台,如果他键入sudo示例命令,也会被要求输入您的密码。

您还可以配置sudo,使某些命令(例如ip)不需要密码,而所有其他命令需要键入密码。

还可以配置sudo,使sudo所需的密码与您的登录密码不同。

但是,如果您以可以执行所有命令的方式配置sudo,并且不会要求您输入密码,则sudo不提供任何安全性。

不谈细节,我希望你会同意,所有这些替代方案都比sudo更糟糕。它不是完美的,它可以被攻击--但它是这些选择中最好的。

关于SELinux,不要忘记它进入展会的时间相对较晚。我记不清是哪一年(见鬼,我在那里,我的名字在SELinux证书上),但Sudo比SELinux早很多。

虽然SELinux无疑是更强大、更安全的替代方案,但大多数系统管理员无法编写适当的SELinux安全策略。

因此,综合考虑,在一堆相当糟糕的选择中,sudo在许多情况下是最不糟糕的。这总比什么都没有或者它的替代品要好,这就是足够好的理由。无论如何,没有安全措施是完美的。

综上所述,sudo在企业中的主要用途不是安全,而是责任。如果管理员必须使用个人帐户登录,然后使用sudo进行日常工作,那么跟踪谁做了什么是微不足道的。使用auditd,您还可以在他们使用su时继续跟踪他们。

里德很好地回答了为什么sudo几乎毫无用处。然而,不仅仅是sudo、bash甚至整个Unix环境中的错误。

首先,zsh、fish甚至windows命令提示符都允许您自定义运行哪个命令,因此切换到不同的shell并不能阻止攻击者用fake_sudo替换sudo。

这不仅仅是Unix环境。假设在Windows中,您转到“开始&>更改配置文件”并键入管理员密码。OPS,攻击者已将EXPLORER.EXE替换为FAKE_EXPLORER.EXE,这不是您按下的真正开始按钮。同样,攻击者拥有您的管理员密码。

出于这些目的,有时使用安全注意密钥。您有时可能会看到Windows登录屏幕上显示按Ctrl-Alt-Del&34;登录。这是因为Ctrl-Alt-Del组合键直接进入操作系统,不能被伪造的登录shell所伪造。由于Ctrl-Alt-Del可用于安全地获得操作系统的注意,因此它被称为安全注意键。

除了安全注意密钥之外,还有一些替代方案。例如,您可以选择希望在登录时看到的图像。最好不要将该图像存储在非特权进程可以读取的地方,也不要将其显示在非特权进程可以截图的地方。因此,这仍然需要像sudo这样的工具将登录屏幕与非特权的普通工作帐户分开。

点击“发布您的答案”,即表示您同意我们的服务条款、隐私政策和Cookie政策。

不是你想要的答案吗?浏览标记的其他问题或提出您自己的问题。