Metodi per difendersi dai ladri (clienti mobili)

5

Attualmente sto sviluppando un MVP (app mobile finanziaria) e sto cercando di capire i modi migliori per impedire l'interazione dei client non autorizzati con il server.

Guardando la sicurezza della maggior parte delle app mobili, posso vedere che è abbastanza facile fare un attacco MITM su questi per intercettare la comunicazione su SSL.

Alcune app sembrano prevenirle con il blocco dei certificati ma è anche molto facile da superare su un telefono jailbroken.

(Vedo che in questo thread I certificati client forniscono protezione contro MITM? è possibile che il server verifichi il client - ma in pratica sembra che praticamente nessuno lo faccia? - non è sicuro del perché ed è forse causa di una certa inflessibilità nel fissare un certificato client sul server? )

Posso vedere che un paio delle app più sicure che ho visto, implementare il blocco dei certificati sul client, il server poi invia una chiave pubblica (?) aggiuntiva (che posso vedere nel proxy di charles) quindi molto probabilmente una secondo scambio di chiavi pubblico-privato, ma dopo non riesco più a tenere traccia delle comunicazioni. (in origine questa app come molte altre app finanziarie sembra fare sicurezza out-of-band via sms).

In breve: 1) Quali sono le opzioni di sicurezza aggiuntive disponibili per proteggere la mia app che vanno oltre il blocco dei certificati sul client (e impediscono ai client non autorizzati di accedere al server?) (Escluso il jailbreaking prevention).

2) In che modo le band out-of-type funzionano, e in che modo questo fornisce una protezione aggiuntiva?

Grazie

    
posta yunti 06.02.2015 - 17:02
fonte

1 risposta

1

L'autenticazione reciproca TLS è l'unico modo in cui possiamo garantire che il client che comunica con il server sia legittimo.

È possibile eseguire le seguenti operazioni:

Crea un certificato autofirmato con funzionalità di firma del certificato (CA = true)

Per ogni utente, che vuole connettersi a te, quando si registra per il tuo servizio per la prima volta, deve creare una richiesta di firma del certificato (CSR) e te la darà.

Devi firmare la CSR utilizzando il tuo certificato autofirmato e restituire il certificato firmato. Si noti che, anche se un MITM è in ascolto, avrà solo la CSR e il certificato firmato in mano. Per impersonare realmente il cliente, il MITM richiede anche l'accesso alla chiave privata generata durante la creazione della CSR. Questa chiave privata non ti viene mai inviata (e quindi non viene mai sniffata dal MITM).

Ora, ogni volta che un cliente vuole parlarti, invierà un ciao al cliente e chiederà il tuo certificato. Lo fornirai. Ora, chiederai il certificato del cliente (Autorità reciproca). Il cliente ti invierà il suo certificato. Ora verificherete se il certificato presentato è firmato dal vostro certificato autofirmato. In tal caso, invia un nonce crittografandolo utilizzando la chiave pubblica indicata nel certificato del cliente.

Il nonce crittografato verrà decrittografato dal client utilizzando la chiave privata associata alla sua chiave pubblica. Quindi crittografa una risposta utilizzando la chiave pubblica menzionata nel certificato ricevuto da te (durante l'handshake serverHello / serverCertificate di TLS). e ti invierà la risposta crittografata.

Decifrerai la risposta usando la chiave privata associata alla tua chiave pubblica. Se è la risposta che ti aspetti, significa che è un cliente legittimo. In caso contrario, è un MITM dall'altra parte.

Si noti che per poter violare con successo la connessione e decrittografare il contenuto, il MITM ha bisogno delle chiavi private sia del client legittimo che di te (server). Questo non è posible poiché le chiavi private non vengono mai inviate l'una all'altra, e quindi il MITM non può mai annusarle.

Quindi viene stabilita una comunicazione sicura con il client legittimo.

Spero che questo chiarisca.

    
risposta data 09.02.2015 - 20:07
fonte

Leggi altre domande sui tag