Come mi fido di un'applicazione fuori sito

1

Ho bisogno di implementare qualcosa di simile a un server di licenza. Questo dovrà essere installato fuori sede presso la sede dei clienti e dovrà comunicare con altre applicazioni presso il sito dei clienti (le applicazioni che utilizzano le licenze) e un'applicazione in esecuzione nel nostro centro di hosting (per la segnalazione e ottenere informazioni sulla licenza).

La mia domanda è come impostare questo in un modo in cui mi posso fidare:

  1. Il server delle licenze è davvero la nostra applicazione e non qualcosa che lo simula; e
  2. Non esiste un "uomo nel mezzo" (cioè un proxy o qualcosa che altera il traffico).

La prima cosa che ho pensato era di usare con i certificati client e questo avrebbe risolto almeno 2. Tuttavia, quello che mi preoccupa è che qualcuno decompila (questo è costruito in .NET) il server delle licenze, altera alcuni la logica e la ricompensa. Questo sarebbe difficile da rilevare da entrambe le applicazioni di connessione.

Questo non deve essere assolutamente sicuro poiché abbiamo un numero limitato di clienti con cui abbiamo un rapporto di fiducia. Tuttavia, voglio renderlo più difficile di un semplice decompilare / ricompilare il server delle licenze. Voglio principalmente proteggere da un dipendente o un nipote del capo che cerca di essere intelligente.

    
posta Pieter van Ginkel 08.11.2012 - 11:40
fonte

3 risposte

2

Alcuni suggerimenti:

  1. Utilizza una password quando firma i tuoi assembly (li stai firmando, vero?)

  2. Fornire una funzionalità di aggiornamento automatico del server delle licenze. La società cliente dovrebbe scegliere tra:

    • Mantenimento di patch su ogni nuova versione del server di licenze con una patch di hacker,

    • Disabilitare l'aggiornamento automatico, dato che se contattano il tuo supporto un giorno, avrebbero difficoltà a spiegare perché stanno disabilitando gli aggiornamenti gratuiti,

    • Trascorrere dei giorni automatizzando le patch.

  3. Fornire una soluzione di licenza mista. Ad esempio, il server locale di licenze funge solo da soluzione di caching / proxy, mentre comunica direttamente con il proprio server quando è online. Il server locale convalida la licenza stessa solo quando è offline, dato che smetterà di funzionare se è offline per troppo tempo.

    Ad esempio, succederebbe così:

    • Il client richiede di convalidare la licenza,

    • Il server delle licenze intermedie inoltra la richiesta al tuo server,

    • Il tuo server risponde che la licenza è valida,

    • Il server delle licenze intermedie ricorda che la licenza è valida (usando hash, ecc. per evitare di essere manomesso facilmente),

    • La prossima volta, se viene richiesto al server delle licenze intermedio di convalidare la stessa licenza, se è online, fa comunque una richiesta al proprio server. Se è offline, controlla la cache locale.

      Se viene richiesta una licenza diversa (ad esempio qualcosa che non accade molto spesso: il nuovo software è installato o il vecchio software è distribuito su una nuova macchina) e il server di gestione delle licenze intermedio è offline, viene restituito un errore che dice che è impossibile convalidare la nuova licenza offline.

  4. Affidati al supporto. Se il cliente richiede assistenza, chiedere di installare uno strumento che raccoglierà e invierà le informazioni sul sistema (versione corrente del server delle licenze, ecc.). Questo strumento può anche calcolare gli hash dei file eseguibili del server di licenze; se non convalidano, il cliente dovrebbe spiegare perché ha modificato quei file, mentre è esplicitamente vietato dalla licenza.

  5. Obfuscate the code.

  6. Segnala attivamente i tentativi di hacking. Ad esempio, non è necessario nascondere il processo di convalida della licenza principale; chiamalo LicenseValidation.dll per esempio. Ma il codice originale che dovrebbe eseguire il codice all'interno di LicenseValidation.dll dovrebbe iniziare calcolando l'hash del file, e se è sbagliato, segnalalo a te.

    Ci sono possibilità che un hacker pigro inizi a manomettere il file più ovvio, senza dimenticare di verificare se il file è stato convalidato da qualche altra parte.

  7. Raccogli statistiche. Con un sacco di statistiche che non sono principalmente destinate a rilevare la pirateria (come i risultati di profilazione o rapporti sugli arresti anomali), puoi ancora avere alcuni indizi secondo cui un'azienda precisa ha un alto grado di pirateria.

    Ad esempio se il server delle licenze segnala che il pezzo di software A è installato su due PC, mentre si ricevono costantemente negli ultimi due mesi rapporti di profiler da venti indirizzi IP statici (stesso IP, stesso nome macchina, stesso OS, ecc. .), è un buon segno che qualcosa non va lì.

  8. Hai prezzi competitivi. Poche aziende passerebbero il tempo a hackerare un CRM che costa $ 50 per utente. Se lo stesso CRM costa $ 50.000 per server e la società si espande in altri dieci server, è piuttosto vantaggioso assumere un abile hacker.

risposta data 08.11.2012 - 12:46
fonte
0

Mi vengono in mente due possibilità:

  • Fai girare il server di licenza su una scatola fisicamente protetta che fornisci
  • Il server delle licenze è un proxy stupido attraverso il quale le altre applicazioni comunicano con l'app di licenza ospitata, in pratica un tunnel VPN.

Se pensi di decompilare un'app .net è un po 'troppo facile, compila su nativo o usa un offuscatore. Ma penso che probabilmente ti stai preoccupando inutilmente. Lo scenario secondo cui qualcuno in un'azienda con una "relazione di fiducia" avrebbe le necessarie abilità, la motivazione e la volontà di commettere un crimine mi sembra molto improbabile.

    
risposta data 08.11.2012 - 11:56
fonte
0

Non sono sicuro che ciò sia effettivamente possibile. Un po 'di stretching ma un domanda simile che ho postato è arrivata a quella conclusione. Potresti provare a utilizzare il sistema operativo per ottenere ciò che desideri, magari memorizzare un certificato in una cartella a cui solo l'applicazione ha accesso. In questo modo qualsiasi non amministratore non sarebbe in grado di raggiungerlo e quindi non potrebbe mai rappresentarsi come la tua applicazione.

    
risposta data 08.11.2012 - 18:51
fonte

Leggi altre domande sui tag