2011-01-04 13 views
11

Piszę mały program klienta do uruchomienia na serwerze terminali. Szukam sposobu, aby upewnić się, że będzie on działał tylko na określonym serwerze, a jeśli zostanie usunięty z serwera, przestanie działać.Czy istnieje unikalny identyfikator komputera, który może być używany niezawodnie nawet w maszynie wirtualnej?

Rozumiem, że nie ma metod, które zapewniłyby 100% bezpieczeństwa, ale chcę, aby większość zaawansowanych użytkowników mogła to zrobić.

Szukałem różnych unikatowych identyfikatorów, takich jak identyfikator procesora, identyfikator produktu Windows, komputerowy identyfikator GUID i inne interfejsy użytkownika. Ponieważ serwer terminali jest maszyną wirtualną, nie mogę zlokalizować niczego, co jest całkowicie unikalne dla tego komputera.

Wszelkie pomysły na temat tego, co powinienem zrobić, aby zapewnić bezpieczeństwo. Nie mam czasu ani potrzeby, aby uczynić go tak bezpiecznym, jak to tylko możliwe, ponieważ pokona to cel samej aplikacji.

Nie chcę adresu MAC użytkownika. Mimo że jest on unikalny dla każdej maszyny, można go sfałszować, postępując zgodnie z instrukcjami znalezionymi w Internecie.

Jeśli chodzi o identyfikator produktu Microsoft, ponieważ nasz zespół systemowy klonuje serwery VM i używamy klucza woluminu firmowego, znalazłem już dwa serwery, do których mam dostęp, które mają ten sam numer identyfikacyjny produktu. Nie mam pojęcia, jak wiele innych produktów ma ten sam identyfikator produktu. Identyfikator produktu

Zamiast próbować zidentyfikować urządzenie, może być lepiej, identyfikując użytkownika i tworząc uprawnienia grupowe obsługiwane przez AD w celu uzyskania dostępu do tego oprogramowania.

+0

Adres MAC powinien być unikalny nawet w VM? - http://stackoverflow.com/questions/3443093/what-is-a-good-unique-pc-identifier – Paolo

+2

W jaki sposób każdy ma tak dokładne dane dotyczące liczby osób, które mogą sfałszować adres MAC? Najwyraźniej jest to 5% ... Nie miałem pojęcia. –

+2

Nie chcę robić adresu MAC, każdy poweruser, który może google podróbić. 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/ –

Odpowiedz

0

Jeśli chcesz 95%, wybrałbym Mac ID - może zostać sfałszowany, ale domyślnie jest unikalny dla urządzenia.

+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 -and-linux/ Uznałbym to za łatwe zadanie przez więcej niż 5 procent ludzi. –

+0

Według ostatnich statystyk, znajomość obsługi komputera w USA wynosi 20%. Sądzę, że mniej niż jedna czwarta tych osób może sfałszować adres MAC. Właśnie powtórzę twoje pytanie. – BrokenGlass

1

Najprostszym rozwiązaniem jest użycie adresu mac, ale należy pamiętać, że można go łatwo zmienić w systemie Windows przez editing the registry. Powiedziałbym, że mniej niż 5% ludzi wie, jak to zrobić.

Oto jak uzyskać adres MAC w C#:

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

Nikt nie może tego zrobić w Windowsie, co wydaje się sugerować pytanie. ;-) –

+0

@Cody Jak bardzo się mylicie! – marcog

+0

Miałem na myśli użycie 'ifconfig', które usunąłeś z twojej odpowiedzi. Jestem świadomy, że MAC może zostać sfałszowany w dowolnym środowisku operacyjnym. –

1

można związać licencję na adres MAC karty sieciowej (lub kart, jeśli jest ich kilka).

Oczywiście zmiana karty sieciowej przerwałaby działanie oprogramowania.

