PACKET SNIFFING E ALTRI
STRUMENTI PER LA
GESTIONE DELLA RETE


                          1
Analisi delle connessioni attive e delle porte
• Utilizzo dello strumento netstat
• Netstat consente di capire
   – Quali connessioni TCP sono attive
   – Quali porte sono usate da server che attendono
     connessioni
   – ...
• Noi vedremo solo alcune delle opzioni di netstat. Per
  uno studio più approfondito si rimanda alla man page del
  comando




                                                             2
Comando netstat
netstat [-tuelapn]
• -t mostra connessioni TCP
• -u mostra connessioni UDP
• NOTA: se non si mette ne -t ne -u netstat mostra tutte le
  socket, anche quelle di tipo unix (non IP)
• -e mostra informzioni aggiuntive
• -l mostra le socket in stato “listen”
• -a mostra le socket in qualsiasi stato esse siano
• NOTA: se non si mette ne -l ne -a vengono mostrate solo
  le socket relative a connessioni aperte
• -p mostra il programma associato a quelle socket
• -n mostra informazioni numeriche invece che simboliche
  per i numeri di porta
                                                              3
Esempio nell'uso del comando netstat
$ netstat -t
Active Internet connections (w/o servers)
Proto     Recv-Q Send-Q Local Address         Foreign Address State
tcp      0        0        localhost:38960    localhost:ipp     ESTABLISHED
tcp      1        0        localhost:42807    localhost:ipp     CLOSE_WAIT
tcp      0        0        localhost:ipp      localhost:38960   ESTABLISHED


$ netstat -ltu
Active Internet connections (only servers)
Proto     Recv-Q Send-Q Local Address         Foreign Address State
tcp          0    0        *:time             *:*               LISTEN
tcp          0    0        localhost:905      *:*               LISTEN
tcp       0       0        *:discard          *:*               LISTEN
tcp       0       0        localhost:mysql    *:*               LISTEN
udp      0        0        *:xdmcp            *:*
udp      0        0        localhost:sunrpc   *:*
                                                                              4
Intrpretazione dell'output
• Caso 1
 Proto Recv-Q Send-Q Local Address             Foreign Address State
 tcp     0    0      localhost:ipp             localhost:38960 ESTABLISHED

  – cosa significa la coppia localhost:ipp in local address?
  – cosa sinifica la coppia localhost:38960 in foreign address?
  – Cosa e' lo stato ESTABLISEHED?
• Caso 2
 tcp         0       0       *:time                   *:*           LISTEN
 tcp         0       0       localhost:mysql          *:*           LISTEN

  – Cosa sono gli * negli indirizzi IP
  – Cosa cambia se metto localhost al posto di *?
• Caso 3
 udp         0       0       *:xdmcp                  *:*

  – Perchè manca lo stato?
                                                                             5
Netcat

Netcat (nc) è un comando che permette la lettura e la
scrittura attraverso le connessioni di rete, utilizzando
TCP e UDP.
E' conosciuto come “il coltellino svizzero della rete”



• nc [-options] hostname port[s] [ports] ...
• nc -l -p port [-options]




                                                           6
Netcat – Cosa fa

Netcat può funzionare, quasi indifferentemente, come client
o server di una connessione; per questo è uno strumento
ottimale per la verifica del funzionamento delle connessioni
di rete, e non solo.

In un certo senso è paragonabile idealmente al programma
dd, con la differenza che invece di fare riferimento a dei
dispositivi, si lavora con la rete a livello di trasporto TCP e
UDP: il quarto nel modello OSI/ISO.




                                                                  7
Netcat – La storia


