如何处理受损的服务器?

信息安全 系统妥协
2021-08-18 22:57:33

我怀疑我的一台或多台服务器受到黑客、病毒或其他机制的破坏:

  • 我的第一步是什么?当我到达现场时,我应该断开服务器,保留“证据”,还有其他初步考虑吗?
  • 如何让服务重新上线?
  • 如何防止同样的事情立即再次发生?
  • 是否有从该事件中学习的最佳实践或方法?
  • 如果我想制定一个事件响应计划,我应该从哪里开始?这应该是我的灾难恢复或业务连续性计划的一部分吗?

这是该主题的规范帖子。最初来自 serverfault

4个回答

最初来自服务器故障。 感谢 Robert Moir (RobM)

很难从你在这里发布的内容中给出具体的建议,但我确实有一些基于我很久以前写的一篇文章的一般性建议,当时我仍然可以打扰到博客。

不要惊慌

首先,除了从入侵之前的备份中恢复系统之外,没有“快速修复”,这至少有两个问题。

  1. 很难确定入侵发生的时间。
  2. 它不能帮助您关闭允许他们上次闯入的“漏洞”,也不能处理可能也发生的任何“数据盗窃”的后果。

黑客入侵他们的网络服务器的受害者不断地问这个问题。答案很少改变,但人们一直在问这个问题。我不确定为什么。也许人们只是不喜欢他们在寻求帮助时看到的答案,或者他们找不到他们信任的人来给他们建议。或者,也许人们阅读了这个问题的答案,过分关注 5% 为什么他们的案例很特殊,并且与他们可以在网上找到的答案不同,而错过了 95% 的问题和答案,因为他们的案例足够接近相同作为他们在网上阅读的。

这让我想到了第一个重要的信息。我真的很感激你是一个特别独特的雪花。我很欣赏您的网站也是如此,因为它反映了您和您的业务,或者至少反映了您代表雇主的辛勤工作。但是对于外面的人来说,无论是寻找问题的计算机安全人员试图帮助你,还是攻击者本人,你的问题很可能与他们遇到的所有其他案例至少 95% 相同曾经看过。

不要把攻击个人化,也不要把这里的建议或你从其他人那里得到的建议个人化。如果您只是在成为网站黑客的受害者后阅读本文,那么我真的很抱歉,我真的希望您能在这里找到一些有用的东西,但现在不是让您的自我妨碍您需要做的事情的时候做。

您刚刚发现您的服务器被黑了。怎么办?

不要恐慌。绝对不要仓促行事,也绝对不要假装事情从未发生过,根本不采取行动。

第一:了解灾难已经发生。现在不是否认的时候;是时候接受已经发生的事情,以现实的态度对待它,并采取措施管理影响的后果。

其中一些步骤会受到伤害,并且(除非您的网站包含我的详细信息的副本)我真的不在乎您是否忽略所有或部分这些步骤,但这样做最终会使事情变得更好。这种药的味道可能很糟糕,但有时如果你真的想让治疗起作用,你就不得不忽略这一点。

阻止问题变得比现在更糟:

  1. 您应该做的第一件事是将受影响的系统与 Internet 断开连接。无论您遇到什么其他问题,让系统连接到网络只会让攻击继续进行。我的意思是字面意思;如果需要的话,让某人亲自访问服务器并拔下网络电缆,但在您尝试做任何其他事情之前断开受害者与抢劫者的连接。
  2. 更改与受感染系统位于同一网络的所有计算机上所有帐户的所有密码。不完全是。所有帐户。所有电脑。是的,你是对的,这可能是矫枉过正;另一方面,它可能不会。两种方式你都不知道,是吗?
  3. 检查您的其他系统。特别注意其他面向 Internet 的服务,以及那些持有金融或其他商业敏感数据的服务。
  4. 如果系统持有任何人的个人数据,请立即通知负责数据保护的人员(如果不是您)并敦促全面披露。我知道这个很难。我知道这个会很痛。我知道许多企业希望将此类问题隐藏在地毯下,但企业将不得不处理它 - 并且需要在关注任何和所有相关隐私法的情况下这样做。

