我该如何处理受到感染的服务器?

我该如何处理受到感染的服务器?

这是一个典型问题关于服务器安全 - 响应违规事件(黑客攻击)
另请参阅:

正典版本
我怀疑我的一台或多台服务器已遭黑客、病毒或其他机制攻击:

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

原始版本

2011.01.02- 周日晚上 9 点半,我正要去上班,因为我们的服务器不知怎么被入侵了,导致 操作系统攻击我们的提供商。服务器的互联网访问已被关闭,这意味着我们 5-600 多个客户站点现已瘫痪。现在这可能是 FTP 黑客攻击,或某个地方的代码存在缺陷。我到那里之前都不确定。

我如何才能快速找到这个问题?如果我不尽快恢复服务器,我们就会面临大量诉讼。任何帮助都非常感谢。我们正在运行 Open SU​​SE 11.0。


2011.01.03- 感谢大家的帮助。幸运的是,我不是唯一负责这台服务器的人,只是离我最近的人。我们设法解决了这个问题,尽管它可能不适用于其他情况下的许多人。我将详细说明我们做了什么。

我们把服务器从网络上拔了下来。它正在对印度尼西亚的另一台服务器进行(试图进行)拒绝服务攻击,而罪犯也在那里。

我们首先尝试确定该攻击来自服务器上的哪个位置,考虑到服务器上有 500 多个网站,我们预计会继续攻击一段时间。但是,由于仍可使用 SSH 访问权限,我们运行命令查找攻击开始时编辑或创建的所有文件。幸运的是,有问题的文件是在冬季假期创建的,这意味着当时服务器上没有创建太多其他文件。

然后,我们就能识别出上传图片文件夹中有问题的文件ZenCart网站。

抽了一会儿烟后,我们得出结论,由于文件的位置,它一定是通过安全性不够的文件上传工具上传的。经过一番谷歌搜索,我们发现 ZenCart 管理面板中存在一个安全漏洞,允许上传唱片公司的图片文件。(它从未真正使用过的部分),发布此表单只是上传了任何文件,它没有检查文件的扩展名,甚至没有检查用户是否已登录。

这意味着可以上传任何文件,包括用于攻击的 PHP 文件。我们在受感染的网站上使用 ZenCart 修复了漏洞,并删除了有问题的文件。

工作完成了,我凌晨 2 点到家


道德 - 始终为 ZenCart 或任何其他 CMS 系统应用安全补丁。因为当安全更新发布时,全世界都会意识到这个漏洞。 - 始终进行备份,并备份您的备份。 - 雇用或安排某人在这种时候在那里。以防止任何人依赖 Server Fault 上的恐慌帖子。

答案1

根据您在此处发布的内容很难给出具体的建议,但根据我很久以前(当时我还懒得写博客)写的一篇文章,我确实有一些通用的建议。

不要恐慌

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

  1. 很难确定入侵发生的具体时间。
  2. 它无法帮助您堵塞上次让他们闯入的“漏洞”,也无法处理可能发生的任何“数据盗窃”的后果。

黑客入侵网络服务器的受害者不断重复问这个问题。答案很少改变,但人们一直在问这个问题。我不知道为什么。也许人们只是不喜欢他们在寻求帮助时看到的答案,或者他们找不到可以信任的人给他们建议。或者人们读了这个问题的答案,过于关注为什么他们的案例特殊且不同于他们在网上找到的答案的 5%,而忽略了问题和答案的 95%,即他们的案例与他们在网上读到的案例非常相似。

这让我想到了第一条重要信息。我真的很感激你是一个特别独特的人。我也感激你的网站,因为它反映了你和你的企业,或者至少反映了你为雇主所做的辛勤工作。但对于局外人来说,无论是试图帮助你解决问题的计算机安全人员,还是攻击者本人,你的问题很可能与他们曾经研究过的其他案例至少有 95% 相同。

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

您刚刚发现您的服务器被黑客入侵了。现在该怎么办?

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

首先,要明白灾难已经发生。现在不是否认的时候,而是接受已经发生的一切,以现实的态度对待它,并采取措施管理影响的后果。

有些步骤会很痛苦,而且(除非你的网站上有我的详细信息)我真的不在乎你是否忽略所有或部分步骤,这取决于你。但正确遵循这些步骤最终会让事情变得更好。药的味道可能很糟糕,但有时如果你真的想让治疗有效,你就必须忽略这一点。

