在虚拟机中,是否存在一个可靠的唯一计算机标识符?

16

我正在编写一个小型客户端程序,以在终端服务器上运行。我正在寻找一种方法来确保它只在指定的服务器上运行,并且如果它从服务器中删除,它将停止运行。

我知道没有方法可以使其100%安全,但是我希望让大多数高级用户难以操作。

我正在查看不同的唯一标识符,例如处理器ID、Windows产品ID、计算机GUID和其他UI。由于终端服务器是虚拟机,我无法找到完全独特于这台机器的任何内容。

您有什么想法可以使其尽可能安全?我没有时间或需要使其尽可能安全,因为这会使应用本身失去意义。

我不想使用MAC地址。即使它对每台机器都是唯一的,但人们可以按照互联网上的说明进行欺骗。

至于微软产品ID,由于我们的系统团队克隆VM服务器并且我们使用公司批量密钥,我已经找到两个我可以访问的具有相同产品ID号码的服务器。我不知道还有多少其他与之相同的产品ID。

或者,与其尝试识别机器,我可能最好通过识别用户并创建基于AD的组权限来访问此软件。


MAC地址即使在虚拟机中也应该是唯一的吗?- https://dev59.com/RHA75IYBdhLWcg3wKlqM - Paolo
2
每个人是怎么得到可以欺骗MAC地址的人数如此精确的数据的呢?显然这是5%…我不知道。 - Cody Gray
2
我不想使用MAC地址,任何可以使用谷歌搜索的高级用户都可以伪造它。http://www.mydigitallife.info/2008/06/30/how-to-change-or-spoof-mac-address-in-windows-xp-vista-server-20032008-mac-os-x-unix-and-linux/ - user275683
3
我相当有信心,不到1%的人能够理解这个。 - moinudin
7个回答

7

按照设计,唯一标识虚拟机是困难的;任何可以让您唯一标识它的东西都会暗示它不是完全虚拟的(因为克隆虚拟机应该产生一个相同的机器)。

  1. 在主机上创建一个心跳应用程序,通过环回网络适配器与 VM 通信。
  2. 如果无法唯一标识主机,请让心跳应用程序拒绝运行。
  3. 如果心跳应用程序未运行,请让主应用程序拒绝运行。

您需要找到一种方法来确保心跳应用程序不会太容易被欺骗。

无法100%保护终端程序。这个问题等同于试图防止软件盗版。


3
我找到的最好的方法是BIOS UUID,但对于你的使用情况来说远非完美。
虚拟机中可用的SMBIOS UUID也由VMware hypervisor和管理工具用作VirtualMachine.config.uuid(请参见:此页面上的uuid属性)。这意味着它在特定主机或特定vCenter上保证是唯一的。然而,在不同的主机或不同的vCenter安装中可能会重复。
另外,虚拟机上的BIOS UUID是可变的。它可以通过API更改(尽管不能通过客户端轻易地更改)。
这可能接近于95%的分数,因为需要一些特殊的努力和设置才能完全复制虚拟机。
然而,从虚拟化启用的角度来看(包括虚拟机灾难恢复和未来的虚拟化软件升级):使用像UUID或MAC地址这样的硬件标识会引起各种问题。当他们想要通过创建一个新的虚拟机为您的软件更改操作系统版本时,他们需要手动编辑两个服务器的VM配置以更改UUID以匹配。如果使用MAC地址,如果他们更改网络架构,则您的软件要求该虚拟机成为特殊情况。这些事情只会让虚拟管理员头疼(但它们可能是您试图引起的确切头疼-只有您确定)。
我建议使用基于权限的方法,或者如果必要,甚至使用并发许可证服务器。但是,我来自于一个强烈虚拟化的背景,其中硬件绑定许可证已经很麻烦了。

2
最简单的解决方案是使用MAC地址,但请注意,在Windows上可以通过编辑注册表轻松更改它。不过,我认为不到5%的人知道如何做到这一点。
以下是如何在C#中获取MAC地址:
System.Net.NetworkInformation.NetworkInterface.GetPhysicalAddress();

没有人可以在Windows中做到这一点,这似乎是问题的暗示。;-) - Cody Gray
我指的是ifconfig的使用,你现在已经从你的回答中删除了它。我知道在任何操作环境下都可以欺骗MAC地址。 - Cody Gray
@Cody 我最初以为是Linux(是的,我没有看标签,我很淘气!:P),但后来改变了。问题并不意味着关于MAC地址的任何事情,它甚至都没有提到。 - moinudin

1

您可以将许可证绑定到网络卡的MAC地址上(如果有多个,则可以绑定到多张卡上)。

当然,更换网络卡后,您的软件将无法正常工作。

如果/当TPM成为服务器标准时,您应该能够使用它来对服务器进行身份验证。


1

请注意,我认为我在链接的StackOverflow帖子中提供的答案值得一些点赞。被接受的答案非常好,特别是对于这个持续性任务的警告。 - David

1

0

如果你想要95%的准确性,我建议使用Mac ID - 它可以被欺骗,但默认情况下对于机器来说是唯一的。


我认为超过5%的人可以轻松完成这个任务。 - user275683
根据最近的统计数据显示,美国的计算机素养率为20%。我想不到有超过四分之一的人能够伪造MAC地址。我建议你重新措辞你的问题。 - BrokenGlass

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接