我正在使用bind并开始想知道为什么该软件例如在chroot中运行的CentOS中。别误会我,我知道绑定是什么,chroot(jail)是干什么的。但是我的主要问题是,没有chroot的绑定运行是如此不安全吗?
在没有监牢的情况下进行安装真的有害吗(比其他任何服务或软件都多)。在系统中,有许多没有chroot的进程正在运行,我认为其中任何一个的妥协都是非常危险的,但是是什么使具名的操作系统比没有chroot的其他软件更危险?
我正在使用bind并开始想知道为什么该软件例如在chroot中运行的CentOS中。别误会我,我知道绑定是什么,chroot(jail)是干什么的。但是我的主要问题是,没有chroot的绑定运行是如此不安全吗?
在没有监牢的情况下进行安装真的有害吗(比其他任何服务或软件都多)。在系统中,有许多没有chroot的进程正在运行,我认为其中任何一个的妥协都是非常危险的,但是是什么使具名的操作系统比没有chroot的其他软件更危险?
Answers:
正如@Some Guy提到的那样,您必须从历史角度考虑这一点。
历史的观点是,单个硬件在单个操作系统下就是十几种不同的服务。如果一项服务遭到破坏,则该硬件上的所有内容都会受到破坏。
使用虚拟化,这已不再是一个大问题。从虚拟机中逃脱并非不可能,但这绝非易事。脱离虚拟机肯定比从root特权运行的进程脱离chroot困难得多。因此,我的绑定服务器在自己的VM上运行。在那种情况下,对于chroot来说确实没有多大意义,因为损坏已经仅仅因为它是VM而已受到限制。
chroot是创建虚拟机之类的非常弱的尝试。可以通过具有根特权的任何进程来逃避Chroots。chroot不是必需的,不能用作安全机制。具有BSD监牢或LXC的chroot可以为您提供OS级虚拟化功能,并提供了安全功能。但是,如今,它们很容易在整个计算机上启动新的VM,因此不值得进行设置或学习如何为此使用OS级虚拟化工具。
较早版本的bind不会放弃特权。在Unix上,只有root帐户可以打开1024以下的端口,并且众所周知,Bind需要监听udp / 53和tcp / 53。由于Bind是从root开始的,并且不放弃特权,因此任何妥协都意味着整个系统都可能受到损害。这些天几乎所有的软件都将开始打开其套接字,并执行需要root特权的其他任何操作,然后它们将以非特权帐户的身份更改正在运行的用户。一旦特权被放弃,对主机系统的危害就大大降低了。
其他答案都很好,但是没有提到安全性的概念。您添加到系统中的每一层安全都是对手必须克服的另一层。将BIND放在chroot中会增加一个障碍。
假设BIND中存在一个可利用的漏洞,并且某人能够执行任意代码。如果他们位于chroot中,则需要先打破这些限制,然后再进入系统中的其他任何位置。如前所述,chroot破解需要root特权。BIND并非以root身份运行,并且chroot中应该有最少的工具可用,从而进一步限制了选项,并且基本上只剩下系统调用。如果没有系统调用来提升特权,则对手将无法查看您的DNS记录。
正如SomeGuy所提到的,上述情况在某种程度上不太可能,因为BIND如今几乎没有漏洞,并且它们主要限于DoS类型的方案,而不是远程执行。就是说,在许多操作系统上,默认都使用chroot运行,因此不太可能花费任何精力来保持略微提高的安全性。
前言
我不断听到人们重申互联网上的误解..因此,我将尽力澄清一下
首先 有多少意外的发现有过,它只是..由于因果,正在使用的东西弄成其他比其预期的目的?
Chroot监狱曾经是什么,现在是什么
Chroot最初旨在更改进程或用户的根目录(非常适合从未知来源编译软件)。这为基本系统以及快速测试台设备(包括易于清理的设备)提供了安全性。从那以后,它的概念和隐含用途肯定发生了变化。
chroot已被有效地使用,并且直接在几个程序和库的代码库中(例如,openSSHd,apache2 + mod_security2 / mod_chroot,dovecot,sendmail,openVPN,pam_chroot 等)。假设所有这些主流应用程序都已实施了错误的安全解决方案,那是不正确的
chroot是文件系统虚拟化的解决方案:仅此而已。只要您遵守在chroot监狱中运行进程的准则,就可以轻易脱离chroot的假设也不成立。
一些步骤来保护您的chroot监狱
即不要将进程作为ROOT运行。这可能会打开一个根升级向量(在chroot内部或外部也是如此)。不要使用与chroot 外部的另一个进程相同的用户在chroot 内部运行一个进程。将每个进程和用户分成自己的Chroot,以限制攻击面并提供隐私。仅挂载必要的文件,库和设备。最后,chroot不能替代基本系统安全性。全面保护系统。
另一个重要说明:很多人认为OpenVZ已损坏,或者与完整的系统虚拟化相比并不相等。他们之所以做这个假设是因为它实际上是一个Chroot,带有已消毒的过程表。在硬件和设备上采取了安全措施。大多数都可以在chroot中实现。
并非每个管理员都具备在专用服务器上或在完整的系统虚拟化条件下保护所有必要内核参数所需的知识水平。这意味着部署OpenVZ意味着您的客户在部署他们的应用程序之前将没有多少攻击面可以尝试覆盖和保护它们。好的主机将很好地确保这些参数的安全,这反过来,这不仅对节点上或数据中心中的每个人都更有利,而且对整个Internet来说也更好。
如前所述,chroot提供文件系统虚拟化。您必须确保没有setuid可执行文件,不安全的应用程序,库,悬挂的无主符号链接等。如果攻击者可能破坏绑定,他们将需要在虚拟文件系统中进行搜索以缓冲溢出,使用文件描述符或以其他方式折衷通常是通过特权提升或将其有效载荷注入基本系统来逃离监狱的。
如果发生这种情况,通常是由于错误更新,零时差攻击或惯常的人为错误导致的。
为什么仍然使用chroot,而不是完整的系统虚拟化
请考虑以下情形:您正在运行虚拟专用服务器,并且主机节点运行OpenVZ。您根本无法在内核级别运行任何有效的工具。这也意味着您不能使用操作系统虚拟化来分离进程,并提供额外的安全性。因此,您必须为此目的使用chroot。
此外,无论可用资源如何,chroot在任何系统上都是可持续的。简而言之,它具有任何虚拟化类型中最少的开销。这意味着它在许多低端设备上仍然很重要。
考虑另一种情况:您的Apache在虚拟环境中运行。您想分隔每个用户。通过chroot附加到apache(mod_chroot,mod_security等)提供虚拟文件系统将是确保最终用户之间最大程度的隐私的最佳选择。这也有助于防止英特尔收集,并提供了另一层安全保护。
简而言之,实现分层安全很重要。Chroot可能是其中之一。并非每个人和每个系统都可以访问内核,因此chroot STILL是有目的的。在各种各样的应用中,完整的系统虚拟化实际上是过分的。
回答您的问题
我不特别使用CentOS,但我知道Bind现在会在操作前放弃其特权。但是,我认为由于其攻击媒介和潜在漏洞的历史,该绑定已受到限制。
同样,自动chroot这个应用程序比没有意义,因为不是每个人都可以访问完整的系统/操作系统级虚拟化。从理论上讲,这反过来有助于为CentOS用户群提供安全性:
操作系统提供者只是假设每个人都在运行相同的系统就不会四处走动。通过这种方式,他们可以帮助提供更大范围的额外安全性...
有这么多的应用程序使用此功能的原因,以及为什么显然您的操作系统默认情况下会这样做是有原因的:因为它被用作安全功能,并且确实可以工作。如前所述,通过精心的准备,潜在的攻击者在大多数时候必须克服的另一个障碍是将损害限制在仅对chroot监狱造成的损害。
这部分是由于历史原因,当Bind的旧版本具有严重且频繁的安全漏洞时。我还没有真正了解这个主题,但是我敢打赌,自从糟糕的日子以来,它有了很大的进步。
另一个原因,更实际的原因是,它通常以面向Internet的角色进行部署,因此,它易于遭受更多的攻击,探测和一般的恶作剧。
因此,安全方面的经验法则通常是:安全胜过遗憾,特别是因为chroot的工作相对较少。