阻止问题变得更加严重:

  1. 您应该做的第一件事是断开受影响系统的互联网连接。无论您遇到什么其他问题,让系统连接到网络只会让攻击继续。我的意思是,如果需要的话,请让某人亲自访问服务器并拔掉网线,但在尝试做任何其他事情之前,请先断开受害者与劫掠者的联系。
  2. 更改与受感染系统位于同一网络的所有计算机上的所有帐户的密码。不是真的。所有帐户。所有计算机。是的,你说得对,这可能有点过头了;另一方面,也可能不是。你也不知道,对吧?
  3. 检查其他系统。特别注意其他面向互联网的服务,以及那些包含财务或其他商业敏感数据的服务。
  4. 如果系统保存了任何人的个人数据,请立即通知负责数据保护的人员(如果不是您),并敦促全面披露。我知道这很难。我知道这会很痛苦。我知道许多企业想掩盖这种问题,但企业必须处理它 - 并且需要关注所有相关的隐私法。

不管您的客户对您告知问题有多么恼火,如果您不告诉他们,他们会更加恼火,而且只有在有人使用他们从您的网站窃取的信用卡信息购买了价值 8,000 美元的商品后,他们才会自己发现。

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

充分了解问题:

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

为什么不直接“修复”你检测到的漏洞或rootkit并让系统重新上线呢?

在这种情况下,问题在于你不再能控制该系统。它不再是你的计算机了。

唯一的办法是肯定确保你已控制系统的唯一方法是重建系统。虽然找到并修复用于入侵系统的漏洞有很大的价值,但你无法确定入侵者一旦获得控制权后还对系统做了什么(事实上,黑客招募系统进入僵尸网络来修补他们自己使用的漏洞,保护“他们的”新电脑免受其他黑客的攻击,以及安装他们的 rootkit,这种情况并不罕见)。

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

没人愿意长时间离线。这是肯定的。如果这个网站是一个创收机制,那么迅速恢复在线的压力将非常大。即使唯一的风险是您/您公司的声誉,这仍然会产生很大的压力,迫使您迅速恢复在线。

但是,不要屈服于过快恢复上网的诱惑。相反,应尽快采取行动,了解问题的原因,并在恢复上网之前解决问题,否则您几乎肯定会再次成为入侵的受害者,请记住,“被黑客攻击一次可以算作不幸;随后再次被黑客攻击则显得疏忽大意”(向奥斯卡·王尔德致歉)。

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

降低未来的风险。

您需要了解的第一件事是,安全性是一个过程,您必须在设计、部署和维护面向 Internet 的系统的整个生命周期中应用它,而不是像廉价油漆一样在代码上涂几层就可以了。为了确保充分的安全性,服务和应用程序需要从一开始就考虑到这一点,并将其作为项目的主要目标之一。我知道这很无聊,您之前已经听说过这一切,我“只是没有意识到”将您的 beta web2.0(beta)服务置于网络上的 beta 状态的压力,但事实是,这一点不断被重复,因为第一次说这句话时它是正确的,而且它还没有变成谎言。

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

您可以采取哪些措施来降低攻击成功的概率?

