Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to protect application against duplication of a virtual machine

Tags:

We are using standard items such as Hard Disk and CPU ID to lock our software licenses to physical hardware. How can we reduce the risk of customers installing onto a virtual machine and then cloning the virtual machine, bypassing our licensing?

like image 714
Ewan Makepeace Avatar asked Sep 26 '08 06:09

Ewan Makepeace


People also ask

How do you check if a VM is cloned?

Is there an easy way to know if a VM is a linked clone of another one? For a linked clone, you'll find a line "CloneOf" with the parent/master information in the GUI (Virtual Machine Details), and you can also see this entry in the VM's . vmsd file.

Can you duplicate a VM?

Once logged in, navigate to your virtual machines. Choose a VM you wish to clone and right-click on it with your mouse. A menu will appear, and you can hover your mouse pointer over the Clone option. Finally, click on Clone to Virtual Machine.

How do I manage multiple virtual machines?

Connect to a virtual machine console using VMConnect via the Hyper-V host. Replicate a virtual machine using Azure Site Recovery. For operations that can be run on multiple VMs, such as Start, Shut down, Save, Pause, Delete, Reset, you can select multiple VMs and run the operation at once.


1 Answers

One approach is to have a licensing server. When you enter a license code into the client (on a VM), it contacts the server and sends it its license code and other information. It contacts it repeatedly (you define the interval -- maybe once every few hours) asking 'Am I still valid"? Along with this request, it sends a unique ID. The server replies 'Yes, you are valid', and sends a new unique ID back to the client. The client sends this unique ID back with its next request to the server. The server verifies this is the same ID it sent to the client for that license, the previous request.

If the VM is duplicated, the next time it asks the server 'Am I valid?', the unique ID will be incorrect either for it, or for the other VM. Both will not continue to work.

You will need to determine what to do if the server goes down, or the network goes down, such that the client cannot communicate with the server. Do you immediately disable your software? Bad idea! Don't make your customers angry. You'll want to give them a grace period. How long should this be? A few days? Weeks?

Let's say you give them a 1-month grace period. In theory, they could clone the parent VM just after entering the license key, then restore the other VMs to this clone just before their grace period runs out, disabling network access to them. This would be a hassle for your customers though, just to have pirated additional copies of your software. You have to determine what kind of grace period won't hassle your legitimate customers, while hopefully giving you the protection you seek.

Additional protection could be achieved by verifying that the VM's clock is set correctly. This would prevent the above approach to pirating.

Another consideration is that a savvy user could write their own licensing server to communicate with the VM instances, and tell them all 'you're good' -- so encrypting the communication could help deter this. How far you want to go here really depends on how much you think pirating really might be an issue with your customers. In the end you won't be able to stop true pirates who have time on their hands, but you can keep honest users honest.

like image 145
Vern Jensen Avatar answered Oct 07 '22 09:10

Vern Jensen