以前的 IT 工作者可能留下了一些后门。我怎样才能消除它们?

use*_*690 68 networking security audit malware exploit

我开始为一家公司工作,该公司解雇了一名前 IT 员工,原因是泄露数据。

我只能说以下几点:

我们使用 Firebird DB 和由另一家公司 Proxmox 编写的应用程序,用于 Windows Server 2008 R2、SQL Server、云核心 Mikrotik 路由器和其他一些 Mikrotik 设备的虚拟化。

我不是 100% 确定,但是有没有一些快速的方法来检查是否还有一些后门,而不会中断内部流程并重新格式化所有内容?

以前的这个人真的很好,用 C++ 和 C# 编写了软件。我也知道他在 ollydbg 中做了一些汇编程序并破解了一些程序。

use*_*517 109

唯一确定的方法是将每个系统擦干净并从头开始重新安装。您还需要审核所有本地生成的软件和配置,以确保它们不包含后门。这是一项非平凡的任务,伴随着非平凡的成本。

除此之外,你真的无能为力。

显然,当你决定做什么时

  • 审核所有防火墙规则的有效性
  • 审核所有帐户的有效性
  • 审核所有 sudoers 文件的有效性
  • 更改所有密码和密钥

但这只是皮毛。

  • 注意:“从头开始重新安装”真的意味着从头开始。获得一台他不可能接触过的新机器,并使用它从官方网站下载您使用的所有操作系统和软件的全新安装文件,最好通过安全连接和完全不同的网络。如果您无法在线找到正确的安装程序,请在使用任何现有文件之前对其进行校验和。 (32认同)
  • 考虑到这个人可能拥有的所有物理访问权限,您可能需要检查异常或意外的硬件。 (27认同)
  • 如果您必须使用他编写的软件并且您已经完成了完整的代码审计,那么请重新编译,因为您仍然无法确定您拥有的二进制文件完全来自您审计的源代码。 (16认同)
  • 的确。完整的代码审计是**唯一**的确定方式 - 了解每一行代码的作用。添加一些打开外壳的“特殊”URL 并将其隐藏在模糊的应用程序逻辑中是微不足道的。再多的扫描、重启或检查配置文件都无法检测到,更不用说修复了。 (8认同)
  • “从轨道上炸毁整个站点——这是唯一确定的方法” (8认同)

pet*_*erh 40

首先,被解雇的系统管理员最重要的目标是清理他的过去,特别是如果这是一个声誉不佳的离职。如果他以前的系统受到攻击,他将一无所获(尤其是他的旧工作),但他可能会失去很多。我曾多次面临类似的恐惧,但在我看来,它们在很大程度上是没有根据的。我认为更有可能的是,如果你向他提出一些问题,他会对你非常友好和乐于助人(然后你应该向你的老板提及)。


现在考虑一种极不可能的情况,即他真的想做一些有害的事情。

将您的整个网络归档到某个 - 对他来说 - 无法访问的位置(在防火墙后面,他不负责,硬盘在上锁的柜子中,等等)。

一旦你做了这个备份,他就不能再掩盖他的踪迹了。在流氓攻击的情况下,它将作为证据。


您永远无法 100% 确定(除非重新安装整个网络)。你可以通过一个检查清单,但你永远不能确定你已经检查了所有的东西。

即使你发现了一个洞,你也不能证明它是故意放在那里的。请注意,软件开发人员也存在同样的问题。糟糕的工作不是刑事犯罪,您无法证明他“忘记”了,例如,故意更改默认的数据库管理员密码。或者,由他设置密码的用户“意外”被授予连接到绝密数据库所需的权限。


在大多数情况下,系统中最重要的部分不是操作系统,而是在操作系统上管理的数据。如果这些数据是私人数据并且是您客户的财产,则尤其如此。他本可以在他最后一个工作日之前把它们偷走,加密它们并将它们保存在只有他知道的地方。因此,请务必检查是否有迹象表明他在离开前复制了您的数据。但请注意,如果他“正确地”执行此操作,您将找不到任何东西。


