MyProtector

Proteggere il software con dispositivi USB

Scritto da Roberto Rossi il 07-06-2018

Nonostante io sia un sostenitore del software libero non posso sottovalutare il fatto che, la maggior parte delle aziende produttrici di programmi commerciali, necessitino di sistemi di protezione per prevenire l'utilizzo illecito del loro lavoro.

Purtroppo, la pratica dell'utilizzo illegale del software è una triste realtà dei nostri giorni. Questo atteggiamento scorretto, non solo danneggia i produttori ma anche, e soprattutto, gli utenti che utilizzano regolarmente tali strumenti informatici. Il risultato, spesso, è che chi produce si vede costretto a seguire procedure aggiuntive di attivazione o riattivazione di programmi legittimamente acquistati, introducendo un elemento che va a danneggiare proprio chi è più onesto.

Come se non bastasse il mancato introito delle licenze pirata riduce le possibilità delle aziende produttrici (soprattutto quelle medie e piccole) di migliorare i propri software.

Proteggere un software

La domanda alla quale tenterò di rispondere è la seguente:

Se io producessi software commerciale, come potrei proteggerlo dalla copia illegale?

Come spesso accade, la risposta non è semplice. Fondamentalmente esistono due strade:

  • Protezione Software.
  • Protezione Hardware.

Iniziamo parlando della protezione software.

Protezione software

In questo caso il nostro programma, una volta installato, dovrà consentire una forma di attivazione, terminata la quale, produrrà dei dati scritti su disco. Tali dati saranno poi riutilizzati per avere la conferma della regolarità della propria licenza, senza la quale non avverrà l'avviamento.

Prendiamo come esempio Windows. Una volta installato viene richiesto di effettuare un'attivazione, tramite l'uso di vari canali, internet, telefono, ecc... Terminata questa procedura il sistema registrerà su disco l'avvenuta autorizzazione e, da quel momento in poi, sarà utilizzabile regolarmente. Ad ogni avviamento, il software "capirà" che la propria licenza è valida proprio andando a rileggere i dati salvati in precedenza.

Un altro esempio simile è rappresentato da AutoCAD o da Microsoft Office, che utilizzano una tecnica identica, installazione, attivazione, utilizzo.

Ovviamente ogni software salva i propri dati su disco in modi e "posti" differenti, il più possibile nascosti e quasi sempre criptati, per rendere più complessa un'eventuale azione fraudolenta di aggiramento della protezione.

Tale sistema presenta un pregio importante. E' piuttosto semplice da realizzare, grazie soprattutto alla presenza di internet, che agevola enormemente le operazioni di raccolta e verifica dei dati relativi ai clienti regolari.

Ovviamente, come tutti i sistemi, presenta alcuni inconvenienti. Prima di tutto non garantisce al 100% che l'utente installi una sola copia del software, in quanto, non si ha alcuna possibilità di stabilire cosa precisamente l'utilizzatore faccia. Ad esempio, nel caso il pc si rompa, il software potrà, legittimamente, essere installato ed attivato su un nuovo sistema. Allo stesso modo, se l'utente installa e attiva, questa volta illegittimamente, due volte il software, su due pc diversi, il sistema di protezione non sarà in grado di stabilire le cause di queste due attivazioni e quindi sarà costretto ad autorizzarle.

Alcuni produttori tentano di arginare questo problema modificando le modalità di attivazione superata una certa soglia. Ad esempio inserendo una procedura telefonica dopo aver effettuato un certo numero di attivazioni standard (via internet).

Un altro inconveniente, forse peggiore del precedente, è il fastidio recato all'utente legittimo, costretto a compiere operazioni aggiuntive (l'attivazione o la riattivazione) per un software acquistato regolarmente.

Questo fatto inoltre introduce un'ulteriore problematica, cosa accade se il produttore del software cessa la sua attività? L'utente non potrà più usare ciò che ha acquistato! Ovviamente per software house tipo Microsoft o Autodesk non sussistono particolari problemi, difficilmente potremo vederne il fallimento, ma per autori di minor importanza, come ad esempio il singolo sviluppatore, la piccola software house, questo fatto potrebbe scoraggiare l'utenza e non è una problematica da sottovalutare.

Un ennesimo problema, sempre a carico dell'utente finale, è rappresentato dall'impossibilità di utilizzare il programma su pc diversi. Facciamo un esempio. Io possiedo 2 pc, il primo fisso ed il secondo portatile, entrambe utilizzati esclusivamente da una sola persona, da me. La logica vorrebbe che, se acquisto un software, questo possa essere usato su entrambe i sistemi, ovviamente non contemporaneamente. Purtroppo l'uso di sistemi di protezione software può portare a limitare questa possibilità rendendo irregolare l'installazione contemporanea dello stesso programma (con la stessa licenza) su più computer. In questo caso sarei costretto ad acquistare due licenze, anche se nella pratica mi limiterei ad utilizzarne una soltanto. Saggiamente molte aziende prevedono che l'utente possa installare piu copie su pc diversi a patto che l'utilizzatore sia sempre lo stesso.