不管你的客户对你告诉他们问题有多恼火,如果你不告诉他们,他们会更加恼火,而且他们只有在有人使用他们的信用卡详细信息收取价值 8,000 美元的商品后才会自己发现从你的网站偷来的。

还记得我之前说的话吗?坏事已经发生了。现在唯一的问题是你如何处理它。

充分理解问题:

  1. 在这个阶段完全完成之前,不要让受影响的系统重新上线,除非你想成为那个帖子是我真正决定写这篇文章的转折点的人。我不会链接到那个帖子,这样人们就可以得到一个廉价的笑声,但真正的悲剧是人们无法从错误中吸取教训。
  2. 检查“被攻击”的系统,了解攻击如何成功地危及您的安全。尽一切努力找出攻击的“来源”,以便您了解您有哪些问题以及需要解决哪些问题,以确保您的系统在未来安全。
  3. 再次检查“被攻击”的系统,这一次是为了了解攻击的去向,以便您了解哪些系统在攻击中受到损害。确保您跟进任何暗示受损系统可能成为进一步攻击您的系统的跳板的指针。
  4. 确保完全了解任何和所有攻击中使用的“网关”,以便您可以开始正确关闭它们。(例如,如果您的系统受到 SQL 注入攻击,那么您不仅需要关闭它们所侵入的特定有缺陷的代码行,还需要审核您的所有代码以查看是否存在相同类型的错误是在别处制作的)。
  5. 了解攻击可能会因为不止一个缺陷而成功。通常,攻击的成功不是通过找到系统中的一个主要错误,而是通过将几个问题(有时它们本身很小且微不足道)串在一起来破坏系统。例如,使用 SQL 注入攻击向数据库服务器发送命令,发现您正在攻击的网站/应用程序在管理用户的上下文中运行,并使用该帐户的权限作为垫脚石来破坏其他部分一个系统。或者黑客喜欢这样称呼它:“在办公室里利用人们常犯的错误的另一天”。

为什么不直接“修复”您检测到的漏洞利用程序或 rootkit 并将系统重新上线?

在这种情况下,问题在于您不再控制该系统。它不再是你的电脑了。

确定您已控制系统的唯一方法是重建系统。虽然发现和修复用于侵入系统的漏洞利用具有很大的价值,但一旦入侵者获得控制权,您就无法确定对系统还做了什么(事实上,对于招募新人的黑客来说,这并非闻所未闻)系统进入僵尸网络,以修补他们自己使用的漏洞,保护“他们的”新计算机免受其他黑客攻击,以及安装他们的 rootkit)。

制定恢复计划并使您的网站重新上线并坚持下去:

没有人希望离线时间超过他们必须的时间。这是给定的。如果该网站是一个创收机制,那么快速使其重新上线的压力将是巨大的。即使唯一危在旦夕的是您/您公司的声誉,这仍然会产生很大的压力来迅速恢复。

但是,不要屈服于过快重新上线的诱惑。而是尽快行动以了解导致问题的原因并在重新上线之前解决它,否则您几乎肯定会再次成为入侵的受害者,并记住,“被黑客入侵一次可以归类为不幸;之后再次被黑客入侵看起来像是粗心大意”(向奥斯卡王尔德道歉)。

  1. 我假设您甚至在开始本节之前就已经了解了导致成功入侵的所有问题。我不想夸大这个案例,但如果你没有先这样做,那么你确实需要这样做。对不起。
  2. 永远不要支付勒索/保护费。这是一个容易标记的标志,你不希望那个短语曾经用来描述你。
  3. 不要试图在没有完全重建的情况下将相同的服务器重新上线。在旧硬件上构建一个新盒子或“从轨道上对服务器进行核对并进行全新安装”应该比在旧系统上审核旧系统的每个角落以确保它在放回之前是干净的要快得多又上线了。如果您不同意这一点,那么您可能不知道确保系统完全清洁的真正含义,或者您的网站部署程序一团糟。您可能拥有站点的备份和测试部署,您可以使用它们来构建实时站点,如果您没有,那么被黑客入侵并不是您最大的问题。
  4. 在重新使用黑客攻击时系统上“实时”的数据时要非常小心。我不会说“永远不要这样做”,因为您会忽略我,但坦率地说,我认为您确实需要考虑在您知道无法保证其完整性时保留数据的后果。理想情况下,您应该从入侵之前的备份中恢复它。如果您不能或不会这样做,您应该非常小心这些数据,因为它已被污染。如果这些数据属于客户或网站访问者而不是直接属于您,您应该特别注意对其他人的后果。
  5. 仔细监控系统。您应该下定决心在未来将其作为一个持续的过程(更多内容见下文),但在您的网站重新上线后的这段时间内,您会格外小心地保持警惕。入侵者几乎肯定会回来,如果你能发现他们试图再次闯入,你肯定会很快看到你是否真的关闭了他们之前使用的所有漏洞以及他们为自己制造的任何漏洞,并且你可能会收集到有用的信息您可以传递给当地执法部门的信息。

