看完之后关于服务器入侵的这个问题,我开始想知道为什么人们似乎继续相信他们可以使用检测/清理工具来恢复受损系统,或者仅仅通过修复用于损害系统的漏洞。
考虑到各种 root kit 技术以及黑客可以做的其他事情,大多数专家建议你应该重新安装操作系统。
我希望能更好地理解为什么更多的人不直接离开核弹从轨道上观察该系统。
以下是我希望得到解决的几个问题。
- 是否存在格式化/重新安装无法清理系统的情况?
- 您认为在什么类型的情况下可以清理系统,什么时候必须进行完全重新安装?
- 您反对完全重新安装的理由是什么?
- 如果您选择不重新安装,那么您使用什么方法来合理地确信您已经清理并防止再次发生进一步的损坏。
答案1
安全决策最终是一项关于风险的业务决策,就像决定将哪种产品推向市场一样。从这个角度来看,不调平和重新安装的决定是有道理的。但从技术角度来看,则不然。
以下是该商业决策通常涉及的内容:
- 我们的停机时间会给我们带来多少可衡量的损失?
- 当我们必须向客户透露我们业务中断的原因时,我们可能要付出多大代价?
- 我还需要让人们放弃哪些其他活动来重新安装?费用是多少?
- 我们是否有合适的人员知道如何无误地启动系统?如果没有,他们排除故障时我要花多少钱?
因此,当您将这些成本加起来时,可能会认为继续使用“可能”仍然受到损害的系统比重新安装系统更好。
答案2
根据我的一篇文章很久以前写过那时我还有时间写博客。
黑客入侵网络服务器的受害者不断重复问这个问题。答案很少改变,但人们一直在问这个问题。我不知道为什么。也许人们只是不喜欢他们在寻求帮助时看到的答案,或者他们找不到可以信任的人给他们建议。或者人们读了这个问题的答案,过于关注为什么他们的案例特殊且不同于他们在网上找到的答案的 5%,而忽略了问题和答案的 95%,即他们的案例与他们在网上读到的案例非常相似。
这让我想到了第一条重要信息。我真的很感激你是一个特别独特的人。我也感激你的网站,因为它反映了你和你的企业,或者至少反映了你为雇主所做的辛勤工作。但对于局外人来说,无论是试图帮助你解决问题的计算机安全人员,还是攻击者本人,你的问题很可能与他们曾经研究过的其他案例至少有 95% 相同。
不要将这次攻击当成是针对个人的,也不要将以下建议或其他人的建议当成是针对个人的。如果您在成为网站黑客攻击的受害者后阅读本文,那么我真的很抱歉,我真的希望您能在这里找到一些有用的东西,但现在不是让您的自尊心妨碍您需要做的事情的时候。
您刚刚发现您的服务器被黑客入侵了。现在该怎么办?
不要惊慌。绝对不要仓促行事,也绝对不要假装事情从未发生过,根本不采取行动。
首先,要明白灾难已经发生。现在不是否认的时候,而是接受已经发生的一切,以现实的态度对待它,并采取措施管理影响的后果。
有些步骤会很痛苦,而且(除非你的网站上有我的详细信息)我真的不在乎你是否忽略所有或部分步骤,但这样做最终会让事情变得更好。药的味道可能很糟糕,但有时如果你真的想让治疗有效,你就必须忽略这一点。
阻止问题变得更加严重:
- 您应该做的第一件事是断开受影响系统的互联网连接。无论您遇到什么其他问题,让系统连接到网络只会让攻击继续。我的意思是,如果需要的话,请让某人亲自访问服务器并拔掉网线,但在尝试做任何其他事情之前,请先断开受害者与劫掠者的联系。
- 更改与受感染系统位于同一网络的所有计算机上的所有帐户的密码。不是真的。所有帐户。所有计算机。是的,你说得对,这可能有点过头了;另一方面,也可能不是。你也不知道,对吧?
- 检查其他系统。特别注意其他面向互联网的服务,以及那些包含财务或其他商业敏感数据的服务。
- 如果系统保存了任何人的个人数据,请立即向任何可能受到影响的人进行全面、坦诚的披露。我知道这很难。我知道这会很伤人。我知道许多企业想掩盖这种问题,但我担心你不得不面对它。
还在犹豫是否要迈出这最后一步吗?我明白,我确实如此。但请这样看待它:
在某些地方,你可能有法律义务通知当局和/或此类隐私泄露的受害者。无论你的客户听到你告诉他们问题时有多恼火,如果你不告诉他们,他们会更恼火,而且他们只有在有人使用他们从你的网站上窃取的信用卡信息购买了价值 8,000 美元的商品后才自己发现。
还记得我之前说过的话吗?糟糕的事情已经发生了。现在唯一的问题是你如何处理它。
充分了解问题:
- 在这一阶段完全完成之前,不要让受影响的系统重新上线,除非你想成为那个促使我决定写这篇文章的人。我链接到这篇文章不是为了让人们嘲笑;我链接是为了警告你不遵循第一步的后果。
- 检查“受攻击”的系统,了解攻击如何成功破坏您的安全。尽一切努力找出攻击“来自哪里”,以便您了解存在哪些问题以及需要解决哪些问题,以确保您的系统将来安全。
- 再次检查“受攻击”的系统,这一次是为了了解攻击的去向,以便您了解哪些系统在攻击中受到了损害。确保您跟进任何表明受损系统可能成为进一步攻击系统的跳板的线索。
- 确保完全了解所有攻击中使用的“网关”,以便您可以开始正确地关闭它们。(例如,如果您的系统受到 SQL 注入攻击,那么您不仅需要关闭他们闯入的特定有缺陷的代码行,您还需要审核所有代码以查看是否在其他地方犯了相同类型的错误)。
- 了解攻击可能因为不止一个缺陷而成功。通常,攻击的成功不是通过找到系统中的一个主要错误,而是通过将几个问题(有时本身是小问题和琐碎问题)串联起来以破坏系统而成功。例如,使用 SQL 注入攻击向数据库服务器发送命令,发现您正在攻击的网站/应用程序在管理用户的上下文中运行,并使用该帐户的权限作为破坏系统其他部分的垫脚石。或者正如黑客喜欢所说的那样:“办公室里的另一天利用人们常犯的错误”。
制定恢复计划并使您的网站重新上线并坚持执行:
没人愿意长时间离线。这是肯定的。如果这个网站是一个创收机制,那么迅速恢复在线的压力将非常大。即使唯一的风险是您/您公司的声誉,这仍然会产生很大的压力,迫使您迅速恢复在线。
但是,不要屈服于过快恢复上网的诱惑。相反,应尽快采取行动,了解问题的原因,并在恢复上网之前解决问题,否则您几乎肯定会再次成为入侵的受害者,请记住,“被黑客攻击一次可以算作不幸;随后再次被黑客攻击则显得疏忽大意”(向奥斯卡·王尔德致歉)。
- 我假设您在开始本节之前就已经了解了导致入侵成功的所有问题。我不想夸大其词,但如果您还没有这样做,那么您确实需要这样做。抱歉。
- 永远不要支付勒索费/保护费。这是容易上当的标志,你不会希望这句话被用来形容你。
- 在没有完全重建的情况下,请勿尝试将同一台服务器重新投入使用。在旧硬件上构建新机器或“从轨道上拆除服务器并进行全新安装”应该比审核旧系统的每个角落以确保其干净后再重新上线要快得多。如果您不同意这一点,那么您可能不知道确保系统完全清洁的真正含义,或者您的网站部署程序一团糟。您可能有网站的备份和测试部署,您可以使用它们来构建实时网站,如果您没有,那么被黑客攻击就不是您最大的问题了。
- 在重新使用黑客入侵时系统中“实时”的数据时要非常小心。我不会说“永远不要这样做”,因为您只会忽略我的话,但坦率地说,我认为当你知道无法保证数据的完整性时,你确实需要考虑保留数据的后果。理想情况下,你应该从入侵之前制作的备份中恢复这些数据。如果你不能或不会这样做,你应该非常小心这些数据,因为它已被污染。如果这些数据属于客户或网站访问者而不是直接属于你,你应该特别注意对其他人造成的后果。
- 仔细监控系统。您应该决定在未来将此作为持续的过程(详见下文),但在您的网站恢复在线后,您需要格外小心谨慎。入侵者几乎肯定会回来,如果您能发现他们试图再次入侵,您肯定能够很快看到您是否真的已经关闭了他们之前使用的所有漏洞以及他们自己制造的任何漏洞,并且您可能会收集有用的信息,可以传递给当地执法部门。
降低未来的风险。
您需要了解的第一件事是,安全性是一个过程,您必须在设计、部署和维护面向 Internet 的系统的整个生命周期中应用它,而不是像廉价油漆一样在代码上涂几层就可以了。为了确保充分的安全性,服务和应用程序需要从一开始就考虑到这一点,并将其作为项目的主要目标之一。我知道这很无聊,您之前已经听说过这一切,我“只是没有意识到”将您的 beta web2.0(beta)服务置于网络上的 beta 状态的压力,但事实是,这一点不断被重复,因为第一次说这句话时它是正确的,而且它还没有变成谎言。
风险是无法消除的。你甚至不应该尝试这么做。然而,你应该做的是了解哪些安全风险对你来说是重要的,并了解如何管理和降低风险。风险和概率的影响风险将会发生。
您可以采取哪些措施来降低攻击成功的概率?
例如:
- 导致人们入侵您网站的漏洞是否是供应商代码中已知的错误,是否有可用的补丁?如果是这样,您是否需要重新考虑如何为面向互联网的服务器上的应用程序打补丁?
- 允许人们入侵您网站的漏洞是否是供应商代码中未知的错误,而目前尚无补丁?我绝对不主张在遇到此类问题时更换供应商,因为他们都有各自的问题,如果采用这种方法,您最多一年内就会用完所有平台。但是,如果系统不断让您失望,那么您应该迁移到更强大的系统,或者至少重新设计您的系统,以便将易受攻击的组件包裹在棉絮中,并尽可能远离敌对的目光。
- 这个缺陷是你开发的代码中的 bug(或为你工作的承包商)吗?如果是这样,你是否需要重新考虑你批准部署到实时站点的代码的方法?这个 bug 是否可以通过改进测试系统或更改你的编码“标准”来发现(例如,虽然技术不是万能的,但你可以通过使用记录良好的编码技术来降低 SQL 注入攻击成功的概率)。
- 该缺陷是否是由于服务器或应用程序软件的部署方式存在问题而导致的?如果是这样,您是否尽可能使用自动化程序来构建和部署服务器?这些程序对于在所有服务器上保持一致的“基线”状态非常有帮助,可以最大限度地减少每台服务器上必须完成的自定义工作量,从而有望最大限度地减少出错的机会。代码部署也是如此 - 如果您需要做一些“特殊”的事情来部署最新版本的 Web 应用程序,那么请努力实现自动化并确保始终以一致的方式完成。
- 如果能更好地监控您的系统,入侵是否能更早被发现?当然,24 小时监控或为您的员工提供“随叫随到”的系统可能并不划算,但有些公司可以为您监控面向 Web 的服务并在出现问题时提醒您。您可能会认为您负担不起或不需要它,这没关系……只需考虑一下。
- 在适当的情况下使用 tripwire 和 nessus 等工具 - 但不要仅仅因为我这么说就盲目使用它们。花点时间学习如何使用一些适合您环境的优秀安全工具,保持这些工具更新并定期使用它们。
- 考虑聘请安全专家定期“审核”您的网站安全。同样,您可能会认为您负担不起或不需要它,这没关系……只需考虑一下即可。
您可以采取哪些措施来减少成功攻击所带来的后果?
如果您认为您家楼下发生洪水的“风险”很高,但还不足以让您搬家,那么您至少应该将那些无可替代的传家宝搬到楼上。对吗?
- 您能否减少直接暴露在互联网上的服务数量?您能否在内部服务和面向互联网的服务之间保持一定的距离?这样可以确保即使您的外部系统受到攻击,利用此作为跳板攻击内部系统的可能性也很有限。
- 您是否存储了不需要存储的信息?您是否将这些信息“在线”存储,而这些信息本来可以存档在其他地方。这部分有两点;显而易见的是,人们无法窃取您没有的信息;第二点是,您存储的信息越少,您需要维护和编写的代码就越少,因此,错误进入您的代码或系统设计的机会就越少。
- 您是否对 Web 应用使用了“最小访问权限”原则?如果用户只需要从数据库中读取数据,那么请确保 Web 应用用于提供服务的帐户仅具有读取权限,不允许其具有写入权限,当然也不允许其具有系统级访问权限。
- 如果您对某件事不是很有经验,而且它不是您业务的核心,请考虑将其外包。换句话说,如果您经营一个小型网站,讨论编写桌面应用程序代码,并决定开始从该网站销售小型桌面应用程序,那么请考虑将您的信用卡订购系统“外包”给 Paypal 之类的公司。
- 如果可能的话,请将受感染系统的恢复练习作为灾难恢复计划的一部分。这可以说是您可能遇到的另一种“灾难场景”,只不过它有自己的一系列问题和麻烦,与通常的“服务器机房着火”/“被巨型吃服务器的菲比入侵”之类的事情不同。(编辑,根据 XTZ)
...最后
我可能遗漏了很多别人认为重要的东西,但如果您不幸成为黑客的受害者,上述步骤至少应该可以帮助您开始理清事情。
最重要的是:不要惊慌。三思而后行。做出决定后要坚决行动,如果您对我的步骤列表有任何补充,请在下方留言。
答案3
总是从轨道上用核武器轰炸它。这是唯一可靠的方法。
(来源:flickr.com)
大多数系统都是具有内在隐含信任的整体实体。信任一个被攻陷的系统就是一种隐含的声明,即你信任最初攻陷你系统的人。换句话说:
你不能信任它。不要费心清理。立即断开并隔离机器。在继续之前了解违规的性质,否则你会再次引发同样的事情。如果可能的话,尝试获取违规的日期和时间,这样你就有了一个参考框架。你需要这个,因为如果你从备份恢复,你需要确保备份本身没有被入侵的副本。在恢复之前先擦除 - 不要走捷径。
答案4
最有可能的是,他们没有经过充分测试的灾难恢复程序,无法自信地进行重建,或者不清楚重建需要多长时间或会产生什么影响……或者备份不可靠,或者他们的风险分析师不了解受损系统的范围。我能想到很多原因。
我想说,这主要是基本程序和政策出了问题,而这不是你愿意公开承认的事情——相反,你会采取防御姿态。至少无论从哪个角度看,我都无法理解或为不清除受损系统的行为辩护。