Jeśli/Kiedy TPM stanie się standardem na serwerach, powinieneś być w stanie użyć go do uwierzytelnienia serwera.

1

można uzyskać adres MAC komputera użytkownika, jak pokazano tutaj: http://www.java2s.com/Code/CSharp/Network/GetMacAddress.htm

Oczywiście, takie podejście nie jest bez wad. Istnieją inne podejścia wymienione w tym poście, które są podobne, ale nie dokładny duplikat: What's a good way to uniquely identify a computer?

+0

Uwaga, myślę, że odpowiedź w postu StackOverflow, który został połączony, zasługuje na kilka awansów. Przyjęta odpowiedź jest bardzo dobra, szczególnie uwaga, że ​​jest to ciągły obowiązek. – David

5

Z założenia, jednoznacznie identyfikujący maszyny wirtualnej jest trudne; wszystko, co pozwoliło ci jednoznacznie zidentyfikować, oznaczałoby, że nie było w pełni wirtualne (ponieważ klonowanie maszyny wirtualnej powinno dawać identyczną maszynę).

  1. Utwórz aplikację pulsu na komputerze głównym, komunikującą się z maszyną wirtualną za pośrednictwem adaptera sieciowego z pętlą zwrotną.
  2. Niech aplikacja heartbeat nie uruchomi się, jeśli nie jest w stanie jednoznacznie zidentyfikować hosta.
  3. Niech główna aplikacja odmówi uruchomienia, jeśli aplikacja pulsu nie działa.

Należy znaleźć sposób na to, aby aplikacja Heartbeat nie mogła zostać zbyt łatwo sfałszowana.

Nie można zabezpieczyć programu terminala w 100%. To pytanie jest równoznaczne z próbą zapobieżenia piractwu oprogramowania.

2

Najlepszą rzeczą, jaką znalazłem, jest BIOS UUID - ale nie jest to idealne rozwiązanie dla Twojego przypadku użycia.

Identyfikator UUID SMBIOS dostępny w VM jest również używany przez narzędzia hypervisor i zarządzania VMware jako VirtualMachine.config.uuid (Patrz: the uuid property on this page). Oznacza to, że gwarantuje się, że będzie unikalny na określonym hoście lub w określonym centrum vCenter. Można go jednak powielić na oddzielnych hostach lub osobnych instalacjach vCenter.

Również identyfikator UUID BIOS na maszynie wirtualnej jest zmienny. Można go zmienić za pomocą interfejsu API (choć nie jest to łatwe przez klienta).

Prawdopodobnie zbliża się do twojego znaku 95%, ponieważ wykonanie dokładnego duplikowania maszyny wirtualnej wymagałoby szczególnego wysiłku.

Jednak z perspektywy włączenia do wirtualizacji (w tym na przykład do odzyskiwania po awarii maszyn wirtualnych i przyszłych aktualizacji oprogramowania do wirtualizacji): używanie identyfikatora sprzętowego, takiego jak UUID lub adres MAC, powoduje różnego rodzaju problemy. Gdy chcą zmienić wersję systemu operacyjnego pod swoim oprogramowaniem, zazwyczaj tworząc nową maszynę wirtualną, będą musieli ręcznie zmodyfikować konfigurację maszyny wirtualnej dla obu serwerów, aby zmienić identyfikator UUID. Jeśli używasz MAC-a, jeśli zmieniają architekturę sieci, twoje oprogramowanie wymaga, aby VM była szczególnym przypadkiem. Te rzeczy powodują bóle głowy u wirtualnego administratora (ale mogą to być dokładnie bóle głowy, które próbujesz wywołać - tylko wiesz na pewno).

Zalecam stosowanie podejścia opartego na uprawnieniach, o którym wspomniałeś, lub nawet serwera licencjonowania jednoczesnego, jeśli to konieczne. Ale pochodzę z mocno wirtualnego tła, na którym licencje związane ze sprzętem są już bolesne.

Powiązane problemy