例如:

  1. 导致人们入侵您网站的漏洞是否是供应商代码中已知的错误,是否有可用的补丁?如果是这样,您是否需要重新考虑如何为面向互联网的服务器上的应用程序打补丁?
  2. 允许人们入侵您网站的漏洞是否是供应商代码中未知的错误,而目前尚无补丁?我绝对不主张在遇到此类问题时更换供应商,因为他们都有各自的问题,如果采用这种方法,您最多一年内就会用完所有平台。但是,如果系统不断让您失望,那么您应该迁移到更强大的系统,或者至少重新设计您的系统,以便将易受攻击的组件包裹在棉絮中,并尽可能远离敌对的目光。
  3. 这个缺陷是你开发的代码中的 bug(或为你工作的承包商)吗?如果是这样,你是否需要重新考虑你批准部署到实时站点的代码的方法?这个 bug 是否可以通过改进测试系统或更改你的编码“标准”来发现(例如,虽然技术不是万能的,但你可以通过使用记录良好的编码技术来降低 SQL 注入攻击成功的概率)。
  4. 该缺陷是否是由于服务器或应用程序软件的部署方式存在问题而导致的?如果是这样,您是否尽可能使用自动化程序来构建和部署服务器?这些程序对于在所有服务器上保持一致的“基线”状态非常有帮助,可以最大限度地减少每台服务器上必须完成的自定义工作量,从而有望最大限度地减少出错的机会。代码部署也是如此 - 如果您需要做一些“特殊”的事情来部署最新版本的 Web 应用程序,那么请努力实现自动化并确保始终以一致的方式完成。
  5. 如果能更好地监控您的系统,入侵是否能更早被发现?当然,24 小时监控或为您的员工提供“随叫随到”的系统可能并不划算,但有些公司可以为您监控面向 Web 的服务并在出现问题时提醒您。您可能会认为您负担不起或不需要它,这没关系……只需考虑一下。
  6. 在适当的情况下使用 tripwire 和 nessus 等工具 - 但不要仅仅因为我这么说就盲目使用它们。花点时间学习如何使用一些适合您环境的优秀安全工具,保持这些工具更新并定期使用它们。
  7. 考虑聘请安全专家定期“审核”您的网站安全。同样,您可能会认为您负担不起或不需要它,这没关系……只需考虑一下即可。

您可以采取哪些措施来减少成功攻击所带来的后果?

如果您认为您家楼下发生洪水的“风险”很高,但还不足以让您搬家,那么您至少应该将那些无可替代的传家宝搬到楼上。对吗?

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

...最后

我可能遗漏了很多别人认为重要的东西,但如果您不幸成为黑客的受害者,上述步骤至少应该可以帮助您开始理清事情。

最重要的是:不要惊慌。三思而后行。做出决定后要坚决行动,如果您对我的步骤列表有任何补充,请在下方留言。

答案2

听起来你有点力不从心;没关系。打电话给你的老板,开始协商紧急安全响应预算。10,000 美元可能是一个不错的起点。然后你需要找人(PFY、同事、经理)开始打电话给专门从事安全事件响应的公司。许多公司可以在 24 小时内做出回应,如果他们在你的城市有办事处,有时甚至更快。

您还需要有人对客户进行分类;毫无疑问,已经有人在这样做了。需要有人通过电话向他们解释发生了什么,正在采取什么措施来处理这种情况,并回答他们的问题。

然后,你需要...

  1. 保持冷静。如果您负责事件响应,那么您现在所做的一切需要展现出最高的专业素养和领导力。记录您所做的一切,并让您的经理和执行团队了解您采取的重大行动;这包括与响应团队合作、禁用服务器、备份数据以及重新上线。他们不需要详细的信息,但他们应该每隔 30 分钟左右就听到您的消息。

  2. 要现实。你不是安全专家,有些事情你不知道。没关系。登录服务器并查看数据时,你需要了解自己的极限。小心行事。在调查过程中,确保不要破坏重要信息或更改以后可能需要的内容。如果你感到不舒服或猜测,那么最好停下来,让经验丰富的专业人士接手。

  3. 准备一个干净的 USB 记忆棒和备用硬盘。您将在这里收集证据。备份您认为可能相关的所有内容;与您的 ISP 的通信、网络转储等。即使执法部门不参与,在发生诉讼的情况下,您也需要这些证据来证明您的公司以专业和适当的方式处理了安全事件。

  4. 最重要的是止损。识别并切断对受感染服务、数据和机器的访问。最好拔掉他们的网线;如果拔不掉,就拔掉电源。

  5. 接下来,您需要移除攻击者并关闭漏洞。据推测,由于您关闭了网络,攻击者不再具有交互式访问权限。现在您需要识别、记录(使用备份、屏幕截图和您自己的个人观察笔记;或者最好从受影响的服务器移除驱动器并制作完整的磁盘映像副本),然后删除他留下的任何代码和进程。如果您没有备份,接下来的部分会很糟糕;您可以尝试手动将攻击者从系统中解救出来,但您永远无法确定您是否得到了他留下的所有东西。Rootkit 非常邪恶,并非所有 Rootkit 都可以检测到。最好的应对措施是识别他用来入侵的漏洞,制作受影响磁盘的映像副本,然后擦除受影响的系统并从已知的良好备份中重新加载。不要盲目信任您的备份;验证它!在新主机再次接入网络之前修复或关闭漏洞,然后将其联机。

  6. 将所有数据整理成报告。此时漏洞已经修复,您可以稍事休息。不要试图跳过这一步;它比流程的其余部分更重要。在报告中,您需要确定哪里出了问题、您的团队如何应对以及您为防止此事件再次发生而采取的步骤。尽可能详细;这不仅是为了您,也是为了您的管理层,以及作为潜在诉讼中的辩护。

