ARP Spoofing e MITM (Rubare password e credenziali)

Broken Lock15

ARP Spoofing e MITM (Rubare password e credenziali)

23

Nel nostro terzo appuntamento (scriverò regolarmente ogni fine settimana) con la Sicurezza Informatica avrei dovuto parlarvi del DNS Spoofing ma avrei anche dovuto dare per scontati alcuni concetti molto importanti ed interessanti – di cui parleremo oggi – e molti di voi si sarebbero trovati col fare copia e incolla di qualche comando senza sapere cosa ci sia dietro. Parlerò quindi dell’ARP Spoofing, detto anche ARP Poisoning, la cui traduzione letterale è ‘avvelenamento dell’ARP’.

 Cos’è l’ARP?

L’ARP, abbreviazione di Address Resolution Protocol, è appunto un protocollo standard per la risoluzione degli indirizzi. Quando dobbiamo comunicare con un dispositivo e siamo in possesso del suo indirizzo IP abbiamo ancora bisogno del suo indirizzo MAC, ovvero il suo indirizzo fisico, per poter cominciare la comunicazione. Come facciamo ad ottenerlo? Inviamo a tutti i dispositivi nella rete (locale) un pacchetto di ARP Request contenente il nostro indirizzo MAC e l’indirizzo IP del dispositivo che vogliamo contattare, quando questo riceverà il pacchetto e riconoscerà il proprio indirizzo IP manderà una ARP Reply contenente il suo indirizzo MAC (ovviamente lo manderà solo a noi che abbiamo mandato la richiesta, avendogli dato il nostro indirizzo MAC con la richiesta stessa).

 Avveleniamo l’ARP…

Mettiamoci nelle vesti di un attaccante che abbia ottenuto accesso alla nostra rete locale (magari attaccando il WPS del nostro router) e vediamo come possiamo giocare con l’ARP. Il nostro obiettivo, in via del tutto generica, è quello di lanciare un attacco per ottenere delle informazioni su un altro utente connesso alla rete. Dobbiamo riuscire a leggere i messaggi che questo utente scambia col proprio router… Ma come fare? Avvelenando l’ARP!

PC02 vedra l’indirizzo IP del suo router 192.168.0.1 associato all’indirizzo MAC del computer attaccante PC03, 03-03-03-03-03-03. Stessa cosa per il router.

Quello che faremo è dire alla nostra vittima, tramite continue risposte ARP, che l’indirizzo MAC del router è il nostro e viceversa diremo al router che l’indirizzo MAC della vittima è il nostro. Semplice no? Il tutto è reso possibile in quanto il protocollo ARP non è dotato di un meccanismo di autenticazione. Per capire meglio guardate questa immagine che spiega il nostro ARP Poisoning:

Potremo quindi leggere tutte le comunicazioni tra il router e la nostra vittima in quanto passeranno attraverso noi.

All’avvelenamento!poison

Avrete bisogno di un paio di cose prima di cominciare: una macchina virtuale o un computer connessi alla vostra rete locale (non ho mai provato con il mio cellulare, potreste provare voi!), uno sniffer come ettercap (permette anche di effettuare l’ARP Poisoning) o wireshark (molto più istruttivo ma più complesso) e, per effettuare l’ARP Spoofing, arpspoof o quello che preferite voi. Tutti i tools sono installati di default sulla backtrack. Noi oggi scegliamo la strada più comoda ed useremo arpspoof per effettuare l’attacco MITM (Man In The Middle) ed ettercap per leggere il traffico che passa attraverso noi filtrando eventuali credenziali 🙂

Una piccola aggiunta: ad oggi quasi tutti i servizi usano connessioni sicure per passare i dati, sarebbe quindi difficile riuscire a decriptarli, useremo quindi un tool chiamato sslstrip per ‘forzare’ i servizi a non usare queste connessioni sicure (descriveremo il programma in futuro, per ora accontentatevi di usarlo e di questa non proprio veritiera descrizione).

Per prima cosa, dopo aver acceso la macchina virtuale (o fisica) e connessa alla nostra rete locale, dobbiamo abilitare l’IP Forwarding sulla nostra macchina (io uso una backtrack) in modo da poter reindirizzare i pacchetti che ci arrivano verso la giusta destinazione, altrimenti rimarrebbero fermi dopo esserci arrivati:

# echo '1' > /proc/sys/net/ipv4/ip_forward

Controllate che l’IP Forwarding sia attivo con:

# cat /proc/sys/net/ipv4/ip_forward

Che dovrebbe restituire 1 ad indicare che l’IP Forwarding è abilitato.

Dobbiamo ora avvelenare le tabelle ARP del router e della vittima. Apriamo un terminale e lanciamo (uno per scheda o terminale):

# arpspoof -i  -t
# arpspoof -i  -t