Rob*_*oir 15

@JonasWielicki 将此问题与我们的规范安全问题之一(如何处理受损服务器)进行了比较。我坚持我对这个问题的回答但有一个重要的区别。

在那个问题中,已知服务器受到了威胁。据我了解,这个问题在这种情况下尚未成立。因此,我不确定我们是否需要打破火焰喷射器。

人们总是离开组织而没有发生任何不好的事情,即使他们离开的条件很差。仅仅擅长编程,这就是您在 OP 问题中向我们展示的所有“证据”,并不意味着某人本身就是黑客,也不意味着他们离开后可能会攻击您。

如果您真的很担心,那么我建议您聘请外部安全公司来审核您的系统。这不仅有望揭示前系统管理员可能留下的任何小惊喜,而且还将作为您未来所有安全问题和担忧的良好基准。

  • 请注意,peterh 建议 [How do you search for backdoors from the previous IT person?](https://serverfault.com/q/171893/58408) 作为可能的重复项,IMO 比 [How do我处理的是受损服务器?](https://serverfault.com/q/218005/58408) (2认同)

小智 12

确保不存在后门的唯一方法是像您说的那样对系统进行核攻击。

如果这不是完全可能的,

  1. 考虑一个基线安全配置,对当前配置的分析与此背道而驰。
  2. 验证所有 suid 程序。
  3. 分析所有正在运行的进程。
  4. 在系统上执行端口扫描以识别打开的端口和服务。
  5. 定期监控所有出站和入站连接并查找恶意连接。


Dyl*_*tin 10

你将需要决定你想要的确定程度。从轨道上进行核弹的成本效益永远不会出现。

管理人员是要求保证还是您只是想对您继承的系统进行一些合理的检查?

如果是经理,现在您可以了解他们的合理性。他们愿意接受“非常确定”吗?也许你可以跟随被解雇的人去他的新工作!

如果您想检查自己的系统,我会从设置网络监控系统开始,例如 snort。寻找意外流量,例如“为什么系统每天都在与俄罗斯的这台服务器通信?” 或“为什么人们在我的网络服务器上执行 IRC?” (那个发生在我身上)。

我认为@peterh 关于制作大档案的建议是一个非常好的主意。我也认为他关于被解雇的人有帮助的建议是完全现实的。像这样的问题在 90% 的情况下都是愚蠢的管理。


Gia*_*968 7

您应该对当前的功能和使用情况进行审核,但老实说,您应该从头开始。

意思是,不要只是“从轨道上核对它”,而是记下所有核心功能和要求,例如——例如——防火墙上可能需要为盒子打开哪些端口、IP 地址或主机名限制以及各种“管道”之类的。

然后根据您看到的内容重新创建一个新环境,运行一些测试以确认切换后功能是否相同,然后安排维护以进行正式切换:意思是将数据从旧设置复制到新设置,然后打开 IP盒子从旧盒子接管旧 IP 或设置其他需要访问才能连接到新设置的系统。

但这就是说,即使你这样做,你也可能无法信任数据库中的数据,但至少在这种情况下,核心系统被转移到更稳定和“理智”的地方,所以你有一个更干净的初始点。

此外,您提到以前的 IT 人员能够使用汇编程序和 C++ 进行编程。我的问题是:为什么?因此,对可能存在的任何自定义代码进行审核并评估功能。因为虽然其他人可能在他们的编程技能方面“很花哨”,但谁知道他们是否用 C++ 编写了一些东西——例如——可以很容易地用 Python 或 Bash/Batch 脚本重新创建。我现在遇到了很多 C++ 程序员,他们在使用更简单的工具来实现等效功能时确实过度使用 C++ 代码。

但归根结底,从头开始重建架构可能是唯一且最安全的做法。


归档时间:

查看次数:

14708 次

最近记录:

8 年,9 月 前