安装生产服务器是否安全?


42

在设置虚拟服务器实例期间,我需要使用构建一些应用程序make。安装后是否存在任何安全隐患make?还是应该在部署实例之前清理它?

我还拥有gcc服务器上的编译器,可用于在部署之前构建应用程序。


4
如果让您感觉更好,则在任何地方安装的任何软件都会造成漏洞。
MDMoore313

1
而具有非root shell访问服务器权限的用户可以下载不需要安装的“发行版独立”编译器程序包(.tar.gz),以便于安装...

1
是我还是“安全”的组合?和“ root用户访问权限”相对不舒服
DNA

2
如果您已经安装了gcc,那么实际上几乎没有办法可以使任何潜在的安全问题变得更糟。
沙杜尔

1
@Shadur拥有GCC有什么不同?如果用户已经可以访问计算机,则可以轻松上传gcc的任何副本。无论如何,只要没有特权用户运行,gcc对非特权用户很有用,而不会带来安全风险。

Answers:


50

有人会争辩说,生产机器上存在开发工具将使攻击者的生活更轻松。但是,这对于攻击者来说是一个很小的障碍,以至于您发现的支持或反对安装开发工具的任何其他论点都会带来更大的负担。

如果到目前为止,攻击者能够入侵系统,他们可以调用服务器上存在的任何工具,那么您已经存在严重的安全漏洞。没有开发工具,还有许多其他方法可以将二进制数据写入文件,然后在该文件上运行chmod。想要在系统上使用自定义构建可执行文件的攻击者可以将其构建在自己的计算机上,然后将其传输到服务器。

还有其他更多相关的事情需要注意。如果已安装的软件包含安全漏洞,则可以通过几种方法将其暴露给攻击者:

  • 该软件包可以包含suid或sgid可执行文件。
  • 该软件包可能是系统上的启动服务。
  • 该软件包可以安装在某些情况下会自动调用的脚本(这包括cron作业,但是脚本可以由其他事件(例如,当网络接口的状态更改或用户登录时)调用。
  • 该软件包可以安装设备索引节点。

我不希望开发工具能够满足上述要求之一,因此这不是一个高风险的软件包。

如果您拥有可以使用开发工具的工作流程,则首先必须确定这些工作流程是否合理,如果确实如此,则应安装开发工具。

如果发现您确实不需要服务器上的那些工具,则应出于多种原因而避免安装它们:

  • 节省服务器和备份上的磁盘空间。
  • 安装较少的软件可以更轻松地跟踪您的依赖项。
  • 如果您不需要该软件包,则即使安装了很小的安全风险也无济于事。

如果出于安全原因决定,不允许非特权用户在服务器上放置他们自己的executabel,那么您应该避免的不是开发工具,而是那些在具有执行许可权的文件系统上可写给那些用户的目录。即使在这种情况下,开发工具仍可能会使用,但可能性很小。


6
我还要补充一点,许多生产系统都依赖于解释代码(例如,PHP,Perl,Python等)。在这种情况下禁止开发工具是没有意义的。我认为编译器gcc不希望比这些风险更高。如您所说,能够使用系统上安装的编译器的攻击者通常无论如何都会做更糟的事情,例如上载自己的(可能是静态链接的)可执行文件。
布鲁诺2014年

3
相关消息:wget的微小版本(51个字节?)。一个真实的例子,攻击者使用随后的echo语句将二进制文件移动到服务器中。使用同一链接中的脚本可以自动完成整个过程。
阿迪

2
@Adnan,有趣。据我所知,此DVR示例中的主要安全漏洞是这样的事实,即攻击者可以首先以root用户身份使用密码123456 telnet到它。实际上,拥有或不拥有wget或其他工具(在攻击之前)实际上是无关紧要的。
布鲁诺

15

make是一个具有与语法不同的外壳bash

像这样的编译器gcc是功能强大的,awk配置了一组标准awk不支持的替代项。它不兼容POSIX sortcat在输出中注入垃圾。它是一个交互式文本编辑器(认为vi),配置为在启动时进行一些编辑,然后在显示用户界面之前退出。

它们本身并没有什么不安全的地方,它们不会使您的计算机比具有bash + cat+ shell重定向的计算机更不安全。


2
禅宗的答案,我不知道如何评分。
卡巴斯德(Kasperd),2014年

4
@kasperd这个答案是认真的。我认为提出程序员的观点可能会有所帮助。将输入转换为输出的功能不会仅由于其输出采用CPU可以理解的格式就不会引入漏洞。
ignis 2014年

1
我同意你的观点。我认为您的答案对任何已经同意它的人来说都是一本好书。我只是担心您的回答可能会被一个不同意的人开个玩笑。
卡巴斯德(Kasperd),2014年

我喜欢这个答案远胜于公认的答案:)
Ruslan 2014年

