是否有唯一的计算机标识符,即使在虚拟机中也可以可靠地使用?

时间:2011-01-04 14:11:37

标签: c# .net security macos vmware

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

我知道没有办法让它100%安全,但我想让大多数高级用户都难以做到这一点。

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

关于我应该考虑什么的任何想法,以使这大多安全。我没有时间或者没有必要让它尽可能安全,因为它会破坏应用程序本身的目的。

我不想用户MAC地址。即使每台机器都是独一无二的,也可以按照互联网上的说明进行欺骗。

就Microsoft产品ID而言,由于我们的系统团队克隆了VM服务器并且我们使用公司卷密钥,因此我发现已经有两个我有权访问的服务器具有相同的产品ID号。我不知道有多少其他产品具有相同的产品ID

或者,不是尝试识别机器,而是通过识别用户并创建通过AD处理的基于组的权限来访问此软件,我可能会更好。

7 个答案:

答案 0 :(得分:6)

通过设计,难以唯一地识别虚拟机;任何允许你唯一识别它的东西都意味着它不是完​​全虚拟的(因为克隆虚拟机应该生成一台相同的机器)。

  1. 在主机上创建一个心跳应用程序,该应用程序通过环回网络适配器与VM通信。
  2. 如果心跳应用程序无法唯一标识主机,请拒绝运行。
  3. 如果心跳应用程序未运行,请让主应用程序拒绝运行。
  4. 您需要找到一种方法来确保心跳应用程序不会太容易被欺骗。

    无法100%保护终端程序。这个问题相当于试图阻止软件盗版。

答案 1 :(得分:2)

我发现的最好的东西是BIOS UUID - 但它远非完美的用例。

VM内部可用的SMBIOS UUID也被VMware虚拟机管理程序和管理工具用作VirtualMachine.config.uuid(请参阅:the uuid property on this page)。这意味着它可以保证在特定主机或特定vCenter中是唯一的。但是,它可以在单独的主机或单独的vCenter安装上复制。

此外,虚拟机上的BIOS UUID是可变的。它可以通过API进行更改(虽然不容易通过客户端)。

这可能接近你的95%标记,因为需要一些特殊的努力和设置才能完全复制虚拟机。

但是,从虚拟化支持的角度来看(包括VM灾难恢复和虚拟化软件的未来升级):使用UUID或MAC地址等硬件ID会导致各种问题。当他们想要通过创建新虚拟机来修改软件下的操作系统版本时,他们需要手动编辑两个服务器的VM配置以更改UUID以匹配。使用MAC,如果他们更改了网络架构,则您的软件需要将VM作为一种特殊情况。这些事情只会给虚拟管理员带来麻烦(但它们可能是您试图引起的确切问题 - 只有您肯定知道)。

我建议您使用您提到的基于权限的方法,或者甚至是必要时使用并发许可服务器。但我来自一个虚拟化的背景,硬件绑定的许可证已经成为头疼的问题。

答案 2 :(得分:1)

最简单的解决方案是使用mac地址,但请注意,editing the registry可以在Windows上轻松更改它。我会说不到5%的人知道怎么做。

以下是如何在C#中获取mac地址:

System.Net.NetworkInformation.NetworkInterface.GetPhysicalAddress();

答案 3 :(得分:1)

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

当然,更换网卡会阻止您的软件运行。

如果/ TPM成为服务器上的标准,您应该可以使用它来验证服务器。

答案 4 :(得分:1)

您可以获取PC的MAC地址,如下所示:http://www.java2s.com/Code/CSharp/Network/GetMacAddress.htm

当然,这种方法并非没有缺陷。此帖中列出了其他类似的方法,但不完全相同:What's a good way to uniquely identify a computer?

答案 5 :(得分:1)

扩展macaddress方法。您可以使用带有md5函数的macaddress,并使用仅为系统所有者所知的SALT。这样,macaddress在不知道SALT的情况下毫无用处。

只是我值得一试......:)

[edit] - 另请参阅此处有关哈希/盐化等的c#示例:

MD5 hash with salt for keeping password in DB in C#

http://www.obviex.com/samples/hash.aspx

答案 6 :(得分:0)

如果您想要95%我会使用Mac ID - 它可以被欺骗,但默认情况下该机器是唯一的。