我可以在虚拟机和其备份之间运行 Diff 吗?

我可以在虚拟机和其备份之间运行 Diff 吗?

我有一个使用了一年多的程序,最近我发现它感染了病毒。我不想重新格式化整个计算机,主要是因为即使我备份了数据,我也无法判断我是否正在移植受病毒感染的文件。

因此,如果我要创建一个新的虚拟机,然后运行感染程序,有什么方法可以查明它感染了哪些文件?(即在系统上运行 diff 并查看发生了什么变化?)

第二个问题:

虚拟机与外部系统完全隔离,对吗?

这种病毒不可能在虚拟机上运行并感染主系统吗?就我而言,外部系统已被感染,所以没什么大不了的,但我想知道理论上是否有可能编写一种在虚拟机中运行时感染主机系统的病毒?

答案1

你有两个问题,所以我将逐一给出答案:

那么,如果我要创建一个新的虚拟机,然后运行感染程序,有什么方法可以精确地确定它感染了哪些文件?

如果您执行了 Windows 更新或安装新软件(例如 Web 浏览器或版本更新),那么这项任务可能会变得非常困难,因为修改的文件数量太多。但是,即使您这样做了,复制了所有您认为未被感染的文件,然后构建了一个新系统,只要有一个受感染的文件,您就完蛋了。

虚拟机与外部系统完全隔离,对吗?

仅当它们不在网络上或以任何方式共享文件时。例如,使用 VMware Fusion,您可以在主机和客户机之间自动设置文件共享,从而允许客户机写入您的配置文件目录。使文档共享变得容易得多,但也增加了传播病毒的可能性。

另外,您是否曾通过电子邮件将文件从 VM 客户机发送到主机?如果该文件中含有病毒,那么您就完蛋了。

答案2

如果您是为了取证目的而这样做,并想了解有关病毒的更多信息,或者作为一项练习来确定检查虚拟机中的增量的方法,我完全支持这种方法。

如果您是从“我想从该病毒中恢复我的服务器而不重新安装”的角度来执行此操作,那么您应该重新审视您的目标。

我不知道还有更好的方法,所以我会用困难的方法,在病毒入侵之前将系统调到你想要的状态。然后使用 Linux CD 启动并使用“dd”创建文件系统的映像。

然后重新启动机器,引入病毒,再次关闭,使用 CD 重新启动,再次 dd 进入另一个映像,然后以只读方式挂载映像使用 noexec 挂载选项然后编写 find 命令,该命令将在文件系统之间一次运行一个文件并输出不同的文件。

现在,有一些注意事项。首先,因为这种方法太糟糕而且太慢,所以一定有更好的方法,但我不知道是什么。其次,会有一些误报。Windows 一直在写入注册表,因此注册表文件会有所不同。任何已更改的配置文件、任何开始自行下载的更新等也会有所不同。

实际上,您可以使用 find -mtime 获取相同的数据,然后对已更改的文件运行 diff。由于您使用的是 Linux,因此 clamav 也可以为您节省一些时间。

答案3

只是想补充一点警告:病毒从技术上来说有可能从虚拟机中逃逸!(特别是如果病毒被编写来感染虚拟机及其主机。)任何应用程序都可以检测它是否在虚拟机中运行,因此可以添加代码来打破常规。不过,以这种方式感染虚拟机主机的病毒很少见。

另一方面,虚拟机可能与其主机共享网络连接。这创造了第二种感染方式。如果您在同一台主机上运行多个虚拟机,它甚至可以通过网络连接感染其他虚拟机!

当然,也可能发生这样的情况:您的主机已被感染,并将病毒转发到您的虚拟机。

因此,请确保安全:在您的虚拟机上安装病毒扫描程序,并确保病毒扫描程序和操作系统本身保持最新。

答案4

不确定你的虚拟机平台是什么,但 VMware 提供了一个名为 mountvm.exe 的实用程序,允许你将 VMDK 文件挂载到文件系统并查看虚拟磁盘的内容。然后,你可以使用 windiff(或类似的东西)来比较挂载的虚拟机内的文件。我相信其他虚拟机管理程序也会提供类似的工具

关于您的第二个问题,虽然我不知道是否有通过虚拟机管理程序进行攻击的漏洞,但我认为有一些 PoC 表明这可能是可能的(当然,有些人对此有异议)。搜索“Blue Pill”并查看您找到的内容。正如其他人提到的那样,在主机和客户机之间复制文件,并允许主机和客户机之间直接网络连接肯定会增加一个主机感染另一个主机的机会。

相关内容