:: Sicurezza nelle Reti - Prova Pratica - Giugno 2008 ::
Esercizio 1
Utilizzare tcpdump per salvare su un unico file tutto il traffico generato aprendo una sessione FTP ATTIVO verso il computer del docente e scaricando in locale il file presente sul server.
Dal file contenente il traffico generato nel punto precedente, ricavare, utilizzando il minor numero possibile di filtri tcpdump, i pacchetti necessari a mostrare:
- handshake TCP della connessione DATI
- protocollo di terminazione della connessione DATI
Utilizzare sempre almeno i seguenti filtri combinati con operatori logici:
- indirizzo IP di una delle due macchine
- combinazione di uno o più flag TCP (usare filtro sul contenuto binario)
- porta (o range di porte) applicativa (usare filtro sul contenuto binario dell'intero parametro dell'header)
Soluzione
Per salvare il traffico, facciamo
tcpdump -n -v -i eth 0 -w traffico.dump
Per aprire la connessione FTP attiva, da linea di comando si fanno le seguenti cose:
% ftp IpDocente
>LS
>GET nomefile
>QUIT
ftp IpDocente apre la connessione, LS lista i files, GET lo recupera, QUIT esce. Se il file da scaricare non è lì, occorre cercarlo da qualche parte: dopo aver fatto LS ed essere comparsa una lista di directory, si fa CD nomedir per entrare nella directory.
Nell'FTP attivo, la connessione dati è eseguita dalla porta 20 del server ad una porta alta del client. L'handshake è composto così:
- client: SYN
- server: SYN ACK
- client ACK
Ma in questo caso, è il PcDocente a fare da CLIENT, e il nostro Pc a fare da SERVER. La sequenza sarebbe quindi:
- PcDocente: SYN
- PcNostro: SYN ACK
- Pcdocente: ACK
Per trovare il SYN del docente tramite tcpdump, facciamo:
tcpdump -n -v -i eth0 src host PcDocente and "tcp[0:2] = 20 and tcp[13] & 1 != 0" -r traffico.dump
che ci trova il pacchetto proveniente dalla porta 20 del PcDocente con settato il flag SYN.
Per trovare il SYN/ACK del PcNostro inviato alla porta destinazione 20, facciamo:
tcpdump -n -v -i eth0 src host PcNostro and "tcp[13] = 18 and tcp[2:2] = 20" -r traffico.dump
Per trovare gli ACK che il PcDocente ci ha inviato, facciamo:
tcpdump -n -v -i eth0 src host Pcdocente and "tcp[13] = 16 and tcp[0:2] = 20" -r traffico.dump
La disconnessione avviene invece in questo modo: chi vuole terminare invia FIN, l'altro risponde con FIN ACK, e il primo risponde con ACK, e finisce lì.
Siccome siamo noi a voler terminare la connessione, saremo noi ad inviare il FIN e a ricever FIN ACK:
tcpdump -n -v -i eth0 src host PcNostro and "tcp[13] = 1 and tcp[2:2] = 20" -r traffico.dump
E il docente risponderà con FIN ACK:
tcpdump -n -v -i eth0 src host PcDocente and "tcp[13] = 17 and tcp[0:2] = 20" -r traffico.dump
Una cosa su cui sono incerto è se sia possibile combinare tutte queste cose in un comando solo... guardandolo così, non credo proprio, e dal testo non capisco se il prof lo voglia o mica...
La cosa migliore che posso fare in un botto solo è questa:
(ATTENZIONE E' DA RIVEDERE questo comando non viene accettato da tcpdump!)
tcpdump -n -v -i eth 0
(src host PcDocente and tcp[0:2] = 20 and tcp[13] = 2)
or (src host PcDocente and tcp[0:2] = 20 and tcp[13] & 1 != 0)
or (src host PcNostro and tcp[2:2] = 20 and tcp[13] = 18)
or (src host PcNostro and tcp[2:2] = 20 and tcp[13] & 1 != 0)
-r traffico.dump
che prende i seguenti pacchetti:
- i pacchetti con soli SYN provenienti dalla porta 20 del PcDocente
- i pacchetti con almeno FIN provenienti dalla porta 20 del PcDocente
- i pacchetti con soli SYN ACK provenienti dal PcNostro e diretti alla porta 20 del PcDocente
- i pacchetti con almeno FIN provenienti dalla PcNostro e diretti alla porta 20 del PcDocente
Rimangono fuori gli ACK di risposta, ma se inserisco anche un filtro, troverebbe TUTTI gli hack, e quindi ritengo non si possa far molto di meglio.
Torna alla pagina di Sicurezza nelle Reti