是否经常运行“apt-get upgrade”以保证 Web 服务器的安全?

信息安全 Web应用程序 linux 网络服务器
2021-08-18 06:44:25

假设:

  • 运行 Web 应用程序的普通 LAMP Web 服务器。(例如 AWS EC2+Apache2+MySQL+Php7)
  • 不是某些超级黑客或政府组织等直接针对的目标。
  • 与上述相关,没有社会工程和网络应用程序本身是安全的。

以谁为目标?

自动扫描和漏洞利用。还有其他人吗?

经常运行是否apt-get update && apt-get upgrade足以保证网络服务器的安全?


如果不

还要负责服务器的“普通”网络应用程序程序员还应该做些什么来保证网络服务器对于初创公司的合理安全。

这取决于...

是的,它总是取决于很多事情。请包括对常见 Web 应用程序程序员可能知道或可能不知道的最常见情况(帕累托原则)的假设。

4个回答

您已经消除了许多通常会给您带来麻烦的问题(即假设您托管的应用程序是完全安全的)。从实际的角度来看,您绝对必须考虑这些。

但大概因为你知道它们,你有一些保护措施到位。那我们来说说剩下的吧。

首先,您可能不应该“每隔一段时间”运行一次更新。大多数发行版都运行安全公告邮件列表,一旦那里宣布了漏洞,它就会相当公开(嗯,通常是在此之前,但在您的情况下,您无法真正监控世界上所有的安全列表)。这些是低流量列表,因此您应该真正订阅您的发行版并在收到通知时进行升级。

通常,随意维护的服务器可能会在很长一段时间内受到暴力破解或字典攻击,因为维护者并没有真正寻找迹象。然后应用通常的对策是一个好主意 - 没有 ssh 密码身份验证,ssh 和 apache 上的 fail2ban - 理想情况下,在发生可疑活动时设置监控警报。如果这超出了您的维护(时间)预算,请养成定期登录以手动检查这些内容的习惯。

虽然传统上不被认为是安全的一部分,但您希望确保可以快速启动新服务器。这意味着服务器配置脚本(Ansible、Chef 等工具无论如何在系统管理中都很有用)和您测试过的自动备份系统。如果您的服务器遭到破坏,您必须假设它已被永久破坏,然后将其擦除,如果您没有定期备份数据,那就太糟糕了。

不,这不足以保证您的安全。

它可能会让您在一段时间内保持安全,但安全性复杂且节奏快,因此您的方法对于长期安全性确实不够好如果每个人都做出与您在问题中所做的相同的假设,那么互联网现在将成为一个大型僵尸网络。

所以不,我们不要将这个问题限制在包裹上。让我们从整体上看一下服务器安全性,这样任何阅读本文的人都会了解到底有多少移动部件。

  • APT(例如 Ubuntu 的存储库)仅涵盖您的软件堆栈的一部分。如果您使用(例如)Wordpress 或其他流行的 PHP 库并且不受 repo 控制,那么您也需要更新它。更大的框架有自动执行此操作的机制,但要确保您正在备份并监控服务状态,因为它们并不总是顺利进行。

  • 你自己写的,所以你认为你对脚本小子是安全的?有自动 SQL 注入和 XSS 漏洞利用机器人到处乱跑,戳每个查询​​字符串和类似的形式。

    这实际上是一个好的框架有助于防止不了解这些攻击细微差别的程序员的地方之一。让一个称职的程序员审核代码也有助于减轻这里的恐惧。

  • PHP(或 Python,或者你正在运行的任何东西)真的需要能够在任何地方编写吗?强化您的配置,您将减轻许多攻击。理想情况下,webapp 唯一能够写入的地方是数据库,以及永远不会执行脚本的地方(例如,只允许提供静态文件的 nginx 规则)。

    PHP 默认值(至少人们如何使用它们)允许 PHP 在 webroot 的任何位置读取和写入 PHP。如果您的网站被利用,这将产生严重影响。

    注意:如果您确实阻止了写访问,则 WordPress 之类的东西将无法自动更新自己。寻找类似的工具wp-cli并让它们按计划运行。

  • 而且您的更新计划非常有害。到底什么是“时常”?严重的远程安全漏洞的半衰期很短,但在 0 天和补丁可用性之间已经存在延迟,并且一些漏洞利用也从补丁中逆向工程(以捕捉慢戳)。

    如果您每月只应用一次更新,那么您很可能会在野外运行可利用的软件。TL;DR:使用自动更新

  • 发行版的版本不会永远持续下去。如果您明智并选择了 LTS 版本的 Ubuntu,那么您距离初始版本还有 5 年时间。在那段时间内将推出另外两个 LTS 版本,这为您提供了选择。

    如果您在设置服务器时处于“更新就是更好”的狂暴状态并使用 16.10,那么您有9 个月的时间。是的。然后你必须升级到 17.04、17.10 才能在 18.04 LTS 上放松。

    如果您的 Ubuntu 版本失效,您可以整天进行 dist-upgrade,但您不会获得任何安全升级。

  • LAMP 堆栈本身并不是标准 Web 服务器的唯一攻击媒介。

    • 需要强化你的 SSH 配置使用 SSH 密钥、禁用密码、绕过端口、禁用 root 登录、监控暴力尝试并使用fail2ban.
    • ufw使用(等)防火墙关闭任何其他服务。
    • 永远不要暴露数据库(除非你需要,然后在防火墙中锁定传入的 IP)。
    • 不要随意安装 PHP 脚本,否则你忘记它们,它们被黑客入侵。
  • 您的描述中没有监控。你瞎了 如果那里确实发生了某些事情,并开始发送垃圾邮件、感染您的网页等,您怎么知道发生了不好的事情?过程监控。与 git 的计划文件比较(确保它是来自服务器的只读访问)。

  • 考虑 ISP 的安全性(物理和远程)。一角钱的“主机”(又名 CPanel 海盗)——每月 2 美元的无限制托管计划——是否在安全方面投入了与专用服务器设施相同的资源?四处询问并调查违规历史。

    注意:公开的违规行为不一定是坏事。小型主机往往没有任何记录,当事情被破坏时,没有许多知名主机和服务执行的公共“事后分析”。

  • 然后就是了。您编写所有这些内容的计算机的安全性几乎与服务器一样重要。如果您使用相同的密码,您将承担责任。使用物理 FIDO-UF2 密钥保护您的 SSH 密钥。

