Quali precauzioni posso adottare per proteggere il software contro l'utente?

1

Voglio creare un client che si colleghi al mio server e usi l'API del server. Puoi considerarlo come un'applicazione bancaria perché la sicurezza dei dati è la cosa più importante. Dal momento che gli utenti o gli hacker provano a violare la sicurezza del software per entrare nel flusso e vedere cosa sta succedendo, dobbiamo proteggere tutto anche dagli utenti. Semplicemente, voglio prendere delle precauzioni contro queste (ma non limitate) situazioni:

  1. Attacchi reverse engineering: nessuno deve vedere il mio codice sorgente. Se qualcuno lo vede può capire l'algoritmo e imparare come funziona l'API. Dal momento che l'API non è pubblica, non deve mai accadere. Sta offuscando un processo irreversibile e il modo migliore per nascondere il vero codice sorgente? Inoltre, come posso proteggere le mie variabili che possono essere scaricate dalla memoria durante il runtime? Qual è il modo migliore per proteggere la configurazione locale o i file creati in Windows?

  2. Client pirata: come posso evitare che altri software utilizzino la mia API? Se qualcuno ottiene il codice sorgente, lo modifica comunque o crea la sua, questa situazione sarà scomoda. C'è un modo per limitare l'accesso del servizio ai miei clienti originali, non modificati? (controllo hash? certificati client? firma assembly forse?)

  3. Canale dati e amp; sicurezza dei dati: il software dovrebbe essere in grado di funzionare in ogni rete che si connette a Internet, quindi sembra che io debba usare le richieste web & risposte per comunicare i client con il server. Penso che il canale dati possa essere protetto facilmente con https. Dovrei preferire un certificato a pagamento (come Verisign) o creare il mio certificato (firmato da me)? Voglio proteggere anche i dati stessi, penso che sia un pubblico & la coppia di chiavi private per ciascun cliente sarà sufficiente sia per l'identificazione che per la comunicazione. È un buon approccio? Sto anche pensando di connettere i client con un proxy HTTP, può aumentare la sicurezza?

So che il mio software sta lavorando su terreno nemico di cui non devo fidarmi e che non c'è nulla che un utente non possa fare con esso. Ma voglio garantirlo il più possibile. Nessuno può renderlo pienamente sicuro, ma voglio fare tutto il possibile per aumentarlo.

    
posta Batuhan 04.03.2015 - 16:42
fonte

1 risposta

3

Tutti gli sforzi per la sicurezza del tuo cliente sono destinati a fallire.

L'offuscamento e nascondere la tua fonte non funzionerà. Quanto più prezioso è il dato con cui stai lavorando, tanto prima verrà decodificato il tuo codice. L'unico approccio logico per considerare tutto ciò che riguarda il lato client.

L'approccio dovrebbe essere quello di focalizzare la sicurezza sul server sul lato server, generare una coppia di chiavi di autorizzazione per ciascun client e monitorare l'abuso e la revoca delle chiavi in questi casi. Proprio come Amazon AWS.

  • HMAC per l'autorizzazione e TLS per la crittografia del trasporto.
  • Non importa se generi il tuo cert (puoi fidarti di te più di verisign) a patto che tu dica a ciascun cliente di fidarsi di esso.

  • L'aggiunta di un proxy non aumenterà la sicurezza, utilizzando TLS.

  • Se è logico che l'applicazione aggiunga una password per crittografare l'HMAC chiave e i dati del lato client, per renderlo un po 'più sicuro.
  • Sul il lato del rilevamento considera i modi automatizzati per rilevare l'abuso. Quanti le domande sono troppe? Magari gettare alcuni endpoint di API honeypot succosi nel codice sorgente del client. Quando un utente malintenzionato si connette a / payments / swissbank / million, si sa che la chiave è stata compromessa e dovrebbe essere revocata. Qualsiasi altra cosa è al di fuori del normale comportamento, compresa la convalida della mancata riuscita.
risposta data 04.03.2015 - 19:55
fonte

Leggi altre domande sui tag