Innanzitutto, facciamo un passo indietro. Quando un client si connette ad un server tramite protocollo HTTPS verifica che il certificato HTTPS, fornito dal server, sia valido per il dominio contattato. Per far ciò i dispositivi (mobile e desktop) hanno preinstallati una lista di certificati attendibili riconosciuti a livello mondiale. Un certificato, viene ritenuto valido, se fa parte della lista, oppure se è stato firmato a sua volta con un certificato attendibile.
Quando ci si connette ad un sito web le informazioni inviate dal client, e quelle ricevute dal server, sono in chiaro sul PC dell’fruitore e ciò è palese per uno sviluppatore web. Tuttavia, quando si sviluppa un’applicazione mobile che effettua delle comunicazioni con dei servizi, si è portati a pensare, che sfruttando il protocollo HTTPS sia impossibile, o quantomeno molto complicato, intercettare le comunicazioni.
Utilizzando un software pensato appositamente per il man-in-the-middle come ad modello mitmproxy, invece, far ciò è piuttosto semplice, ma vediamo come.
Ipotizziamo di voler vedere a quali servizi accede un’applicazione mobile installata sul nostro telefono. Nella configurazione più semplice ci occorre un telefono ed un PC connessi alla stessa WiFi (senza wireless isolation). Quindi si dovrà installare mitmproy sul proprio PC. Una volta avviato, quest’ultimo esporrà un proxy, quindi è sufficiente cambiare la configurazione di rete del proprio telefono per collegarsi ad internet utilizzando il proxy avviato sul proprio PC sulla rete locale.
Et voilà! Ora tutte le connessioni in uscita dal nostro cellulare, su canale HTTP saranno visibili sul nostro PC dalla console di mitmproy. Le connessioni basate sul protocollo HTTPS falliranno in quanto il certificato fornito da mitmproy non sarà considerato valido dal nostro telefono. Per ovviare a quest’ultimo inconveniente occorrerà aggiungere alla lista di certificati attendibili sul nostro telefono, il certificato self-signed generato da mitproxy sul nostro PC. A questo punto tutte le connessioni, anche quelle HTTPS saranno visibili, con tanto di dettaglio per ogni request/response a meno che l’applicazione non implementi il meccanismo del certificate pinning.
Capite ora perché è importante questo meccanismo di sicurezza. Se l’applicazione mobile effettua il certificate pinning non si accontenta che il certificato sia valido, bensì verifica puntualmente che la parte pubblica (quella fornita dal server in fase di instaurazione della connessione) sia esattamente quella che si aspetta, di fatto non fidandosi con semplicità della lista di certificati installata sul telefono.
Via Mitmproxy