降低未来的风险。

您需要了解的第一件事是,安全是一个过程,您必须在设计、部署和维护面向 Internet 的系统的整个生命周期中应用它,而不是像廉价的那样在代码上贴几层之后画。为了获得适当的安全性,需要从一开始就设计服务和应用程序,并将其作为项目的主要目标之一。我意识到这很无聊,而且你以前都听过,而且我“只是没有意识到让你的 beta web2.0 (beta) 服务在网络上进入 beta 状态的压力”,但事实是这一直被重复,因为它第一次被说是真的,它还没有成为谎言。

你无法消除风险。你甚至不应该尝试这样做。但是,您应该做的是了解哪些安全风险对您很重要,并了解如何管理和降低风险的影响以及风险发生的可能性。

您可以采取哪些步骤来降低攻击成功的可能性?

例如:

  1. 允许人们闯入您的站点的漏洞是否是供应商代码中的已知错误,并且有补丁可用?如果是这样,您是否需要重新考虑如何在面向 Internet 的服务器上修补应用程序的方法?
  2. 允许人们闯入您的站点的漏洞是否是供应商代码中的未知错误,没有补丁可用?我当然不主张在遇到这样的事情时更换供应商,因为他们都有自己的问题,如果你采取这种方法,你最多会在一年内用完平台。但是,如果一个系统经常让您失望,那么您应该迁移到更强大的系统,或者至少重新构建您的系统,以便易受攻击的组件保持在棉花中并尽可能远离敌对的眼睛。
  3. 该缺陷是您(或为您工作的人)开发的代码中的错误吗?如果是这样,您是否需要重新考虑如何批准将代码部署到实时站点的方法?是否可以通过改进的测试系统或更改您的编码“标准”来捕获错误(例如,虽然技术不是万能药,但您可以通过使用有据可查的编码技术来降低 SQL 注入攻击成功的可能性)。
  4. 该漏洞是由于服务器或应用程序软件的部署方式问题造成的吗?如果是这样,您是否在可能的情况下使用自动化程序来构建和部署服务器?这些对于在所有服务器上保持一致的“基线”状态非常有帮助,最大限度地减少必须在每台服务器上完成的自定义工作量,从而最大限度地减少出错的机会。代码部署也是如此——如果你需要做一些“特别”的事情来部署你的 web 应用程序的最新版本,那么尽量自动化它并确保它总是以一致的方式完成。
  5. 通过更好地监控您的系统,是否可以更早地发现入侵?当然,为您的员工提供 24 小时监控或“随叫随到”系统可能不具有成本效益,但有些公司可以为您监控面向 Web 的服务,并在出现问题时提醒您。你可能会决定你买不起或不需要它,这很好......只要考虑到它。
  6. 在适当的情况下使用诸如tripwire 和nessus 之类的工具——但不要因为我说过就盲目地使用它们。花时间学习如何使用一些适合您环境的优秀安全工具,保持这些工具的更新并定期使用它们。
  7. 考虑聘请安全专家定期“审核”您的网站安全性。同样,您可能会决定您买不起或不需要它,这很好......只要考虑到它。

您可以采取哪些步骤来减少成功攻击的后果?

