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

S-K*_*-K' 45 security make gcc

在设置我的虚拟服务器实例期间,我需要使用make. 安装后是否存在任何安全风险make?或者我应该在部署实例之前清理它?

我还在gcc服务器上安装了编译器,用于在部署前构建应用程序。

kas*_*erd 52

有些人会争辩说,生产机器上存在开发工具将使攻击者的生活更轻松。然而,这对攻击者来说是一个很小的障碍,您可以找到的任何其他支持或反对安装开发工具的论据都会更加重要。

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

还有其他更相关的事情需要注意。如果安装的软件包含安全漏洞,攻击者可能会通过以下几种方式暴露它:

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

我不希望开发工具与上述之一相匹配,因此不是一个高风险的包。

如果您有使用开发工具的工作流,那么您首先必须确定这些工作流是否合理,如果是,您应该安装开发工具。

如果您发现服务器上并不真正需要这些工具,出于多种原因,您应该避免安装它们:

  • 节省服务器和备份上的磁盘空间。
  • 安装较少的软件可以更轻松地跟踪您的依赖项。
  • 如果您不需要该软件包,即使安全风险很小,也没有必要承担安装它带来的额外安全风险。

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

  • 我还要补充一点,许多生产系统依赖于解释代码(例如 PHP、Perl、Python 等)。在这种情况下禁止开发工具是没有意义的。我认为像 `gcc` 这样的编译器不会带来比这些更高的风险。正如您所说,能够使用系统上安装的编译器的攻击者通常会做更糟糕的事情,例如上传他们自己的(可能是静态链接的)可执行文件。 (7认同)
  • 相关:[wget 的一个小版本(51 字节?)](https://security.stackexchange.com/questions/57310/a-tiny-version-of-wget-51-bytes)。攻击者使用后续“echo”语句将二进制文件移动到服务器的真实示例。整个过程通过在同一链接中找到的脚本自动化。 (3认同)
  • @Adnan,有趣。据我所知,这个 DVR 示例中的主要安全漏洞是,攻击者首先可以以 root 用户身份使用密码 123456 远程登录到它。拥有或不拥有 wget 或其他工具(在攻击之前)实际上几乎不相关。 (2认同)

EEA*_*EAA 16

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

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

注意:原生打包工具很烂。甚至不要费心去理解它们。相反,请查看 Jordan Sissel 的fpm. 它使包装成为一种绝对的乐趣。

  • 虽然在单独的服务器上构建应用程序是个好主意,但说生产系统上存在编译器是一个重大的安全问题是没有意义的。脚本语言和 JIT 编译系统(Perl、Python、Java 等)怎么样? (12认同)
  • 我在这里问是出于好奇和无知:为什么你说编译器的存在是一个“重大的安全问题”?安装编译器有什么安全问题?这只是你不应该首先在生产服务器上构建代码的问题,因此编译器是多余的,还是编译器本身的存在实际上存在重大的安全问题? (8认同)
  • 生产环境中编译器的存在**不是**“重大安全风险”。我自己已经使用 `echo` 和 `base64` 将二进制文件移动到受感染的盒子中。事实上,你甚至可以[使用一系列 `echo` 语句而不用其他工具](https://security.stackexchange.com/questions/57310/a-tiny-version-of-wget-51-bytes )。 (4认同)

ign*_*nis 16

make是一个与bash.

类似的编译器gcc是一个强大的awk配置,配置了一组标准awk不支持的替换。它不符合 POSIX 标准sortcat在输出中注入垃圾。它是一个交互式文本编辑器(think vi),它被配置为在启动时进行一些编辑,然后在显示用户界面之前退出。

它们本身没有任何不安全的东西,它们不会使您的机器比具有 bash + cat+ shell 重定向的机器更不安全。

  • @kasperd 这个答案是认真的。我认为带来程序员的观点可能会有所帮助。将输入转换为输出的函数不会仅仅因为其输出采用 CPU 可理解的格式而引入漏洞。 (5认同)
  • 一个禅宗的答案,我不知道如何评价它。 (2认同)
  • 我同意你提出的观点。我认为你的回答对已经同意它的人来说是一本很好的读物。我只是担心你的回答可能会被不同意的人当作笑话。 (2认同)

Joh*_*ohn 10

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