15

make本身很好。make仅仅是一个依赖跟踪和自动化框架。但是,它通常与编译器结合使用,并且最好不要在生产系统上使用,因为它们是完全不必要的。对于所有不需要的软件包,无论是共享库,解释器等,都是如此。应严格控制生产系统上安装的软件,并且仅应提供应用程序所需的那些软件包。

您应该在构建服务器上构建应用程序,将其打包,然后将二进制程序包部署到生产系统。

注意:原生包装工具很烂。甚至不用理会它们。而是查看Jordan Sissel的fpm。它使包装成为绝对的快乐。


8
我在这里出于好奇和无知而问:为什么您说编译器的存在是“重要的安全问题”?安装编译器有什么安全问题?仅仅是因为您不应该在一开始就在生产服务器上构建代码而导致编译器变得多余,或者实际上存在编译器本身的重大安全问题吗?
reirab 2014年

11
虽然最好在单独的服务器上构建应用程序,但是说生产系统上存在编译器是一个重要的安全问题,这没有任何意义。脚本语言和JIT编译的系统(Perl,Python,Java等)呢?
布鲁诺

3
生产环境中存在编译器不是 “重大的安全风险”。我本人已使用echo和将二进制文件移动到了受损的文件箱中base64。实际上,您甚至可以使用一系列echo语句执行此操作,而无需其他工具
阿迪2014年

1
好点,全部。我已经编辑了答案以弄清楚。
EEAA 2014年

9

相反,潜在的问题不在make生产服务器上,而潜在的问题是在生产服务器上构建应用程序,而不是部署经过测试的预构建映像。这种方法可能有正当的理由,但是如果我要求采用它,我会强烈反对。


4

您在询问是否make应将其安装在生产服务器上,但我真正的问题是:谁可以访问该生产服务器,并且您有什么安全措施来应对入侵?如果make未安装但有人可以root访问,您猜怎么着?他们可以手动安装make任何所需的东西。

关于计算机安全性的严酷现实足以防止不必要的访问,而对阻止访问的痴迷并不像:

  1. 谁有权访问服务器?
  2. 您可以采取什么措施从中断后回滚?

这完全取决于您从事的工作。我主要在Web服务器领域工作,我的态度基本上是,任何从我这里获得生产服务器访问权限的人都需要证明技能,知识和成熟度。而已。有时需要几天。有时需要几个月。但是,基本上,生产服务器上最好的安全性是在我们进行其他各种强化服务器工作的基础上控制访问。


1

make本身是无害的。它所做的只是按照指定的顺序运行应用程序,具体取决于您指定的依赖关系以及系统中已经存在的文件。它甚至在安装过程中很有用:您可以使用它将预构建的文件放在需要放置的位置,或者运行单元测试或其他操作。

然而,你需要考虑什么究竟要使用它。它往往是与编译器和其他工具构建应用程序一起使用,以及那些可以用来抵消一些你的防御线。但是,make如果工具不可用,则无法做这些事情。

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.