• Rilasciato da Hobbit per la prima volta nel 1995
• Nonostante l'enorme popolarità non è stato
  mantenuto attivo dal suo autore, sono nate così
  nuove versioni (Ncat, GNU netcat, netcat6,
  OpenBSD's nc, ...)
• Ogni distribuzione GNU/Linux rispettabile mette a
  disposizione questo strumento




                                                      8
Netcat - Opzioni

Alcune delle opzioni principali:
-p specifica la porta locale port
-s specifica l’indirizzo locale addr
-l funziona come demone in ascolto di connessioni
sulla porta port specificata
-e consente i eseguire il comando command dopo la
connessione
-v modalità “verbose” (-vv, ancora più “verbose”)
-z scan-mode




                                                    9
Netcat - Esempio

Apertura di una porta
    nc -l -p port

Connessione ad una macchina
   nc hostname port

Apertura di una root shell
    (da root): nc –l –p port –e /bin/sh &




                                            10
Netcat - Esercizio
             Connettiamoci ad un server web

1° Passo: Come ci connettiamo?
    Suggerimento: stare più attenti a lezione!


2° Passo: Cosa dobbiamo dire al server?
    Suggerimento: Chi ce lo può dire?


3° Passo: Come ce lo facciamo dire?
    Suggerimento: Meglio ascoltare prima di parlare


4° Passo: Connettiamoci e parliamo col server!
                                                      11
SSH
SSH (Secure Shell) è un protocollo che permette
di stabilire una connessione cifrata tra due
device.

Noi faremo riferimento a OpenSSH,
un'implementazione opensource disponibile per
diverse piattaforme (OpenBSD, Linux, Solaris...)



ssh [options] [username@]host



                                                   12
SSH – Cosa fa
Viene utilizzato per le connessioni a host remoti,
garantendo la segretezza della comunicazione, inclusa
l'autenticazione (Se pensate che sia ovvio vi sbagliate)

L'autenticazione si basa su un tipo di crittografia detta
a chiave asimmetrica, mentre il resto della comunica-
zione utilizza la più comune crittografia simmetrica

Per funzionare sono necessari due moduli:
• Il client, utilizzato dall'utente per connettersi ad una
  macchina remota
• il server che riceve e gestisce le connessioni
  (presente in tutte le distribuzioni GNU/Linux... serie!)
                                                             13
SSH – La storia
• 1995, Tatu Ylönen, ricercatore alla Helsinki University of
  Technology, disegnò la prima versione del protocollo
  (ora nota come SSH-1)
• Dicembre 1995 Ylönen fondò la SSH Communications
  Security, che porta avanti lo sviluppo nella direzione di
  software proprietario
• 1996, nasce la versione 2 conosciuta come SSH-2 e che
  diventerà standard solo nel 2006 (rfc 4251)
• Lo sviluppo della più conosciuta implementazione
  opensource viene portato avanti dal team sviluppatore di
  OpenBSD



                                                               14
SSH - Opzioni
Le opzioni più comuni sono:
-p per specificare la porta a cui connettersi
-D per creare un tunnel generico
-L per creare un bind tra una porta locale e un servizio
remoto (ip:porta) tramite un terzo host
-R come L, ma al contrario




                                                           15
SSH - Esempio
Ipotizziamo di non avere accesso ad un determinato
servizio remoto (es. chat con msn) a causa delle policy
restrittive dell'uinversità.
Quello che ci serve è un account su un host (con attivo un
server ssh) in grado di connettersi a tale servizio.
A quel punto possiamo creare un tunnel che indirizzi le
nostre richieste all'host remoto che a sua volta le inoltrerà
ai server di tale servizio.

Per fare tutto questo basta un comando:
ssh -L 12345:messenger.hotmail.com:1863 user@server-ssh


Poi occorre impostare il programma di chat per connettersi
usando il tunnel                                                16
Packet Sniffing con TCPDump




                              17
Packet Sniffing
• Nasce come strumento per gli amministratori di
  sistema per monitorare e gestire il traffico di una
  rete.
• Consente di raccogliere informazioni dai pacchetti in
  transito nella LAN.

  ANCHE INFORMAZIONI RISERVATE




                                                          18
Packet Sniffing




                  19
Sniffer
• Gli sniffer sono gli strumenti software utilizzati per
  eseguire Packet Sniffing.

Tra I più noti troviamo:
• Tcpdump
• Wireshark (grafico, ma esiste la versione testuale
  TShark)
• Dsniff
• Snort
• Sniffit


                                                           20
Sniffer
• Uno Sniffer Ethernet è un programma in grado di
  “ascoltare” tutto il traffico che attraversa un
  dispositivo di rete piuttosto che intercettare solo
  quello indirizzato ad essa.

• Per consentire questa funzionalità il dispositivo di
  rete deve essere impostato in modalità promiscua.




                                                         21
Sniffer
• I Packet Sniffer catturano i dati in transito in forma
  “binaria” (0101011…) e traducono queste
  informazioni in un formato leggibile.

• Una ulteriore caratteristica è quella di fornire
  “protocol analisys” → i bit vengono interpretati in
  base ai protocolli utilizzati (se riconosciuti)
    es. Nell'header di un pacchetto IP saranno presenti
    32+32 bit da interpretare come indirizzi IP




                                                           22
HUB Vs. SWITCH
• Per “sniffare” pacchetti occorre, fondamentalmente
  far funzionare lo Sniffer su una rete LAN connessa
  con un HUB e non con uno SWITCH.

• In una rete “hubbed” di n pc (A, B, C, …), se F vuole
  comunicare con C, i dati passano attraverso l’HUB.

• Gli elaboratori con i dispositivi di rete impostati in
  modalità promiscua possono raccogliere tutte le
  informazioni di una rete “hubbed”.

• In una rete switched le cose cambiano!

                                                           23
HUB
L’HUB non sa dove si trova C e perciò ritrasmette ciò
che ha inviato F a tutti i pc. Quelli non interessati in
questa comunicazione ignoreranno i pacchetti ricevuti.




                                                           24
SWITCH
• Uno SWITCH “conosce” sia quali sono i pc connessi,
  sia dove sono.




Ciò rende più impegnativa l’attività di Packet Sniffing…
     ...ma non impossibile!!

                                                           25
Tcpdump
tcpdump [ -adeflnNOpqRStuvxX ] [ -c count ]
       [ -C file_size ] [ -F file ]
       [ -i interface ] [ -m module ] [ -r file ]
       [ -s snaplen ] [ -T type ] [ -w file ]
       [ -E algo:secret ] [ expression ]

• Tcpdump stampa a video l’header dei pacchetti in
  transito su una LAN che corrispondono alle
  caratteristiche indicate in expression.
• Quando Tcpdump termina la sua esecuzione fornisce
  un report riguardante il numero di pacchetti ricevuti
  ed il numero di pacchetti scartati dal kernel.
                                                          26
Tcpdump - Opzioni
Le opzioni principali sono:
  -c count Termina dopo aver ricevuto count pacchetti
  -e        Visualizza gli header a livello DATA LINK
  -E        Utilizza algo:secret per decifrare i pacchetti IPsec
  -i        Rimane in ascolto sull’interfaccia di rete indicata
  -n        Non converte gli indirizzi (IP, di porta…) in nomi
  -r file   Legge i pacchetti dal file file
  -X Visualizza i pacchetti in formato hex e ascii




                                                                   27
Tcpdump - Espressioni
• Con le expression si definiscono i criteri qualitativi
  coi quali scegliere i pacchetti da visualizzare.

• Le expression consistono in una o più primitive
  precedute da “qualificatori”.

• I qualificatori sono: type, dir e proto.




                                                           28
Tcpdump - Espresioni
• Type: host, net e port
    Es. ‘host 155.185.54.156’, ‘port 22’, ecc.

• Dir: src, dst, src or dst
    Es. ‘src 155.185.54.156’

• Proto: ether, fddi, tr, ip, ip6, arp, rarp, decnet, tcp
  and udp
    Es. ‘tcp port 21‘, ‘arp net 155.185.54’



                                                            29
Esperienza
• Realizzare la rete nella figura di
  riferimento
• analizzare il traffico tra node1 e
  node2 utilizzando node3
• Lo switch deve funzionare in
  modalità hub
• Analisi del traffico:
   – Ping
   – Sessioni ssh
   – Traffico generato con netcat


                                       30

Packet Sniffing

  • 1.
    PACKET SNIFFING EALTRI STRUMENTI PER LA GESTIONE DELLA RETE 1
  • 2.
    Analisi delle connessioniattive e delle porte • Utilizzo dello strumento netstat • Netstat consente di capire – Quali connessioni TCP sono attive – Quali porte sono usate da server che attendono connessioni – ... • Noi vedremo solo alcune delle opzioni di netstat. Per uno studio più approfondito si rimanda alla man page del comando 2
  • 3.
    Comando netstat netstat [-tuelapn] •-t mostra connessioni TCP • -u mostra connessioni UDP • NOTA: se non si mette ne -t ne -u netstat mostra tutte le socket, anche quelle di tipo unix (non IP) • -e mostra informzioni aggiuntive • -l mostra le socket in stato “listen” • -a mostra le socket in qualsiasi stato esse siano • NOTA: se non si mette ne -l ne -a vengono mostrate solo le socket relative a connessioni aperte • -p mostra il programma associato a quelle socket • -n mostra informazioni numeriche invece che simboliche per i numeri di porta 3
  • 4.
    Esempio nell'uso delcomando netstat $ netstat -t Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 localhost:38960 localhost:ipp ESTABLISHED tcp 1 0 localhost:42807 localhost:ipp CLOSE_WAIT tcp 0 0 localhost:ipp localhost:38960 ESTABLISHED $ netstat -ltu Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 *:time *:* LISTEN tcp 0 0 localhost:905 *:* LISTEN tcp 0 0 *:discard *:* LISTEN tcp 0 0 localhost:mysql *:* LISTEN udp 0 0 *:xdmcp *:* udp 0 0 localhost:sunrpc *:* 4
  • 5.
    Intrpretazione dell'output • Caso1 Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 localhost:ipp localhost:38960 ESTABLISHED – cosa significa la coppia localhost:ipp in local address? – cosa sinifica la coppia localhost:38960 in foreign address? – Cosa e' lo stato ESTABLISEHED? • Caso 2 tcp 0 0 *:time *:* LISTEN tcp 0 0 localhost:mysql *:* LISTEN – Cosa sono gli * negli indirizzi IP – Cosa cambia se metto localhost al posto di *? • Caso 3 udp 0 0 *:xdmcp *:* – Perchè manca lo stato? 5
  • 6.
    Netcat Netcat (nc) èun comando che permette la lettura e la scrittura attraverso le connessioni di rete, utilizzando TCP e UDP. E' conosciuto come “il coltellino svizzero della rete” • nc [-options] hostname port[s] [ports] ... • nc -l -p port [-options] 6
  • 7.
    Netcat – Cosafa Netcat può funzionare, quasi indifferentemente, come client o server di una connessione; per questo è uno strumento ottimale per la verifica del funzionamento delle connessioni di rete, e non solo. In un certo senso è paragonabile idealmente al programma dd, con la differenza che invece di fare riferimento a dei dispositivi, si lavora con la rete a livello di trasporto TCP e UDP: il quarto nel modello OSI/ISO. 7
  • 8.
    Netcat – Lastoria • Rilasciato da Hobbit per la prima volta nel 1995 • Nonostante l'enorme popolarità non è stato mantenuto attivo dal suo autore, sono nate così nuove versioni (Ncat, GNU netcat, netcat6, OpenBSD's nc, ...) • Ogni distribuzione GNU/Linux rispettabile mette a disposizione questo strumento 8
  • 9.
    Netcat - Opzioni Alcunedelle opzioni principali: -p specifica la porta locale port -s specifica l’indirizzo locale addr -l funziona come demone in ascolto di connessioni sulla porta port specificata -e consente i eseguire il comando command dopo la connessione -v modalità “verbose” (-vv, ancora più “verbose”) -z scan-mode 9
  • 10.
    Netcat - Esempio Aperturadi una porta nc -l -p port Connessione ad una macchina nc hostname port Apertura di una root shell (da root): nc –l –p port –e /bin/sh & 10
  • 11.
    Netcat - Esercizio Connettiamoci ad un server web 1° Passo: Come ci connettiamo? Suggerimento: stare più attenti a lezione! 2° Passo: Cosa dobbiamo dire al server? Suggerimento: Chi ce lo può dire? 3° Passo: Come ce lo facciamo dire? Suggerimento: Meglio ascoltare prima di parlare 4° Passo: Connettiamoci e parliamo col server! 11
  • 12.
    SSH SSH (Secure Shell)è un protocollo che permette di stabilire una connessione cifrata tra due device. Noi faremo riferimento a OpenSSH, un'implementazione opensource disponibile per diverse piattaforme (OpenBSD, Linux, Solaris...) ssh [options] [username@]host 12
  • 13.
    SSH – Cosafa Viene utilizzato per le connessioni a host remoti, garantendo la segretezza della comunicazione, inclusa l'autenticazione (Se pensate che sia ovvio vi sbagliate) L'autenticazione si basa su un tipo di crittografia detta a chiave asimmetrica, mentre il resto della comunica- zione utilizza la più comune crittografia simmetrica Per funzionare sono necessari due moduli: • Il client, utilizzato dall'utente per connettersi ad una macchina remota • il server che riceve e gestisce le connessioni (presente in tutte le distribuzioni GNU/Linux... serie!) 13
  • 14.
    SSH – Lastoria • 1995, Tatu Ylönen, ricercatore alla Helsinki University of Technology, disegnò la prima versione del protocollo (ora nota come SSH-1) • Dicembre 1995 Ylönen fondò la SSH Communications Security, che porta avanti lo sviluppo nella direzione di software proprietario • 1996, nasce la versione 2 conosciuta come SSH-2 e che diventerà standard solo nel 2006 (rfc 4251) • Lo sviluppo della più conosciuta implementazione opensource viene portato avanti dal team sviluppatore di OpenBSD 14
  • 15.
    SSH - Opzioni Leopzioni più comuni sono: -p per specificare la porta a cui connettersi -D per creare un tunnel generico -L per creare un bind tra una porta locale e un servizio remoto (ip:porta) tramite un terzo host -R come L, ma al contrario 15
  • 16.
    SSH - Esempio Ipotizziamodi non avere accesso ad un determinato servizio remoto (es. chat con msn) a causa delle policy restrittive dell'uinversità. Quello che ci serve è un account su un host (con attivo un server ssh) in grado di connettersi a tale servizio. A quel punto possiamo creare un tunnel che indirizzi le nostre richieste all'host remoto che a sua volta le inoltrerà ai server di tale servizio. Per fare tutto questo basta un comando: ssh -L 12345:messenger.hotmail.com:1863 user@server-ssh Poi occorre impostare il programma di chat per connettersi usando il tunnel 16
  • 17.
  • 18.
    Packet Sniffing • Nascecome strumento per gli amministratori di sistema per monitorare e gestire il traffico di una rete. • Consente di raccogliere informazioni dai pacchetti in transito nella LAN. ANCHE INFORMAZIONI RISERVATE 18
  • 19.
  • 20.
    Sniffer • Gli sniffersono gli strumenti software utilizzati per eseguire Packet Sniffing. Tra I più noti troviamo: • Tcpdump • Wireshark (grafico, ma esiste la versione testuale TShark) • Dsniff • Snort • Sniffit 20
  • 21.
    Sniffer • Uno SnifferEthernet è un programma in grado di “ascoltare” tutto il traffico che attraversa un dispositivo di rete piuttosto che intercettare solo quello indirizzato ad essa. • Per consentire questa funzionalità il dispositivo di rete deve essere impostato in modalità promiscua. 21
  • 22.
    Sniffer • I PacketSniffer catturano i dati in transito in forma “binaria” (0101011…) e traducono queste informazioni in un formato leggibile. • Una ulteriore caratteristica è quella di fornire “protocol analisys” → i bit vengono interpretati in base ai protocolli utilizzati (se riconosciuti) es. Nell'header di un pacchetto IP saranno presenti 32+32 bit da interpretare come indirizzi IP 22
  • 23.
    HUB Vs. SWITCH •Per “sniffare” pacchetti occorre, fondamentalmente far funzionare lo Sniffer su una rete LAN connessa con un HUB e non con uno SWITCH. • In una rete “hubbed” di n pc (A, B, C, …), se F vuole comunicare con C, i dati passano attraverso l’HUB. • Gli elaboratori con i dispositivi di rete impostati in modalità promiscua possono raccogliere tutte le informazioni di una rete “hubbed”. • In una rete switched le cose cambiano! 23
  • 24.
    HUB L’HUB non sadove si trova C e perciò ritrasmette ciò che ha inviato F a tutti i pc. Quelli non interessati in questa comunicazione ignoreranno i pacchetti ricevuti. 24
  • 25.
    SWITCH • Uno SWITCH“conosce” sia quali sono i pc connessi, sia dove sono. Ciò rende più impegnativa l’attività di Packet Sniffing… ...ma non impossibile!! 25
  • 26.
    Tcpdump tcpdump [ -adeflnNOpqRStuvxX] [ -c count ] [ -C file_size ] [ -F file ] [ -i interface ] [ -m module ] [ -r file ] [ -s snaplen ] [ -T type ] [ -w file ] [ -E algo:secret ] [ expression ] • Tcpdump stampa a video l’header dei pacchetti in transito su una LAN che corrispondono alle caratteristiche indicate in expression. • Quando Tcpdump termina la sua esecuzione fornisce un report riguardante il numero di pacchetti ricevuti ed il numero di pacchetti scartati dal kernel. 26
  • 27.
    Tcpdump - Opzioni Leopzioni principali sono: -c count Termina dopo aver ricevuto count pacchetti -e Visualizza gli header a livello DATA LINK -E Utilizza algo:secret per decifrare i pacchetti IPsec -i Rimane in ascolto sull’interfaccia di rete indicata -n Non converte gli indirizzi (IP, di porta…) in nomi -r file Legge i pacchetti dal file file -X Visualizza i pacchetti in formato hex e ascii 27
  • 28.
    Tcpdump - Espressioni •Con le expression si definiscono i criteri qualitativi coi quali scegliere i pacchetti da visualizzare. • Le expression consistono in una o più primitive precedute da “qualificatori”. • I qualificatori sono: type, dir e proto. 28
  • 29.
    Tcpdump - Espresioni •Type: host, net e port Es. ‘host 155.185.54.156’, ‘port 22’, ecc. • Dir: src, dst, src or dst Es. ‘src 155.185.54.156’ • Proto: ether, fddi, tr, ip, ip6, arp, rarp, decnet, tcp and udp Es. ‘tcp port 21‘, ‘arp net 155.185.54’ 29
  • 30.
    Esperienza • Realizzare larete nella figura di riferimento • analizzare il traffico tra node1 e node2 utilizzando node3 • Lo switch deve funzionare in modalità hub • Analisi del traffico: – Ping – Sessioni ssh – Traffico generato con netcat 30