L’IP del router è solitamente qualcosa come 192.168.1.1 oppure 192.168.0.1, leggete sulle istruzioni del vostro router se non conoscete l’indirizzo o usate tool come netdiscover, per conoscere quello della macchina vittima basterà lanciare ipconfig (windows) o ifconfig (linux) sulla macchina virtuale e leggere l’IP associato (o, di nuovo, usare netdiscover). La mia macchina virtuale ad esempio è in 192.168.1.3, la mia backtrack in 192.168.1.15, il mio router in 192.168.1.1, la mia scheda di rete è chiamata wlan0.

Vedrete un output che continua a ripetersi (non fermate il comando ovviamente!), leggendolo vedrete che è esattamente quello che stavamo dicendo prima, mandiamo delle risposte ARP dicendo al router che il MAC della vittima è il nostro (primo comando) e viceversa (secondo comando)!

Manca solo sslstrip. Indirizziamo il traffico HTTP verso sslstrip così che possa fare il suo lavoro ed avviamo il programma:

# iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port 10000
# python sslstrip.py

Ora che il traffico passa attraverso noi dobbiamo leggerlo in qualche modo. Possiamo usare Wireshark per avere un quadro completo ma non è quello che ci serve oggi, useremo quindi ettercap per leggere eventuali credenziali:

Aprite una nuova scheda o un nuovo terminale e lanciate ettercap:

# ettercap -Tqu -i

Lanciate ettercap -h se volete avere informazioni sulle opzioni che state passando.

Bene, passiamo ora alla nostra macchina virtuale ed andiamo su un sito da cui effettuare il login, www.facebook.com ad esempio. Provate a mettere un nome utente ed una password qualunque (anche i vostri se volete), date invio e poi date un’occhiata ad ettercap:

Esattamente i dati che avevamo inserito! Se fossero stati reali avremmo ora potuto fare l’accesso al servizio con i dati appena “sniffati” 😉 Potete provare con qualunque servizio che abbia una form di login, tutte le credenziali appariranno su ettercap!

Qualcosa non va?

Mi è stato fatto notare dal lettore fork come non per tutti i servizi ettercap mostrerà le password, in particolare per Libero mail. Il problema è tutto nel modo in cui ettercap “filtra” i contenuti che gli arrivano: la sintassi di Libero non è riconosciuta da ettercap. Ci fermiamo qui? Certo che no! Abbiamo due soluzioni:

Metodo Manuale (universale)

Installiamo Wireshark e andiamo ad analizzare manualmente cosa succede sulla rete. Avviatelo, selezionate la vostra interfaccia di rete e cliccate su start. Alla voce “filter” mettete

ip.addr ==  and http.request.method == "POST"

Filtreremo così solo le richieste POST della macchina vittima. Fate login (ad esempio su Libero) dalla macchina vittima, tornate su Wireshark e andate su “Capture -> Stop”, dovreste avere un solo risultato, cliccateci e, nel riquadro in fondo, scorrete fino alla fine e vedrete qualcosa come “LOGINID=mitm_this_mail%40libero.it&PASSWORD=ThisIsMyPassword” che sono proprio le credenziali che ho inserito io! Per uno screen andate qui: http://tinypic.com/r/2lkqqlf/6
Smanettate il più possibile con Wireshark, farò un articolo sul programma appena possibile perché credetemi, è davvero divino!

Metodo Definitivo (per Libero)

