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.