Parliamo ora della seconda tipologia di protezione, la protezione hardware.

Protezione hardware

Questo sistema, adottato da alcuni grossi produttori (Autodesk lo ha utilizzato, se no ricordo male, fino alle release 2000 di AutoCAD) e, attualmente usato soprattutto per i software specialistici, prevede l'uso di un dispositivo fisico per consentire al software di funzionare.

Solitamente si parla di un piccolo aggeggio da inserire in una porta USB prima dell'avviamento del programma e comunemente ha la forma di una normale "chiavetta" (quelle che solitamente sono usate per portare con noi i nostri dati), anche se ne esistono di molto diversi.

Ci sono alcune aziende che hanno fatto di questi dispositivi il proprio business commercializzando proprio questo tipo di dispositivi, dotandoli di propri driver adatti ai vari sistemi operativi. Una delle più famose è, senza dubbio SafeNet (vedi Note a fondo pagina).

L'utilizzo di questo sistema di protezione, come nel caso delle protezioni software, porta con sè vantaggi e svantaggi.

L'evidente vantaggio è rappresentato dal fatto che l'utente vive nell'assoluta legalità, sempre. E' possibile installare il software su un numero qualsiasi di postazioni di lavoro senza la necessità di effettuare ulteriori operazioni, se non quella di inserire la chiave di protezione (hardware) prima di lavorare.