Ettercap non riconosca la coppia LOGINID/PASSWORD, dobbiamo quindi modificare i filtri. Niente di più semplice: aprite il file “/usr/local/share/ettercap/etter.fields” (per la BackTrack) e aggiungete “loginid” nella parte relativa agli “[USER]”, l’unico filtro mancante per Libero. Salvate il file, riavviate ettercap e riprovate a fare login su Libero 😉

  1. Simonlab
    Simonlab12-18-2012

    Non lo avrei postato questo articolo! per scrupolo perchè c’è gente che copia e fa danni! e manco sanno i comandi per vedere le directory! ti conviene oscurare i comandi! e lasciare solo la spiegazione di cosa è il protocollo Arp ecc!

  2. fork
    fork02-11-2013

    questo attacco non funziona con libero mail vero?

  3. rootring
    rootring02-12-2013

    Purtroppo questo tipo di attacco è praticamente universale, funziona anche con libero mail!

  4. fork
    fork02-12-2013

    ho provato e riprovato ma non funziona con libero mail, mentre con alice,etc.. si. Ma tu ci sei riuscito sul libero webmail?

    • fork
      fork02-13-2013

      la domanda è: perchè non funziona con libero webmail?

  5. rootring
    rootring02-13-2013

    Ho dato un’occhiata e in effetti le password di Libero Mail non compaiono in ettercap, il problema è tutto nel modo in cui questo “filtra” i contenuti che gli arrivano: la sintassi di Libero non è riconosciuta da ettercap. Ci fermiamo qui? Certo che no! Abbiamo due soluzioni:
    Metodo manuale (e universale):
    Installiamo Wireshark e andiamo ad analizzare manualmente cosa succede sulla rete. Avviatelo, selezionate la vostra interfaccia di rete e cliccate su start. Alla voce “filter” mettete
    ‘ip.addr == ip-macchina-vittima and http.request.method == “POST”‘
    Filtreremo così solo le richieste POST della macchina vittima. Fate login su Libero dalla macchina vittima, tornate su Wireshark e andate su “Capture -> Stop”, dovreste avere un solo risultato, cliccateci e, nel riquadro in fondo, scorrete fino alla fine e vedrete qualcosa come “LOGINID=mitm_this_mail%40libero.it&PASSWORD=ThisIsMyPassword” che sono proprio le credenziali che ho inserito io! Per uno screen andate qui: http://tinypic.com/r/2lkqqlf/6
    Smanettate il più possibile con Wireshark, farò un articolo sul programma appena possibile perché credetemi, è davvero divino!
    Metodo “definitivo”:
    Ettercap non riconosca la coppia LOGINID/PASSWORD, dobbiamo quindi modificare i filtri. Niente di più semplice: aprite il file “/usr/local/share/ettercap/etter.fields” (per la BackTrack) e aggiungete “loginid” nella parte relativa agli “[USER]”, l’unico filtro mancante per Libero. Salvate il file, riavviate ettercap e riprovate a fare login su Libero 😉

    • fork
      fork02-15-2013

      Sembra che se la vittima ha effettuato il login prima del lancio del comando sslstrip -l XXXX -a -k (anche con k) e se la finestra browser è ridotta a icona, cioè sessione sempre aperta, non si catturano le credenziali. Sono in errore o è così? Nel secondo caso come di riforzare la vittima al login (e.g. DoS)?

  6. rootring
    rootring02-15-2013

    Più che giusto e se ci pensi bene è anche logico: questo attacco non fa che leggere le credeziali che vengono mandate al server ma queste vengono mandate solo quando si preme il tasto di login. Una volta effettuato il login le credenziali non vengono più scambiate in quanto la sessione è aperta e non c’è bisogno di autenticarsi di nuovo. In questi casi però il pericolo è in un attacco di Session Hijacking che, guarda caso, sarà il mio prossimo articolo (in uscita Domenica).
    Un DoS in ogni caso non risolverebbe molto, un’idea così al volo potrebbe essere quella di entrare nel pannello amministrativo del router (visto che si è già all’interno della LAN e in pochi cambiano le password di default) e riavviare il router stesso: l’IP dovrebbe cambiare, dovremmo fare di nuovo login ee ecco di nuovo il rischio che le nostre credenziali vengano “sniffate”.
    Spero di esserti stato d’aiuto!

  7. fork
    fork02-16-2013

    Forse col wifi basterebbe anche un aireplay col flag deauthentication per forzare un nuovo handshake. Il problema è la connessione via cavo, con un Dos (es. Siege) non riuscirei a forzare la disconnessione dell’host?

  8. rootring
    rootring02-17-2013

    Probabilmente si, ma credo sia una via un po’ “eccessiva”, poco elegante e non molto rapida. Basterebbe appunto entrare nella configurazione del modem e riavviare (molti servizi richiedono il login dopo il cambio dell’IP) oppure, già che stai già facendo un attacco MITM potresti fare un attacco di Session Hijacking così da entrare nel servizio senza dover conoscere username/password, fare logout da lì e aspettare un nuovo login! L’articolo su questo attacco è appena uscito:
    https://blog.informaticalab.com/session-hijacking-session-sidejacking-entrare-nellaccount-di-qualcuno-senza-conoscere-le-credenziali/

  9. cybercross
    cybercross06-16-2013

    Salve ragazzi, avrei solo un dubbio:
    seguendo questa guida noto a malincuore che funziona solo sul computer che utilizzo per lo spoofing. Ho sbagliato io qualcosa?

  10. Federico Ponzi
    Federico Ponzi06-19-2013

    Probabilmente si cerca di seguire i passaggi alla lettera 🙂
    Federico

  11. Nick
    Nick11-08-2013

    Scusate la mia ignoranza.. Un attacco di questo tipo si può fare anche se non si è connessi alla rete della macchina-vittima?

  12. Emanuele
    Emanuele07-02-2014

    Ciao scusami ma, non riesco più a trovare il download id arpspoof.. Ho provato anche a sccaricare BackTrack 5 ma nel sito ufficiale dicono che il download non è più disponibile poichè ritenuto obsoleto.. Come posso fare?

  13. manuel
    manuel11-26-2015

    conosco email e password vorrei conoscere la password di fb senza cambiarla

  14. alert('Sito afflitto')
    alert('Sito afflitto')08-19-2017

    Testo

  15. giuseppe
    giuseppe09-09-2017

    ciao federico ho un problema siccome che non ricordo la pasword di facebook e non so come etrere mi potresti aiutarmi un po grazie mille

Leave a Reply