为什么在 chroot 中运行 named(bind) 对安全如此重要?或者也许不是?

B14*_*4D3 12 security linux bind chroot

我正在玩 bind 并开始想知道为什么这个软件是,例如,在 chroot 中运行的 CentOS 中。不要误解我,我知道什么是 bind 以及 chroot (jail) 是干什么用的。但我的主要问题是没有 chroot 的绑定运行非常不安全?

在没有监狱的情况下设置它真的有害吗(比任何其他服务或软件都多)。在系统中,有许多进程在没有 chroot 的情况下运行,我认为对其中任何一个进行妥协都是非常危险的,但是是什么让 named 比其他没有 chroot 运行的软件更危险?

Zor*_*che 14

正如@Some Guy 提到的,您必须从历史的角度考虑这一点。

历史观点认为,单个硬件是单个操作系统下的十几个不同服务。如果一项服务受到损害,那么该硬件上的所有内容都会受到损害。

有了虚拟化,这不是一个问题。虽然逃离 VM 并非不可能,但它远非微不足道。与以 root 权限运行的进程脱离 chroot 相比,脱离 VM 肯定更加困难。所以我的绑定服务器在他们自己的虚拟机上运行。在这种情况下,chroot 确实没有多大意义,因为损坏已经受到 VM 的限制。

chroot 是创建类似于 VM 的东西的非常弱的尝试。任何具有 root 权限的进程都可以逃脱 Chroots。chroot 不是有意的,也不能作为一种安全机制。带有 BSD 监狱或 LXC 的 chroot 为您提供操作系统级虚拟化并提供安全功能。但是现在,在整个机器上启动一个新的 VM 非常容易,因此可能不值得为此进行设置或学习如何使用操作系统级别的虚拟化工具。

早期版本的 bind 没有删除权限。在Unix上,只有root账户才能打开1024以下的端口,而众所周知的Bind需要监听udp/53,tcp/53。由于 Bind 以 root 身份启动,并且不会放弃特权,因此任何妥协都意味着整个系统都可能受到损害。如今,几乎所有软件都会开始打开它们的套接字并执行任何其他需要 root 权限的操作,然后它们会将正在运行的用户更改为非特权帐户。一旦特权被放弃,被入侵对主机系统的影响就会小得多。


Chr*_*s S 10

其他答案都很好,但没有提到分层安全的概念。您添加到系统中的每一层安全都是对手必须克服的另一层。将 BIND 放在 chroot 中又增加了一个障碍。

假设 BIND 中有一个可利用的漏洞,并且有人能够执行任意代码。如果他们在 chroot 中,他们需要在进入系统中的任何其他内容之前摆脱它。如前所述,破解 chroot 需要 root 权限。BIND 不以 root 身份运行,并且 chroot 中应该有最少的工具可用,进一步限制了选项并且基本上只留下系统调用。如果没有系统调用来提升权限,那么对手就会被困在查看您的 DNS 记录中。

正如 SomeGuy 所说,上述情况不太可能发生,BIND 现在的漏洞很少,而且它们大多仅限于 DoS 类型的场景,而不是远程执行。也就是说,在 chroot 中运行是许多操作系统的默认配置,因此您不太可能采取任何努力来保持略微增加的安全性。


Rap*_*ebs 5

前言

我不断听到人们在互联网上重申误解..因此,我将尝试进行一些澄清

首先; 有多少意外的发现有过,它只是..由于因果,正在使用的东西弄成其他比其预期的目的?

什么是,什么是 Chroot 监狱

Chroot 最初旨在更改进程或用户的根目录(非常适合编译来自未知来源的软件)。这为基本系统以及快速测试台设备提供了安全性,包括易于清理。几年过去了,它的概念和隐含用途当然也发生了变化,同样。

