Sniffing di pacchetti di rete
Lo sniffing o lo sniffing dei pacchetti di rete è il processo di monitoraggio e acquisizione di tutti i pacchetti che passano attraverso una data rete utilizzando strumenti di sniffing. È un modulo in cui possiamo "toccare i fili del telefono" e conoscere la conversazione. È anche chiamatowiretapping e può essere applicato alle reti di computer.
Ci sono così tante possibilità che se una serie di porte dello switch aziendale è aperta, uno dei loro dipendenti può rilevare l'intero traffico della rete. Chiunque si trovi nella stessa posizione fisica può collegarsi alla rete utilizzando un cavo Ethernet o connettersi in modalità wireless a quella rete e annusare il traffico totale.
In altre parole, lo sniffing ti consente di vedere tutti i tipi di traffico, sia protetto che non protetto. Nelle giuste condizioni e con i protocolli giusti, una parte attaccante potrebbe essere in grado di raccogliere informazioni che possono essere utilizzate per ulteriori attacchi o per causare altri problemi alla rete o al proprietario del sistema.
Cosa si può annusare?
Si possono annusare le seguenti informazioni sensibili da una rete:
- Traffico e-mail
- Password FTP
- Traffico web
- Password Telnet
- Configurazione del router
- Sessioni di chat
- Traffico DNS
Come funziona lo sniffing?
Uno sniffer normalmente trasforma la NIC del sistema in modalità promiscua in modo che ascolti tutti i dati trasmessi sul suo segmento.
La modalità promiscua si riferisce al modo unico dell'hardware Ethernet, in particolare, le schede di interfaccia di rete (NIC), che consente a un NIC di ricevere tutto il traffico sulla rete, anche se non è indirizzato a questo NIC. Per impostazione predefinita, una scheda NIC ignora tutto il traffico non indirizzato ad essa, cosa che viene eseguita confrontando l'indirizzo di destinazione del pacchetto Ethernet con l'indirizzo hardware (MAC) del dispositivo. Sebbene ciò abbia perfettamente senso per il networking, la modalità non promiscua rende difficile utilizzare il monitoraggio della rete e il software di analisi per diagnosticare problemi di connettività o contabilità del traffico.
Uno sniffer può monitorare continuamente tutto il traffico verso un computer attraverso la NIC decodificando le informazioni incapsulate nei pacchetti di dati.
Tipi di fiuto
Lo sniffing può essere di natura attiva o passiva. Ora impareremo i diversi tipi di sniffing.
Sniffing passivo
Nello sniffing passivo il traffico è bloccato ma non viene alterato in alcun modo. Lo sniffing passivo consente solo l'ascolto. Funziona con i dispositivi Hub. Su un dispositivo hub, il traffico viene inviato a tutte le porte. In una rete che utilizza hub per connettere i sistemi, tutti gli host sulla rete possono vedere il traffico. Pertanto, un utente malintenzionato può facilmente acquisire il traffico in transito.
La buona notizia è che gli hub sono diventati quasi obsoleti negli ultimi tempi. La maggior parte delle reti moderne utilizza interruttori. Quindi, lo sniffing passivo non è più efficace.
Sniffing attivo
Nello sniffing attivo, il traffico non è solo bloccato e monitorato, ma può anche essere alterato in qualche modo come determinato dall'attacco. Lo sniffing attivo viene utilizzato per rilevare una rete basata su switch. Implica l'iniezione di pacchetti di risoluzione degli indirizzi (ARP) in una rete di destinazione per riempire la tabella CAM (Switch Content Addressable Memory). CAM tiene traccia di quale host è connesso a quale porta.
Di seguito sono riportate le tecniche di sniffing attivo:
- MAC Flooding
- Attacchi DHCP
- Avvelenamento da DNS
- Attacchi di spoofing
- Avvelenamento da ARP
Gli effetti dello sniffing sui protocolli
Protocolli come tried and true TCP/IPnon sono mai stati progettati pensando alla sicurezza. Tali protocolli non offrono molta resistenza a potenziali intrusi. Di seguito sono riportati i diversi protocolli che si prestano a un facile sniffing:
HTTP
Viene utilizzato per inviare informazioni in testo chiaro senza alcuna crittografia e quindi un vero obiettivo.
SMTP (Simple Mail Transfer Protocol)
L'SMTP viene utilizzato nel trasferimento delle e-mail. Questo protocollo è efficiente, ma non include alcuna protezione contro lo sniffing.
NNTP (Network News Transfer Protocol)
Viene utilizzato per tutti i tipi di comunicazione. Uno dei principali svantaggi di questo è che i dati e persino le password vengono inviati sulla rete come testo in chiaro.
POP (Post Office Protocol)
POP è strettamente utilizzato per ricevere e-mail dai server. Questo protocollo non include la protezione contro lo sniffing perché può essere intrappolato.
FTP (File Transfer Protocol)
FTP viene utilizzato per inviare e ricevere file, ma non offre alcuna funzionalità di sicurezza. Tutti i dati vengono inviati come testo in chiaro che può essere facilmente fiutato.
IMAP (Internet Message Access Protocol)
IMAP è uguale a SMTP nelle sue funzioni, ma è altamente vulnerabile allo sniffing.
Telnet
Telnet invia tutto (nomi utente, password, sequenze di tasti) sulla rete come testo in chiaro e, quindi, può essere facilmente intercettato.
Gli sniffer non sono utilità stupide che ti consentono di visualizzare solo il traffico in tempo reale. Se vuoi davvero analizzare ogni pacchetto, salva l'acquisizione e rivedila ogni volta che il tempo lo consente.
Implementazione tramite Python
Prima di implementare lo sniffer di socket raw, comprendiamo il struct metodo come descritto di seguito -
struct.pack (fmt, a1, a2, ...)
Come suggerisce il nome, questo metodo viene utilizzato per restituire la stringa, che viene compressa in base al formato specificato. La stringa contiene i valori a1, a2 e così via.
struct.unpack (fmt, string)
Come suggerisce il nome, questo metodo decomprime la stringa in base a un determinato formato.
Nel seguente esempio di intestazione IP raw socket sniffer, che è i prossimi 20 byte nel pacchetto e tra questi 20 byte siamo interessati agli ultimi 8 byte. Gli ultimi byte mostrano se l'indirizzo IP di origine e quello di destinazione stanno analizzando -
Ora, dobbiamo importare alcuni moduli di base come segue:
import socket
import struct
import binascii
Ora creeremo un socket, che avrà tre parametri. Il primo parametro ci parla dell'interfaccia del pacchetto: PF_PACKET per Linux specifico e AF_INET per Windows; il secondo parametro ci dice che si tratta di un socket grezzo e il terzo parametro ci dice il protocollo che ci interessa —0x0800 utilizzato per il protocollo IP.
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket. htons(0x0800))
Ora dobbiamo chiamare il file recvfrom() metodo per ricevere il pacchetto.
while True:
packet = s.recvfrom(2048)
Nella seguente riga di codice, stiamo copiando l'intestazione Ethernet -
ethernet_header = packet[0][0:14]
Con la seguente riga di codice, stiamo analizzando e decomprimendo l'intestazione con l'estensione struct metodo -
eth_header = struct.unpack("!6s6s2s", ethernet_header)
La seguente riga di codice restituirà una tupla con tre valori esadecimali, convertiti da hexify nel binascii modulo -
print "Destination MAC:" + binascii.hexlify(eth_header[0]) + " Source MAC:" + binascii.hexlify(eth_header[1]) + " Type:" + binascii.hexlify(eth_header[2])
Ora possiamo ottenere l'intestazione IP eseguendo la seguente riga di codice:
ipheader = pkt[0][14:34]
ip_header = struct.unpack("!12s4s4s", ipheader)
print "Source IP:" + socket.inet_ntoa(ip_header[1]) + " Destination IP:" + socket.inet_ntoa(ip_header[2])
Allo stesso modo, possiamo anche analizzare l'intestazione TCP.