这是对要做的事情的一次高调回顾;大部分工作只是文档和备份处理。不要惊慌,你可以做这些事情。我强烈建议您寻求专业的安全帮助。即使您自己无法处理,他们的帮助也是无价的,而且他们通常会配备设备,使流程更轻松、更快捷。如果您的老板对成本感到犹豫,请提醒他,与处理诉讼相比,这笔费用微不足道。

对于你的处境,我深表安慰。祝你好运。

答案3

CERT 有一份文件从 UNIX 或 NT 系统入侵中恢复的步骤这很好。该文件的具体技术细节有些过时,但许多一般建议仍然直接适用。

基本步骤的快速总结如下。

  • 咨询您的安全政策或管理。
  • 获得控制权(使计算机离线)
  • 分析入侵,获取日志,找出问题所在
  • 修理东西
    • 安装一个干净的操作系统版本!!! 如果系统已被破坏,你就不能再信任它了。
  • 更新系统以避免再次发生这种情况
  • 恢复运营
  • 更新您的未来政策并记录

我想特别指出第 E.1 节。

E.1. 请记住,如果一台机器被入侵,那么该系统上的任何内容都可能被修改,包括内核、二进制文件、数据文件、正在运行的进程和内存。一般来说,唯一能确保机器没有后门和入侵者修改的方法是重新安装操作系统

如果您尚未安装像 tripwire 这样的系统,那么您就不可能 100% 确定您已经清理了系统。

答案4

Robert 的“苦涩”回答非常准确,但完全是泛泛之谈(嗯,就像您的问题一样)。如果您有一台服务器和 600 个客户端,这听起来确实像是您遇到了管理问题,并且急需一名全职系统管理员,但这对您现在没有帮助。

我经营一家托管公司,在这种情况下,该公司提供了一些帮助,因此我处理了很多被入侵的机器,但同时也遵循了我们自己的最佳实践。我们总是告诉被入侵的客户重建,除非他们不能完全确定入侵的性质。从长远来看,没有其他负责任的途径。

但是,您几乎肯定只是脚本小子的受害者,他们想要一个发起 DoS 攻击的平台,或者 IRC 弹跳器,或者一些与您客户的站点和数据完全无关的东西。因此,作为重建期间的临时措施,您可以考虑在您的机器上安装一个强大的出站防火墙。如果您可以阻止所有对站点运行并非绝对必要的出站 UDP 和 TCP 连接,您可以轻松地让被入侵的机器对任何从您那里借用它的人都毫无用处,并将对提供商网络的影响降至零。

如果您以前没有这样做过,并且从未考虑过防火墙,这个过程可能需要几个小时,但可能会帮助您恢复客户服务冒着继续给予攻击者访问你的客户数据的风险。既然你说一台机器上有数百个客户端,我猜你托管的是小型企业的小型宣传册网站,而不是 600 个充满信用卡号的电子商务系统。如果是这样的话,这对你来说可能是一个可以接受的风险,而且比审核 600 个网站的安全漏洞更快让你的系统恢复在线你带回了任何东西。但你会知道那里有什么数据,以及你做出这个决定的舒适程度。

这绝对不是最佳做法,但如果这不是到目前为止你的雇主所发生的事情,那么对他们指指点点并要求他们花费数万英镑来组建特警队,因为他们可能会认为这是你的错(无论多么不合理!),这听起来并不是一个切实可行的选择。

你的 ISP 的帮助在这里将非常关键——一些 ISP提供控制台服务器和网络启动环境(插件,但至少你知道要寻找什么样的工具)它可以让你在断开网络的情况下管理服务器。如果这是可行的选择,请要求并使用它。

但从长远来看,你应该根据罗伯特的帖子和对每个站点及其设置的审核来计划系统重建。如果你无法让系统管理员加入你的团队,可以寻找一个托管向 ISP 支付系统管理帮助和 24 小时响应费用。祝你好运 :)

相关内容