Anche per Noi sviluppatori/produttori, il vantaggio è chiaro, ed è rappresentato dalla certezza (anche se nell'informatica questa parola non è mai assoluta) che l'utente userà tanti software quante sono le chiavi hardware in suo possesso, e di conseguenza in base alle licenze acquistate, innalzando sensibilmente il livello di sicurezza del sistema, che sarà meno esposto a rischi di violazione della protezione.

Naturalmente esiste anche il rovescio della medaglia, rappresentato dalla necessità di fornire il dispositivo hardware, garantendone la sostituzione in caso di guasto, aumentando il costo finale del proprio software. Infatti i dispositivi di protezione hardware anno costi che possono arrivare a decine di euro l'uno.

Dal punto di vista dell'utente, l'unico aggravio a suo carico è la necessità di ricordarsi della chiave hardware ogni volta che cambia postazione e potrà incorrere nel problema della perdita del dispositivo, casualità che solitamente significa dover acquistare una nuova licenza del programma protetto dalla chiave hardware smarrita. Infatti, i produttori software che fanno uso di tale sistema, tendono ad identificare la licenza con il dispositivo hardware che, di fatto, va a costituire proprio la licenza acquistata dall'utente.

Protezione hardware economica

Personalmente ritengo che l'utilizzo di una protezione fisica (hardware) sia un ottimo sistema per tutelare il proprio lavoro, purtroppo questa soluzione non è particolarmente economica e, per piccoli software, può rappresentare una spesa eccessiva sia per lo sviluppatore, sia per l'utente finale.

Mi sono sempre chiesto se esistesse il modo di ridurre i costi di questa soluzione, mantenendone la praticità e, almeno parzialmente, la sicurezza.

Studiando i dispositivi USB e l'attuale offerta di mercato ho elaborato una "soluzione" che, sfruttando le normali chiavette USB, quelle che normalmente usiamo per memorizzare i nostri dati (dischi), permette di realizzare una rudimentale, ma efficace, protezione hardware.

I dischi USB/Le chiavette USB

Prendiamo una normale chiavetta USB, chiamata anche unità flash usb, di quelle che si acquistano al supermercato e vengono viste dal sistema come normali dischi dati.

Per la realizzazione di questo articolo, ho scelto un modello economico, di buona qualità, prodotto da Sandisk (2 GB) e acquistato per pochi euro. In realtà, questa unità flash USB è fin troppo capiente per i nostri scopi (2GB), possiamo naturalmente scegliere il modello che più si adatta alle nostre necessità e alle nostre tasche, c'è solo l'imbarazzo della scelta:

La totalità di queste periferiche segue le specifiche USB 2.0 (o superiore), che rappresentano lo standard per tale tipo di connessione. La maggior parte di queste chiavette, nasconde un piccolo "segreto", infatti ognuna è dotata di un codice univoco interno che, a parità di marca, le distingue da tutte le altre, o almeno tenta di farlo! Nella pratica due chiavette di uno stesso produttore non potranno (non dovrebbero) mai avere lo stesso "codice di riconoscimento", chiamato anche unique serial number.

Basandosi sulla possibilità di identificare univocamente ogni singola chiavetta mi è stato possibile "costruire" un meccanismo per farla diventare un dispositivo di protezione.

Vediamo come.

Chiavi USB

L'Idea

Come insegnare ad un software che deve avviarsi esclusivamente in base alla presenza di una certa chiave di protezione usb?

Iniziamo dicendo che, le componenti in gioco sono sostanzialmente due:

  • Il numero univoco della chiave xxx.
  • Un "luogo" nel quale il software possa dire, "se la chiave xxx è inserita posso avviarmi".

Il modello di comportamento che ho ipotizzato è il seguente:

  1. Il software si avvia.
  2. Cerca sui dischi del sistema un determinato file nel quale sarà presente, magari in forma criptata, il numero della chiave hardware che abiliterà il suo funzionamento.
  3. A questo punto, una volta letto il dato, il software effettuerà la scansione di tutte le chiavi hardware connesse al sistema alla ricerca di quella corrispondente al dato letto.

Tutto qui.

Realizzazione del Software di test

Per sperimentare quanto teorizzato finora, realizzeremo ora un programma in grado di:

  • Avviarsi solo nel caso in cui trovi la propria chiave hardware;
  • Preparare/Trasformare una qualsiasi chiave usb (disco) in modo che questa venga riconosciuta come valida, e quindi consenta al programma di avviarsi.

Per semplificare l'esempio, il programma lavorerà senza utilizzare dati criptati, ma li immagazzinerà all'interno di un semplice file di testo. Inoltre, sempre per rendere le cose più facili da comprendere, tale file verrà memorizzato nella cartella principale della nostra chiavetta e si chiamerà protect.dat.

Il software di esempio è scaricabile, utilizzabile, modificabile e redistribuibile per i seguenti sistemi operativi:

Se sei interessato alla versione per Windows,clicca qui. Questa release viene fornita come semplice file eseguibile ed è realizzata utilizzando il linguaggio di programmazione C++. Il software è stato testato su tutte le più recenti versioni di Windows, 7, 8 e 10. Data la sua semplicità è molto probabile che funzioni anche con versioni precedenti. Il programma è inoltre compatibile sia con i sistemi a 32bit sia con quelli a 64bit.

Se sei interessato alla versione per Linux, clicca qui. Questa release viene fornita come semplice script eseguibile ed è realizzata utilizzando il linguaggio di programmazione LUA. Il software è testato su Ubuntu ma, dato il linguaggio scelto è utilizzabile praticamente su qualsiasi versioni di linux, inoltre è compatibile sia con i sistemi a 32bit sia con quelli a 64bit.

Vantaggi e Svantaggi

La soluzione proposta, come tutti i sistemi di protezione, presenta pregi e difetti, vediamone i più significativi.

I problemi più gravi:

  • Minor sicurezza rispetto ad una chiave hardware commerciale.
  • Il sistema non funziona nel caso in cui il PC non possa, per motivi di permessi, utilizzare dischi usb (condizione rara ma possibile).
  • Come tutti i sistemi a chiave hardware, l'utente dovrà avere con se il dispositivo per poter usare il software.
  • La formattazione o la cancellazione di tutti i file dalla chiavina (o del solo file "protect.dat") fa si che il software non la riconosca come propria. Questo problema può comunque essere parzialmente risolto impostando, ad esempio, il file protect.dat in sola lettura, come file di sistema o posizionandolo in una sottocartella.

I vantaggi più evidenti:

  • Costi ridottissimi.
  • Possibilità per il cliente di utilizzare la chiave come supporto per i propri dati oltre che come protezione per il software.
  • Possibilità di memorizzare una grande quantità di dati (ad esempio nel file "protect.dat"), cosa che ci consente di salvare molti più dati relativi al software, come ad esempio quelli all'acquirente, della versioni ecc...
  • Nessun driver da installare, la chiave verrà riconosciuta automaticamente da qualsiasi sistema.
  • Possibilità di inserire i file di installazione del software, direttamente sulla chiave hardware, in modo che l'utente li abbia sempre a disposizione.
  • Nel caso in cui il software disponga di file standard come librerie, modelli, archivi predefiniti etc... , questi potranno risiedere sulla chiave, senza effettuarne una copia sul pc dell'utente, in modo da minimizzare lo spazio occupato dal software dopo la sua installazione.
  • Essendo un dispositivo fisico, sarà possibile personalizzare la chiave con nome del programma o logo aziendale (la pubblicità è l'anima del commercio).

Inoltre, la natura riscrivibile del dispositivo rende possibile la realizzazione di molte procedure, come ad esempio, l'inserimento di eventuali aggiornamenti auto installanti del software, il caricamento di personalizzazioni per il cliente ecc...

Credo di aver detto tutto.

A questo punto non mi resta che salutarvi e ringraziarvi per il tempo dedicato nella lettura di questo articolo.

Questo software è un Concept!

Il software presentato in questa pagina non è pensato per essere immediatamente integrato all'interno delle proprie applicazioni, ma è solamente un prototipo utile per comprendere il funzionamento del sistema che ho ipotizzato.

Naturalmente il codice di esempio può essere studiato e riutilizzato per creare la propria protezione personalizzata basata su chiavette USB.

Note

Alcuni fornitori di protezioni hardware classiche (usb):