Man-in-the-middle (MITM)

Transcript

Man-in-the-middle (MITM)
LABORATORIO DI SICUREZZA — LEZIONE DEL 16/3/2011
1
Man-in-the-middle (MITM)
La scorsa lezione abbiamo visto come ’deviare’ il traffico su una rete (anche switched) verso
un host sotto il controllo dell’attaccante tramite ARP spoofing (falsificazione di pacchetti ARP).
Questo permette di intercettare i pacchetti in transito.
Se però si prova ad effettuare una connessione (ad esempio con ssh) la l’host dell’attaccante
non risponderà correttamente. Questo accade perchè i pacchetti in arrivo sono destinati ad
un altro host e quindi vengono scartati. Se si abilita il forwarding (come indicato la lezione
scorsa) i pacchetti vengono rimandati all’host di destinazione e si realizza quindi uno sniffing
anche nel caso di reti switched.
Per realizzare un Man-in-the-middle vogliamo essere in grado di processare i pacchetti in
transito. Vediamo quindi come prima cosa, come fare ad accettare i pacchetti diretti ad altri
host e far sı̀ che l’host risponda correttamente.
Immaginiamo una connessione ssh verso la macchina 192.168.69.250 con uno spoofing
verso 192.168.69.11. Quest’ultima scarterà i pacchetti in arrivo perchè destinati alla macchina
250 mentre la 250 non riceverà mai nulla (se il forwarding non è abilitato). Di fatto otteniamo
un denial-of-service: ssh non funziona.
Per far sı̀ che la macchina 11 risponda possiamo usare un NAT (Network Address Translation)
realizzato con iptables:
sudo iptables -t nat -A PREROUTING -p tcp -d 192.168.69.250 -j DNAT --todestination 192.168.69.11
Questo crea una regola di PREROUTING nella tabella nat: tutti i pacchetti tcp destinati all’host
250 vegono processati (-j, jump) in Destination NAT verso l’host 11. NAT fa sı̀ che le risposte da
11 sono ritradotte come provenienti da 250, quindi a questo punto qualiasi connessione verso
la macchina 250 verrà accettata dalla macchina 11.
Esercizio: Coordinatevi per provare questa prima parte del MITM e osservate che le connessioni vengono tutte deviate sulla macchina 11. Potete mettere diverse regole con iptables per
deviare connessioni a diversi host tutte sulla 11.
Per visualizzare le regole iptables della tabella nat usare -L
sudo iptables -t nat -L
Per eliminarle usare -D
sudo iptables -t nat -D PREROUTING 1
Questo elimina la prima regola della ‘chain’ di PREROUTING.
.... in the middle?
Fino ad ora abbiamo visto la prima parte di un MITM: come deviare una connessione su un
host differente. Come facciamo a metterci veramente nel mezzo? Vogliamo che la connessione vada a buon fine sulla macchina corretta con la possibilità di visualizzare e modificare i
pacchetti in transito. Sempre con iptables possiamo deviare i pacchetti su una porta differente
e su quella porta mettiamo in ascolto il programma che effettuerà l’attacco MITM eseguendo
la connessione con la macchina vittima e forwardando/modificando i pacchetti in transito.
sudo iptables -t nat -A PREROUTING -p tcp --dport 22 -d 192.168.69.250 -j DNAT
--to-destination 192.168.69.11:10000
Ora le connessioni ssh alla macchina 22 vengono ridirezionate sulla macchina 11, porta 10000.
Se scriviamo un programma che ascolta sulla porta 10000, esegue una connessione sulla porta
22 della macchina 250 e fa il forward avanti e indietro dei pacchetti, riusciamo ad essere
effettivamente nel mezzo. La cosa si può simulare con netcat e una pipe come segue:
LABORATORIO DI SICUREZZA — LEZIONE DEL 16/3/2011
cat pipe | nc -l -p 10000 | ... evenuale processing della sessione ... |
192.168.69.250 22 > pipe
2
nc
Siamo effettivamente nel mezzo, ma di una connessione ssh quindi cifrata! Vediamo qualcosa di più semplice:
Esercizio Provare ad effettuare un attacco su una chat minimale effettuata con netcat tra due
host. il server esegue
nc -l -p 10000
il client esegue
nc 192.168.69.10 10000
Scopo dell’attacco: inserirsi (MITM) nella chat e modificare ‘al volo’ alcune parole. Ad esempio ’bello’ con ’brutto’, ’divertente’ con ’noioso’, .... (può tornare utile il comando sed)
Esercizio Provare un HTML injection (aggiungere, tramite MITM, sorgente HTML alla pagina web)
sul server web di vuln1.
Esercizio avanzato Tentare un MITM su una sessione ssh. Cercare di capire quali sono i problemi
da risolvere, dato che la connessione è cifrata. Proporre possibili strade da percorrere.