Come oscurare le chiavi del client dall'intercettazione della rete o MITM

0

Per utilizzare la nostra piattaforma e le nostre API, un client richiede l'integrazione di iOS e Android SDK nelle loro app mobili. A ciascuno dei client viene rilasciata una chiave API, come qualsiasi altra piattaforma come Crashlytics, MixPanel, ecc., Per comunicare con il server.

Stiamo cercando di oscurare le chiavi durante qualsiasi tipo di intercettazione di rete o MITM. Tuttavia, questo sembra essere un lavoro difficile.

Finora abbiamo provato a seguire:
1. Memorizzazione delle chiavi del cliente nel keystore, portachiavi.
2. Modificare l'intestazione, i nomi dei parametri JSON per confondere l'autore dell'attacco.
3. Mettere le chiavi in un file e poi trasmetterlo sulla rete.
4. Il metodo della prima e dell'ultima chiamata. Stiamo eseguendo l'hash del timestamp della prima richiesta e quindi confrontandolo con le successive chiamate consecutive. Se il timestamp è maggiore del primo timestamp, allora possiamo supporre che un utente malintenzionato non stia cercando di riprodurre le chiamate per abuso della piattaforma.

Non possiamo permettere che le chiavi vengano viste dall'attentatore per un motivo, ogni chiamata viene fatturata al cliente e chiunque sia a conoscenza della nostra piattaforma può causare enormi danni ai nostri clienti semplicemente rigiocando le richieste al nostro server.

Come ci assicuriamo che le chiavi siano trasmesse in modo sicuro e non siano visibili all'attaccante?

Nota: quando l'SDK su un'app mobile diventa attiva, per un cliente, stiamo aggiornando le chiavi in diverse ore del giorno e archiviandole nel portachiavi, nel keystore.

Grazie Fennec

    
posta Fennec 07.12.2016 - 12:06
fonte

1 risposta

4

Dipende dal tipo di attacco che ti aspetti:

  • Se l'attaccante si trova puramente sulla rete cercando di eseguire un attacco uomo nel mezzo, proteggere la connessione con TLS (ad esempio HTTPS) dovrebbe essere sufficiente. È possibile aggiungere protezione aggiuntiva utilizzando il certificato o blocco della chiave pubblica .
  • Se TLS / HTTPS non è un'opzione, puoi utilizzare autenticazione basata su digest per dimostrare che il client possiede il token . Ovviamente potresti anche combinarlo con TLS.
  • Se temi che l'attaccante possa accedere all'app ed estrarre la chiave che hai perso comunque. In questo caso, puoi solo provare a limitare l'impatto, ad esempio usare l'offuscamento del codice per rendere il reverse engineering e l'estrazione della chiave più difficile, impiegare la limitazione dei tassi per limitare l'abuso e modificare la chiave di accesso e la strategia di offuscamento abbastanza spesso, cioè idealmente prima che la chiave venga esposta .
risposta data 07.12.2016 - 12:34
fonte

Leggi altre domande sui tag