如果您认为您家的下层洪水的“风险”很高,但还不足以保证搬家,您至少应该将不可替代的传家宝搬到楼上。对?

  1. 你能减少直接暴露在互联网上的服务数量吗?您能否在内部服务和面向 Internet 的服务之间保持某种差距?这确保即使您的外部系统受到损害,使用它作为跳板攻击您的内部系统的机会也是有限的。
  2. 您是否在存储不需要存储的信息?当这些信息可以存档在其他地方时,您是否“在线”存储这些信息。这部分有两点;显而易见的一点是人们无法从您那里窃取您没有的信息,第二点是您存储的越少,您需要维护和编码的就越少,因此错误溜进的机会就越少您的代码或系统设计。
  3. 您是否为您的网络应用程序使用“最少访问”原则?如果用户只需要从数据库中读取,请确保 Web 应用程序用于服务的帐户仅具有读取访问权限,不允许其写入访问权限,当然也不允许系统级访问权限。
  4. 如果您对某事不是很有经验,并且它不是您业务的核心,请考虑将其外包。换句话说,如果您经营一个小型网站,谈论编写桌面应用程序代码并决定开始从该网站销售小型桌面应用程序,那么请考虑将您的信用卡订购系统“外包”给像 Paypal 这样的公司。
  5. 如果可能的话,将练习从受损系统中恢复作为灾难恢复计划的一部分。可以说,这只是您可能遇到的另一种“灾难场景”,它有自己的一系列问题和问题,与通常的“服务器机房着火”/“被巨型服务器吃掉的小动物入侵”之类的事情不同。

...最后

我可能没有遗漏其他人认为重要的内容,但是如果您不幸成为黑客的受害者,上述步骤至少应该可以帮助您开始解决问题。

最重要的是:不要惊慌。三思而后行。一旦你做出决定,就坚定地行动,如果你有什么要添加到我的步骤列表中,请在下面留下评论。

在 Linux 中使文件“不可删除”是通过attributes完成的,特别是“immutable”属性。查看lsattr查看属性,查看chattr更改它们。

然而,这只回答了近端原因。重要的你的机器被敌对控制了,劫机者为了他自己的狡猾目标安装了东西。特别是,他很可能安装了一个rootkit,以保持条目打开,尽管像您正在尝试做的清理尝试。Rootkit 可能以机器本身不可见的方式更改了内核和/或系统二进制文件,这将阻止它们自己的删除。底线是您的机器无法保存您无法可靠地再次清洁机器,只需重新格式化磁盘并从头开始重新安装即可。

让自己免于未来的烦恼和头痛;从轨道核对你的系统

就像我在对 ServerFault 的交叉帖子的回复中所说的那样。这是一个很好的解释。此外,这当然取决于攻击的类型;希望或不幸的是,这种攻击足够嘈杂,以至于您将其识别为正在进行的攻击。或者,在你可以合理确定的是攻击的早期阶段,我会说这个操作顺序是一个很好的蓝图。

但是,您知道的妥协指标可能无法描绘感染的全貌,并且在您了解程度之前断开该 PC 可能不符合您的最佳利益,我认为最好找出在您开始从网络中删除任何受影响的系统/设备之前,您可能无法控制进入点以及您可能无法控制的系统。

事情的真相可能是那些演员在你的系统中的时间比你想象的要长,并且过早地展示你的手(即我终于注意到你坐在我的系统中)可能会使根除变得更加困难。

没有真正简单的答案,但 RobM 提供的答案是一个绰绰有余的起点。在所有压力下,有多个正确答案也可能是错误答案。几乎就像不确定性原理一样,在您尝试之前,您不知道答案是否正确。

此外,还应查看(PDF) NIST 计算机安全事件处理指南

全部备份 - 这样您就可以在沙盒类型的环境中进行取证。

然后 - 从 0 开始 - 从 NOTHING 开始。

新的操作系统 - 完全修补。应用程序 - 当前最新的数据文件......来自您的备份(如果可能,在您被入侵之前)。如果不是,您需要内容和权限扫描所有内容。

然后对黑客如何进入进行全面审查,并确保它不会再次发生。

当您发现发生了什么时 - 采取措施确保它不会再次发生,并(内部和/或外部)发布您发现的内容(您可以选择省略对策)。

除非你从中吸取教训——否则你将再次遭受同样的命运。