C’è un programma compatibile con i sistemi Windows, macOS e Linux che permette di verificare quali dati scambia ciascuna applicazione installata su PC così come su qualunque dispositivo, equipaggiato con qualsiasi sistema operativo.
Il suo nome breve è Charles anche se l’appellativo completo è Charles Web Debugging Proxy: una volta installato sulla macchina, il programma è in grado di registrare tutto il traffico dati scambiato con i server remoti.
Scaricabile a questo indirizzo, Charles registra in una sorta di file di log l’intera sequenza di operazioni compiute da qualunque applicazione. Così facendo è possibile non soltanto scoprire a quali indirizzi IP o URL si collega un’app ma anche conoscere l’esatto contenuto di ciascuna richiesta.
Charles si frappone fra il sistema locale e i server remoti accessibili via Internet controllando in tempo reale il contenuto di tutti i pacchetti dati che vengono scambiati. Questo server proxy permette anche di installare un certificato root sul sistema locale così da decodificare il contenuto del traffico HTTPS.
Vi diciamo come noi utilizziamo Charles: per esaminare approfonditamente il comportamento delle app che installiamo sui nostri dispositivi mobili predisponiamo una macchina virtuale con Virtualbox (vi si può installare Windows o una distribuzione Linux).
Accedendo al menu Dispositivi, Rete, Impostazioni di rete di Virtualbox, impostiamo l’interfaccia di rete della macchina virtuale su Scheda con bridge in modo che essa sia raggiungibile e accessibile da qualunque dispositivo collegato alla LAN.
Dopo aver installato Charles nella macchina virtuale, il consiglio è quello di avviare il programma e accedere al menu Help, SSL Proxying, Install Charles Root Certificate.
Così facendo, il certificato root di Charles sarà installato sul sistema locale e in Windows sarà visibile premendo la combinazione di tasti Windows+R
, digitando certmgr.msc
e cercandolo nella sezione Autorità di certificazione radice attendibili, Certificati.
A questo punto, portandosi nel menu Proxy, SSL Proxying Settings si potrà cliccare sul pulsante Add, nella scheda SSL Proxying e digitare *
sia nel campo Host che Port.
Così facendo Charles riuscirà a decodificare tutto il traffico dati scambiato attraverso protocolli crittografici, come HTTPS, che “chiamano in causa” SSL/TLS.
Ogni volta che si avvia Charles, il programma modifica automaticamente la configurazione del sistema operativo così che tutte le applicazioni installate passino attraverso il proxy server locale.
Per verificarlo basta premere la combinazione di tasti Windows+R
, digitare inetcpl.cpl
quindi accedere alla scheda Connessioni e infine fare clic sul pulsante Impostazioni LAN. Cliccando su Avanzate si può notare come Charles abbia impostato come proxy l’indirizzo locale 127.0.0.1 sulla porta 8888.
Con questa configurazione Edge, Internet Explorer, le altre applicazioni Windows e Google Chrome faranno transitare il traffico attraverso il server proxy di Charles.
Nel caso di Firefox è necessario importare manualmente il certificato root di Charles salvabile utilizzando il menu Help, SSL Proxying, Save Charles Root Certificate.
Impostando l’indirizzo IP privato della macchina virtuale sul quale Charles è stato installato nelle impostazioni proxy di qualunque altro dispositivo, è possibile far in modo che tutto il traffico transiti attraverso il server proxy locale e venga così monitorato e memorizzato.
L’indirizzo IP privato assegnato alla macchina virtuale sul quale Charles è installato può essere recuperato velocemente dalla stessa interfaccia del programma cliccando su Help quindi su Local IP address.
Già visitando un qualunque sito web sulla macchina virtuale si noterà come Charles provveda ad “annotare” tutte le richieste e gli elementi via a via caricati.
Con un clic sulla scheda Contents si possono esaminare nel dettaglio le informazioni scambiate, comprese quelle trasferite via HTTPS.
Avviando un’applicazione su un dispositivo sul quale si sia configurato il sistema operativo per collegarsi all’IP privato della macchina virtuale sul quale Charles è installato (indicando anche la porta 8888), si potrà esaminarne il comportamento passo-passo impostando eventualmente dei breakpoint, utilissimi ai fini di debugging.
La sequenza temporale delle operazioni compiute dalle app o da una applicazioni web sono verificabili accedendo alla scheda Sequence di Charles (i tempi sono indicati nelle colonne Start e Duration).
Come configurare Charles su altri dispositivi collegati alla stessa rete locale
Per ispezionare il traffico generato dal sistema operativo e da qualunque applicazione installata su un’altra macchina collegata in rete locale, è sufficiente impostare come server proxy da utilizzare – come dicevamo – l’IP privato del sistema sul quale Charles è installato (nel nostro caso l’IP 192.168.1.55 corrispondente alla macchina virtuale Virtualbox).
Sui device Apple iOS è banale aggiungere il certificato di Charles: basta aprire il browser Safari e portarsi a questo indirizzo.
Portandosi quindi in nelle impostazioni di iOS, su Generali, Info, Attendibilità certificati bisognerà dare fiducia al certificato di Charles appena aggiunto.
Nel caso di Android, i siti web visitati possono essere fatti transitare attraverso il proxy di Charles. Basta aprire Chrome e portarsi a questo indirizzo accettando l’aggiunta del nuovo certificato.
Portandosi quindi nelle impostazioni della connessione WiFi su Android, toccando l’icona raffigurante un ingranaggio quindi quella che rappresenta una matita, si dovrà regolare la voce Proxy su Manuale quindi indicare IP locale della macchina (virtual machine Virtualbox) sulla quale è in esecuzione Charles e la porta 8888.
Tutto il traffico generato dai siti che si visiteranno comparirà immediatamente nella schermata della macchina virtuale ove Charles è installato.
Purtroppo, a partire da Android 7 Nougat, l’installazione del certificato di Charles non ha effetto sulle app installate: anzi, ne impedisce il trasferimento dati sulla rete Internet (si vedranno apparire errori nella finestra di Charles).
Come si spiega sul sito ufficiale l’unico modo è quello di modificare il file res/xml/network_security_config.xml
delle app per autorizzare l’utilizzo del certificato installato nel dispositivo Android.
La procedura da seguire è riassunta per filo e per segno su Medium mentre utilizzando il framework Frida, come spiegato in questa pagina, si può risolvere diversamente – anche sui dispositivi non sottoposti a rooting – modificando il contenuto del pacchetto APK e firmandolo nuovamente.
Per rimuovere il certificato di Charles dal dispositivo Android, basta portarsi nelle impostazioni, scegliere Sicurezza e posizione, Avanzate, Crittografia e credenziali, Credenziali attendibili, selezionare la scheda Utente quindi procedere con l’eliminazione.
Charles è un programma che viene fornito in prova per 30 giorni dal momento dell’installazione: durante tale periodo mostrerà dei nag screen invitando all’acquisto di una licenza e non potrà essere usato per più di 30 minuti consecutivi. Fatta eccezione per queste due restrizioni, Charles è estremamente versatile e tutte le sue funzionalità possono essere liberamente sfruttate.
Maggiori informazioni sulla configurazione del certificato di Charles possono essere trovate a questo indirizzo.