我已经从事 devops 大约 15 年了,这你可以在工作中学到的东西,但实际上只需要一次违规——一个少年,一个机器人——就破坏了整个服务器并导致数周的工作对工作产品进行消毒。

只需了解正在运行的内容和暴露的内容,就可以帮助您对正在做的事情做出更好的决定。我只是希望这可以帮助某人开始审核他们的服务器的过程。

但是,如果你——普通的 web 应用程序程序员——不愿意深入研究这类东西,你甚至应该运行服务器吗?这是一个严肃的问题。我不会告诉你绝对不应该,但是当你忽略这一切,你的服务器被黑客入侵,你的客户损失了金钱,你暴露了个人客户信息(例如账单数据)并且你被起诉时,你会发生什么? 您是否为该级别的损失和责任风险投保?

但是,是的,这就是为什么托管服务比哑服务器成本高得多的原因。


关于备份的优点...

完整的系统备份可能是您可以保留的最糟糕的东西——为了安全——因为如果你被黑客入侵,你会很想使用它。他们唯一的地方是从硬件故障中恢复。

在 hack 中使用它们的问题是你重置到更早的时间点。然而,你的堆栈中的更多缺陷现在很明显,甚至更多的漏洞利用存在于你的漏洞中。如果您将该服务器重新上线,您可能会立即被黑客入侵。您可以对传入流量进行防火墙并进行软件包升级,这可能会对您有所帮助,但此时您仍然不知道是什么得到了您,或者什么时候得到了您。您的所有假设都基于您看到的症状(页面上的广告注入,垃圾邮件在您的 mailq 中被退回)。黑客攻击可能是在那之前的几个月。

它们显然总比没有好,并且在磁盘死机的情况下很好,但同样,它们对于安全性来说是垃圾

好的备份是秘诀

你想要一些东西——只是一个简单的语言文档或像 Ansible/Puppet/Chef 例程这样的技术性东西——可以指导某人将整个站点恢复到一个全新的服务器。需要考虑的事项:

  • 要安装的软件包列表
  • 要进行的配置更改列表
  • 如何从版本控制中恢复网站源。
  • 如何恢复数据库转储*,以及您可能不受版本控制的任何其他静态文件。

您可以在这里越详细越好,因为这也可以作为个人备份我的客户知道,如果死了,他们有一个经过测试的计划,可以将他们的网站恢复到他们直接控制的硬件上。

一个好的脚本恢复应该不超过 5 分钟。因此,即使是脚本式还原和还原磁盘映像之间的时间差也是最小的。

*注意:也必须检查数据库转储。确保您的系统中没有任何新的管理员用户或随机脚本块。这与检查源文件一样重要,否则您将再次被黑客入侵。

如果您确实经常运行更新(即至少每天,而不是仅“每隔一段时间”) ,那么您保持服务器大部分安全的可能性很高。

但是,有时会发生严重错误,例如ShellshockImageTragick不安全的服务器配置也可能使攻击成为可能。这意味着除了运行定期更新之外,您还应该采取更多措施,例如:

  • 通过运行最小系统来减少攻击面,即不要安装任何不必要的软件
  • 通过限制从外部访问的任何服务来减少攻击面,即不允许基于密码的 SSH 登录(仅基于密钥),不要运行不需要的服务等
  • 确保您了解关键更新的影响
  • 预计系统会受到攻击并尝试减少影响,例如通过运行可从外部访问的某些 chroot、jail 或容器中的服务
  • 记录登录失败等重要事件,了解日志并实际分析日志

尽管如此,最常用的初始攻击媒介可能是不安全的 Web 应用程序,如 Wordpress 或其他 CMS。但是您的假设是 Web 应用程序是完全安全的,所以希望确实如此。

大多数现代 Linux 发行版都带有某种自动更新解决方案。您应该考虑在您的服务器上打开它。这将大大减少您的服务器易受攻击的时间。

正如您提到 Debian,您应该考虑设置unattended-upgradesRedHat 有 yum-cron,Suse 可以通过 YaST 获取它们。

这些升级通常仅限于安全补丁,不太可能破坏您的系统,但这并非完全不可能。最终由您来衡量这种方法的风险和收益。