chroot 已被有效地使用,并且直接位于多个程序和库(即 openSSHd、apache2 + mod_security2/mod_chroot、dovecot、sendmail、openVPN、pam_chroot等等)的代码库中。假设所有这些主流应用程序都实施了错误的安全解决方案是不正确的

chroot 是文件系统虚拟化的解决方案:仅此而已。您可以轻松脱离 chroot 的假设也是不正确的……只要您遵守在 chroot jail 中运行进程的准则。

保护 chroot jail 的一些步骤

即你运行的进程的根源。这可能会打开一个根升级向量(在 chroot 内部或外部也是如此)。不要在 chroot运行进程,使用与chroot的另一个进程相同的用户。将每个进程和用户分离到他自己的 Chroot 中,以限制攻击面并提供隐私。只挂载必要的文件、库和设备。最后,chroot 不是基本系统安全性的替代品。保护整个系统。

另一个重要注意事项:很多人认为 OpenVZ 已损坏,或者与完整系统虚拟化相比它不相等。他们做出这个假设是因为它本质上是一个 Chroot,有一个经过消毒的过程表。在硬件和设备上采取安全措施。其中大部分可以在 chroot 中实现。

并非每个管理员都具备在专用服务器上或在完整系统虚拟化下保护所有必要内核参数所需的知识水平。这意味着部署 OpenVZ 意味着您的客户在部署他们的应用程序之前将有更少的攻击面可以尝试覆盖和保护。一个好的主机会很好地保护这些参数,反过来,这不仅对节点或数据中心的每个人都有好处,而且对整个互联网都有好处......

如前所述,chroot 提供文件系统虚拟化。您必须确保没有 setuid 可执行文件、不安全的应用程序、库、悬空的无所有者符号链接等。如果攻击者可以破坏绑定,他们将需要在虚拟文件系统中寻找缓冲溢出的内容、使用文件描述符或以其他方式破坏 chroot 内部的某些东西——通常通过特权升级或将他或她的有效载荷注入基本系统来逃离监狱。

如果发生这种情况,通常是错误更新、零日漏洞或惯用的人为错误的结果

为什么仍然使用 chroot,而不是完整的系统虚拟化

考虑这种情况:您正在运行一个虚拟专用服务器,主机节点运行 OpenVZ。您根本无法运行任何在内核级别工作的东西。这也意味着您不能使用操作系统虚拟化来分离进程,并提供额外的安全性。因此,您必须为此目的使用 chroot。

此外,无论可用资源如何,chroot 在任何系统上都是可持续的。简而言之,它的开销是任何虚拟化类型中最少的。这意味着它在许多低端机上仍然很重要。

考虑另一种情况:您在虚拟化环境中运行 apache。你想分开每个用户。通过 chroot 添加到 apache(mod_chroot、mod_security 等)提供虚拟化文件系统将是确保最终用户之间最大隐私的最佳选择。这也有助于防止收集情报,并提供另一层安全性。

简单地说,在层中实现安全性很重要。Chroot 可能就是其中之一。不是每个人和每个系统都有机会访问内核,因此,chroot STILL 仍然有用。在许多应用中,完整的系统虚拟化本质上是矫枉过正的。

回答你的问题

我不特别使用 CentOS,但我知道 Bind 现在在操作之前放弃了它的权限。但是,我认为由于其攻击媒介和潜在漏洞的历史,bind 已被 chroot。

也......自动chroot这个应用程序比没有更有意义,因为不是每个人都可以访问完整的系统/操作系统级虚拟化。这反过来,在理论上,有助于为 CentOS 用户群提供安全性:

操作系统提供商根本不会假设每个人都在运行相同的系统。通过这种方式,它们可以帮助提供额外的安全层……

如此多的应用程序使用 this是有原因的,为什么您的操作系统在默认情况下这样做是有原因的:因为它被用作安全功能,并且确实有效。如前所述,经过精心准备,这是潜在攻击者必须克服的另一个障碍——大多数情况下,将损害限制在仅对 chroot jail 造成的损害。