2011-01-04 10 views
11

Estoy escribiendo un pequeño programa de cliente para ejecutar en un servidor de terminal. Estoy buscando una manera de asegurarme de que solo se ejecutará en el servidor especificado y, en caso de que se elimine del servidor, dejará de funcionar.¿Existe un identificador único de computadora que se pueda usar confiablemente incluso en una máquina virtual?

Entiendo que no hay métodos para hacerlo 100% seguro, sin embargo, quiero dificultar que la mayoría de los usuarios avanzados puedan hacerlo.

Estaba buscando diferentes Identificadores únicos como ID de procesador, ID de producto de Windows, GUID de equipo y otras IU. Como el servidor de terminal es una máquina virtual, no puedo encontrar nada que sea completamente exclusivo de esta máquina.

Alguna idea sobre lo que debo considerar para que esto sea más seguro. No tengo tiempo o la necesidad de hacerlo tan seguro como sea posible, ya que será contrario al propósito de la aplicación en sí.

No deseo utilizar la dirección MAC del usuario. Aunque es exclusivo de cada máquina, se puede suplantar siguiendo las instrucciones que se encuentran en Internet.

En cuanto a la identificación de producto de Microsoft, debido a que nuestro equipo de sistema clona servidores de VM y utilizamos la clave de volumen corporativa, ya encontré dos servidores a los que tengo acceso que tienen el mismo número de identificación de producto. No tengo idea cuántos otros tienen el mismo ID de producto

Como alternativa, en lugar de tratar de identificar la máquina, podría ser mejor identificando al usuario y creando un permiso basado en grupo manejado a través de AD para acceder a este software.

+0

La dirección MAC debe ser única incluso en una VM? - http://stackoverflow.com/questions/3443093/what-is-a-good-unique-pc-identifier – Paolo

+2

¿Cómo es que todos tienen datos tan precisos para el número de personas que pueden falsificar una dirección MAC? Aparentemente es un 5% ... No tenía idea. –

+2

No quiero hacer una dirección MAC, cualquier usuario de poder que pueda google puede falsificarla. 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/ –

Respuesta

0

Si quiere el 95% me gustaría ir con el Mac ID - puede ser falso, pero por defecto es único para la máquina.

+0

http://www.mydigitallife.info/2008/06/30/how-to-change-or-spoof-mac-address-in-windows-xp-vista-server-20032008-mac-os-x-unix -y-linux/ consideraría que esto lo hace fácilmente más del 5 por ciento de las personas. –

+0

Según una estadística reciente, la alfabetización informática en los EE. UU. Es del 20%. Me imagino que menos de una cuarta parte de ellos pueden falsificar una dirección MAC. Solo volvería a redactar tu pregunta. – BrokenGlass

1

La solución más sencilla es utilizar la dirección MAC, pero tenga en cuenta que se puede cambiar fácilmente en Windows por editing the registry. Yo diría que menos del 5% de las personas saben cómo hacerlo.

continuación se explica cómo obtener la dirección MAC en C#:

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

Nadie puede hacer eso en Windows, que es lo que la pregunta parece implicar. ;-) –

+0

@Cody ¡Qué equivocado eres! – marcog

+0

Me refería al uso de 'ifconfig', que ahora ha eliminado de su respuesta. Soy consciente de que el MAC puede ser falso en cualquier entorno operativo. –

1

se puede atar la licencia a la dirección MAC de la tarjeta de red (o cartas, si hay varios).

Por supuesto, al cambiar la tarjeta de red, el software no funcionará.

Si/Cuando TPM se convierte en estándar en los servidores, debe poder usarlo para autenticar el servidor.

1

Puede obtener la dirección MAC del PC como se muestra aquí: http://www.java2s.com/Code/CSharp/Network/GetMacAddress.htm

Por supuesto, este enfoque no está exenta de defectos. Hay otros enfoques enumerados en esta publicación, que es similar, pero no es un duplicado exacto: What's a good way to uniquely identify a computer?

+0

Nota, creo que la respuesta en la publicación de StackOverflow a la que me he vinculado merece algunos votos a favor. La respuesta aceptada es muy buena, particularmente la precaución de que sea una tarea constante. – David

5

Por diseño, la identificación exclusiva de una máquina virtual es difícil; cualquier cosa que le permitiera identificarlo de forma exclusiva implicaría que no era completamente virtual (porque la clonación de una máquina virtual debería producir una máquina idéntica).

  1. Crea una aplicación de latido en la máquina host que se comunica con la máquina virtual a través de un adaptador de red de bucle invertido.
  2. Haga que la aplicación heartbeat se niegue a ejecutarse si no puede identificar de manera única a la máquina host.
  3. Haga que la aplicación principal se niegue a ejecutarse si la aplicación de latido no se está ejecutando.

Deberá encontrar la manera de asegurarse de que la aplicación de latido no se pueda falsificar demasiado fácilmente.

No es posible proteger el programa del terminal al 100%. Esta pregunta es equivalente a intentar prevenir la piratería de software.

2

Lo mejor que he encontrado es el UUID del BIOS, pero está lejos de ser perfecto para su caso de uso.

El UUID de SMBIOS disponible dentro de la VM también es utilizado por el hipervisor de VMware y las herramientas de administración como VirtualMachine.config.uuid (Ver: the uuid property on this page). Esto significa que se garantiza que será único en un host en particular, o en un vCenter particular. Sin embargo, puede duplicarse en hosts separados o en instalaciones separadas de vCenter.

Además, el UUID de la BIOS en una máquina virtual es mutable. Se puede cambiar a través de la API (aunque no fácilmente a través del cliente).

Esto probablemente se acerque a su marca del 95%, ya que requeriría un esfuerzo especial y la configuración para duplicar la VM exactamente.

Sin embargo, desde una perspectiva de habilitación de virtualización (incluyendo cosas como recuperación de desastres de VM, y futuras actualizaciones de software de virtualización): usar una identificación de hardware como UUID o MAC causa todo tipo de problemas. Cuando quieran actualizar la versión del sistema operativo debajo de su software, generalmente creando una nueva máquina virtual, necesitarán editar manualmente la configuración de VM para que ambos servidores cambien el UUID para que coincida. Usando el MAC, si cambian la arquitectura de la red, su software requiere que la VM sea un caso especial. Estas cosas solo causan dolores de cabeza a un administrador virtual (pero pueden ser los dolores de cabeza exactos que intentas causar, solo tú lo sabes con certeza).

Recomiendo utilizar el enfoque basado en permisos que menciona, o incluso un servidor de licencias concurrentes si es necesario. Pero vengo de un entorno muy virtual en el que las licencias vinculadas a hardware ya son un dolor de cabeza.

Cuestiones relacionadas