Introduzione
Dopo un primo accenno alle basi della navigazione ed all'unicità di un client all'interno della rete, ho deciso di parlare di tutti i fattori tramite i quali un client viene identificato oltre all'indirizzo IP (di cui ho parlato nella parte precedente), partiremo dai fattori di identificazione locali fino ad arrivare a quelli online
Fattori di identificazione
Locale
Il primo fattore identificativo da cui tenere conto in una connessione locale (quindi tra il tuo pc ed il router) è sicuramente il Mac Address, di cui ho parlato nel capitolo precedente, questo indirizzo non verrà mai comunicato al di fuori della vostra connessione locale ed identifica il vostro adattatore di rete, quindi, comprando un pc usato (non rivelando l'identità al venditore) nessuno potrà mai arrivare al nostro adattatore. Comprare un PC od una scheda di rete usata non è per forza la soluzione migliore, l'indirizzo Mac può essere di fatti cambiato temporaneamente, questa tecnica viene chiamata Mac Address Spoofing, in base al vostro sistema operativo ci sono più tecniche, di solito si può fare tranquillamente da terminale (un esempio classico di mac address spoofato è 00:11:22:33:44:55)
Sempre parlando di connessione locale, oltre al mac address comunichiamo anche l'hostname del nostro pc, quindi il nostro nome utente, potrebbe essere "Alberto-PC" o "iPhone di Chiara" e così via, in termini di identificazione non è per forza così grave lasciare il nome del proprio PC (salvo che abbiamo il nostro cognome al suo interno), ma, come già spiegato nel capitolo precedente, quante persone che si chiamano Alberto ci sono in Italia? E quante vivono abbastanza vicino a casa mia da poter usufruire del mio PC? Oppure, quante lavorano nel mio ufficio (Presupponendo che qualcuno dell'ufficio ha visitato un sito nella blacklist con mac address spoofato)?
Remota
Nelle connessioni remote invece il 'gioco' si fa più complicato, o meglio, non sarebbe così tanto più complicato, inviamo e riceviamo pacchetti contenenti una porta (ex 80 per il web), il protocollo usato (TCP,UDP), un indirizzo di origine ed uno di destinazione, infine i dati da trasmettere... ma, soprattutto quando ci colleghiamo ad un sito web o ancora peggio quando apriamo un'applicazione di cui non abbiamo la sorgente (o non l'abbiamo controllata), non possiamo sapere cosa contengano quei dati. Vi faccio un esempio, apriamo un applicazione x sotto vpn prendendo tutte le accortezze possibili, questa applicazione potrebbe tranquillamente leggere l'indirizzo mac del router a cui siamo connessi ed inviarlo ad un server remoto, così come il nostro. Purtroppo in questi casi non possiamo fare molto, se non reversare l'applicazione e capire cosa va a leggere, un consiglio generale è comunque quello di non aprire nessuna applicazione dove sia stato salvato qualche login automatico (ad esempio steam), cercando di evitare di non aprire in generale nessun applicativo di cui non conosciamo il contenuto (che si collega in rete).
Dopo un primo accenno alle basi della navigazione ed all'unicità di un client all'interno della rete, ho deciso di parlare di tutti i fattori tramite i quali un client viene identificato oltre all'indirizzo IP (di cui ho parlato nella parte precedente), partiremo dai fattori di identificazione locali fino ad arrivare a quelli online
Fattori di identificazione
Locale
Il primo fattore identificativo da cui tenere conto in una connessione locale (quindi tra il tuo pc ed il router) è sicuramente il Mac Address, di cui ho parlato nel capitolo precedente, questo indirizzo non verrà mai comunicato al di fuori della vostra connessione locale ed identifica il vostro adattatore di rete, quindi, comprando un pc usato (non rivelando l'identità al venditore) nessuno potrà mai arrivare al nostro adattatore. Comprare un PC od una scheda di rete usata non è per forza la soluzione migliore, l'indirizzo Mac può essere di fatti cambiato temporaneamente, questa tecnica viene chiamata Mac Address Spoofing, in base al vostro sistema operativo ci sono più tecniche, di solito si può fare tranquillamente da terminale (un esempio classico di mac address spoofato è 00:11:22:33:44:55)
Sempre parlando di connessione locale, oltre al mac address comunichiamo anche l'hostname del nostro pc, quindi il nostro nome utente, potrebbe essere "Alberto-PC" o "iPhone di Chiara" e così via, in termini di identificazione non è per forza così grave lasciare il nome del proprio PC (salvo che abbiamo il nostro cognome al suo interno), ma, come già spiegato nel capitolo precedente, quante persone che si chiamano Alberto ci sono in Italia? E quante vivono abbastanza vicino a casa mia da poter usufruire del mio PC? Oppure, quante lavorano nel mio ufficio (Presupponendo che qualcuno dell'ufficio ha visitato un sito nella blacklist con mac address spoofato)?
Remota
Nelle connessioni remote invece il 'gioco' si fa più complicato, o meglio, non sarebbe così tanto più complicato, inviamo e riceviamo pacchetti contenenti una porta (ex 80 per il web), il protocollo usato (TCP,UDP), un indirizzo di origine ed uno di destinazione, infine i dati da trasmettere... ma, soprattutto quando ci colleghiamo ad un sito web o ancora peggio quando apriamo un'applicazione di cui non abbiamo la sorgente (o non l'abbiamo controllata), non possiamo sapere cosa contengano quei dati. Vi faccio un esempio, apriamo un applicazione x sotto vpn prendendo tutte le accortezze possibili, questa applicazione potrebbe tranquillamente leggere l'indirizzo mac del router a cui siamo connessi ed inviarlo ad un server remoto, così come il nostro. Purtroppo in questi casi non possiamo fare molto, se non reversare l'applicazione e capire cosa va a leggere, un consiglio generale è comunque quello di non aprire nessuna applicazione dove sia stato salvato qualche login automatico (ad esempio steam), cercando di evitare di non aprire in generale nessun applicativo di cui non conosciamo il contenuto (che si collega in rete).
Ma parliamo piuttosto del browser, durante una normale navigazione si aggiungono fattori che non sono necessari per altri tipi di connessioni, per esempio lo user-agent, che comunica il browser che stiamo usando, assieme alla versione ed al sistema operativo in uso.. Calcolando che ci sono solo 5 browser considerabili 'principali' (Firefox, Chrome, Opera, Edge e Safari), usati in percentuali che non conosco al momento, anche solo usare il browser che usiamo di solito è sbagliato, per il semplice fatto che favorisce la nostra identificazione, come già detto bisogna cercare di fingere un'appartenze ad una cerchia di utenti a cui in realtà non ci avviciniamo nemmeno.
Altro fattore importante e presente in tutte le richieste è l'Accept-Language, consiste semplicemente nelle lingue preferite dal nostro browser, così a primo impatto può sembrare una cosa da poco, ma non va sottovalutata, da quello si può capire la nostra nazionalità, e, pur quanto non siamo proprio 4 gatti in Italia, si restringe il campo di ricerca. Ci sono anche Accept, Accept-Encoding e, nei siti dinamici, la risoluzione dello schermo
Questi erano i fattori onnipresenti nelle richieste rilevanti la navigazione web, passiamo adesso ad altri fattori identificativi che i siti più usati usano.
HTML5 Fingerprint, penso sia uno tra i più infami, il modo in cui funziona è un po' complicato da spiegare, l'HTML5 Fingerprint cambia principalmente in base a browser, sistema operativo e scheda grafica.. Vi starete domandando probabilmente, data l'esistenza dello user-agent, come mai la semplice aggiunta del modello di scheda grafica possa fare così tanto la differenza, beh, non è solo quello: Ormai cambiare user-agent è una tecnica usata in modo sempre più frequente, non è difficile farlo,
ci sono mille estensioni che permetto di cambiarlo, ma l'htm5 fingerprint (o canvas fingerprint) è un elemento spesso tralasciato da molti, che tra l'altro, anche se venisse alterato, ci renderebbe ancora più unici, così come se durante una sessione continuasse a cambiare, l'unica soluzione è usare un plugin che ti permetta di cambiarlo quando vuoi tu, in modo da effettuare cambi solo se necessari
DNS Leaks, questi sono abbastanza particolari, al giorno d'oggi quasi tutte le vpn riescono a fermarli, ma, per la cronaca, vi spiego ugualmente come funzionano: Spesso (al tempo) le VPN permettevano comunque all'interfaccia locale (fuori dalla vpn) di inviare e ricevere pacchetti e le richieste DNS venivano inviate senza VPN, ciò significa che il nostro ISP poteva sapere quali siti visitavamo (senza però conoscere il contenuto della nostra sessione)
WebRTC Leaks, in sostanza il WebRTC permette le connessioni RTC all'interno del browser (peer-to-peer), tramite questa API Javascript un sito web può conoscere il nostro indirizzo IP locale, quindi quello che ci offre il nostro Router tramite DHCP. Potrebbe sembrare una cosa da poco ma, nel caso della connessione 3g del telefono (come qualsiasi altra tecnologia che sfrutta delle celle alle quali possiamo collegarci senza fili), l'IP remoto sarà quello della cella, quindi per scoprire la nostra identità andrebbe chiesto al provider (ISP) di controllare le connessioni all'interno di una determinata cella che puntassero al server che ha fatto la richiesta, mentre, sapendo il nostro indirizzo ip locale, basta fornire un orario e si può sapere chi aveva ottenuto quell'IP a quella determinata ora.
C'è veramente tanto di cui parlare ma per adesso mi fermo qui, alla prossima
Altro fattore importante e presente in tutte le richieste è l'Accept-Language, consiste semplicemente nelle lingue preferite dal nostro browser, così a primo impatto può sembrare una cosa da poco, ma non va sottovalutata, da quello si può capire la nostra nazionalità, e, pur quanto non siamo proprio 4 gatti in Italia, si restringe il campo di ricerca. Ci sono anche Accept, Accept-Encoding e, nei siti dinamici, la risoluzione dello schermo
Questi erano i fattori onnipresenti nelle richieste rilevanti la navigazione web, passiamo adesso ad altri fattori identificativi che i siti più usati usano.
HTML5 Fingerprint, penso sia uno tra i più infami, il modo in cui funziona è un po' complicato da spiegare, l'HTML5 Fingerprint cambia principalmente in base a browser, sistema operativo e scheda grafica.. Vi starete domandando probabilmente, data l'esistenza dello user-agent, come mai la semplice aggiunta del modello di scheda grafica possa fare così tanto la differenza, beh, non è solo quello: Ormai cambiare user-agent è una tecnica usata in modo sempre più frequente, non è difficile farlo,
ci sono mille estensioni che permetto di cambiarlo, ma l'htm5 fingerprint (o canvas fingerprint) è un elemento spesso tralasciato da molti, che tra l'altro, anche se venisse alterato, ci renderebbe ancora più unici, così come se durante una sessione continuasse a cambiare, l'unica soluzione è usare un plugin che ti permetta di cambiarlo quando vuoi tu, in modo da effettuare cambi solo se necessari
DNS Leaks, questi sono abbastanza particolari, al giorno d'oggi quasi tutte le vpn riescono a fermarli, ma, per la cronaca, vi spiego ugualmente come funzionano: Spesso (al tempo) le VPN permettevano comunque all'interfaccia locale (fuori dalla vpn) di inviare e ricevere pacchetti e le richieste DNS venivano inviate senza VPN, ciò significa che il nostro ISP poteva sapere quali siti visitavamo (senza però conoscere il contenuto della nostra sessione)
WebRTC Leaks, in sostanza il WebRTC permette le connessioni RTC all'interno del browser (peer-to-peer), tramite questa API Javascript un sito web può conoscere il nostro indirizzo IP locale, quindi quello che ci offre il nostro Router tramite DHCP. Potrebbe sembrare una cosa da poco ma, nel caso della connessione 3g del telefono (come qualsiasi altra tecnologia che sfrutta delle celle alle quali possiamo collegarci senza fili), l'IP remoto sarà quello della cella, quindi per scoprire la nostra identità andrebbe chiesto al provider (ISP) di controllare le connessioni all'interno di una determinata cella che puntassero al server che ha fatto la richiesta, mentre, sapendo il nostro indirizzo ip locale, basta fornire un orario e si può sapere chi aveva ottenuto quell'IP a quella determinata ora.
C'è veramente tanto di cui parlare ma per adesso mi fermo qui, alla prossima