Computer finestre Internet

Tcpdump come fermarsi dopo un dato tempo. Tcpdump è una guida utile con esempi. Visualizzazione dei pacchetti acquisiti in formato HEX e ASCII utilizzando tcpdump -xx

Se è necessario analizzare o intercettare i pacchetti di rete in Linux, è meglio utilizzare l'utilità della console per questo. tcpdump. Ma il problema sorge nella sua gestione piuttosto complicata. A un utente normale sembrerà scomodo lavorare con l'utilità, ma questo è solo a prima vista. L'articolo spiegherà come funziona tcpdump, quale sintassi ha, come usarlo e fornirà anche numerosi esempi del suo utilizzo.

Leggi anche: Guide per configurare una connessione Internet in Ubuntu, Debian, Ubuntu Server

La maggior parte degli sviluppatori di sistemi operativi basati su Linux include l'utilità tcpdump nell'elenco di quelli preinstallati, ma se per qualche motivo non è nella tua distribuzione, puoi sempre scaricarla e installarla tramite "Terminale". Se il tuo sistema operativo è basato su Debian e questi sono Ubuntu, Linux Mint, Kali Linux e simili, devi eseguire questo comando:

sudo apt install tcpdump

Durante l'installazione è necessario inserire una password. Si noti che quando si digita non viene visualizzato, è necessario inserire anche un simbolo per confermare l'installazione "D" e premere accedere.

Se hai Red Hat, Fedora o CentOS, il comando di installazione sarà simile al seguente:

sudo yam install tcpdump

Dopo aver installato l'utilità, è possibile utilizzarla immediatamente. Questa e molte altre cose saranno discusse più avanti nel testo.

Sintassi

Come ogni altro comando, tcpdump ha una propria sintassi. Conoscendolo, puoi impostare tutti i parametri necessari che verranno presi in considerazione durante l'esecuzione del comando. La sintassi è la seguente:

opzioni di tcpdump -i filtri di interfaccia

Quando si utilizza il comando, è necessario specificare l'interfaccia di cui tenere traccia. I filtri e le opzioni non sono variabili obbligatorie, ma consentono una maggiore personalizzazione.

Opzioni

Sebbene l'opzione non debba essere specificata, è comunque necessario elencare quelle disponibili. La tabella non mostra l'intero elenco, ma solo quelli più popolari, ma sono più che sufficienti per risolvere la maggior parte dei compiti.

Opzione Definizione
-UN Consente di ordinare i pacchetti in formato ASCII
-l Aggiunge funzionalità di scorrimento
-io Dopo l'accesso, è necessario specificare l'interfaccia di rete che verrà monitorata. Per iniziare a monitorare tutte le interfacce, inserisci la parola "qualsiasi" dopo l'opzione
-c Termina il processo di tracciamento dopo aver verificato il numero di pacchetti specificato
-w Genera un file di testo con un rapporto di verifica
-e Mostra il livello di connessione Internet del pacchetto dati
-L Visualizza solo i protocolli supportati dall'interfaccia di rete specificata
-C Crea un altro file durante l'acquisizione del pacchetto se la sua dimensione è maggiore di quella indicata
-r Apre un file per la lettura che è stato creato con l'opzione -w
-j Il formato TimeStamp verrà utilizzato per scrivere i pacchetti
-J Consente di visualizzare tutti i formati TimeStamp disponibili
-G Serve per creare un file con i log. L'opzione richiede anche un valore temporaneo, dopo il quale verrà creato un nuovo registro.
-v, -vv, -vvv A seconda del numero di caratteri nell'opzione, l'output del comando diventerà più dettagliato (l'aumento è direttamente proporzionale al numero di caratteri)
-f Mostra il nome di dominio degli indirizzi IP nell'output
-F Consente di leggere le informazioni non dall'interfaccia di rete, ma dal file specificato
-D Mostra tutte le interfacce di rete che possono essere utilizzate
-n Disattiva la visualizzazione dei nomi di dominio
-Z Specifica l'utente con il cui account verranno creati tutti i file
-K Saltare l'analisi del checksum
-q Breve dimostrazione informativa
-H Consente il rilevamento delle intestazioni 802.11s
-IO Utilizzato durante l'acquisizione di pacchetti in modalità monitor

Dopo aver analizzato le opzioni, un po' più in basso andremo direttamente alle loro applicazioni. Nel frattempo, verranno presi in considerazione i filtri.

Filtri

Come accennato all'inizio dell'articolo, puoi aggiungere filtri alla sintassi tcpdump. Ora il più popolare sarà considerato:

Tutti i filtri di cui sopra possono essere combinati tra loro, quindi nell'emissione di un comando vedrai solo le informazioni che vuoi vedere. Per comprendere l'uso dei filtri di cui sopra in modo più dettagliato, vale la pena fornire esempi.

Esempi di utilizzo

Ora verrà fornita la sintassi comunemente usata del comando tcpdump. È impossibile elencarli tutti, poiché le loro variazioni possono essere infinite.

Visualizzazione dell'elenco delle interfacce

Si raccomanda che ogni utente controlli inizialmente l'elenco di tutte le sue interfacce di rete che possono essere tracciate. Dalla tabella sopra, sappiamo che per questo dobbiamo usare l'opzione -D, quindi nel terminale esegui il seguente comando:

Come puoi vedere, ci sono otto interfacce nell'esempio, che possono essere visualizzate usando il comando tcpdump. L'articolo fornirà esempi di ppp0, puoi usarne un altro.

Normale acquisizione del traffico

Se hai bisogno di tracciare un'interfaccia di rete, puoi farlo usando l'opzione -io. Non dimenticare di specificare il nome dell'interfaccia dopo averlo inserito. Ecco un esempio di tale comando:

sudo tcpdump -i ppp0

Nota: prima del comando stesso, devi inserire "sudo", poiché richiede i diritti di superutente.

Nota: dopo aver premuto Invio, il "Terminale" visualizzerà continuamente i pacchetti catturati. Per interrompere il loro flusso, devi premere la combinazione di tasti Ctrl + C.

Se esegui il comando senza opzioni e filtri aggiuntivi, vedrai il seguente formato per la visualizzazione dei pacchetti tracciati:

22:18:52.597573 IP vrrp-topf2.p.mail.ru.https > 10.0.6.67.35482 : Flags , seq 1:595, ack 1118, win 6494, opzioni , lunghezza 594

Dove è evidenziato:

  • blu - l'ora in cui è stato ricevuto il pacco;
  • verde - indirizzo del mittente;
  • viola - indirizzo del destinatario;
  • grigio - informazioni aggiuntive su TCP;
  • rosso - dimensione del pacchetto (visualizzata in byte).

Questa sintassi ha la capacità di essere visualizzata in una finestra "Terminale" senza opzioni aggiuntive.

Catturare il traffico con l'opzione -v

Come è noto dalla tabella, l'opzione -v consente di aumentare la quantità di informazioni. Facciamo un esempio. Controlliamo la stessa interfaccia:

sudo tcpdump -v -i ppp0

Qui puoi notare che nell'output è apparsa la seguente riga:

IP (tos 0x0, ttl 58, id 30675, offset 0, flag, proto TCP (6), lunghezza 52

Dove è evidenziato:

  • arancione - versione del protocollo;
  • blu - durata del protocollo;
  • verde - lunghezza dell'intestazione del campo;
  • viola - versione del pacchetto TCP;
  • rosso - dimensione del pacchetto.

Puoi anche aggiungere un'opzione alla sintassi del comando -vv o -vvv, che aumenterà ulteriormente la quantità di informazioni visualizzate sullo schermo.

Opzione -w e -r

La tabella delle opzioni menzionava la possibilità di salvare tutti i dati di output in un file separato in modo che possano essere visualizzati in seguito. Questa è l'opzione -w. Usarlo è abbastanza semplice, basta specificarlo nel comando, quindi inserire il nome del file futuro con l'estensione ".pcap". Diamo un'occhiata a un esempio:

sudo tcpdump -i ppp0 -w file.pcap

Nota: durante la scrittura di log in un file, nella schermata "Terminale" non viene visualizzato alcun testo.

Quando si desidera visualizzare l'output registrato, è necessario utilizzare l'opzione -r, dopodiché scrivere il nome del file precedentemente registrato. Viene applicato senza altre opzioni e filtri:

sudo tcpdump -r file.pcap

Entrambe queste opzioni sono ottime quando è necessario archiviare grandi quantità di testo per un'analisi successiva.

Filtraggio per IP

Dalla tabella dei filtri, lo sappiamo dst consente di visualizzare sullo schermo della console solo i pacchetti ricevuti dall'indirizzo specificato nella sintassi del comando. Pertanto, è molto comodo visualizzare i pacchetti ricevuti dal computer. Per fare ciò, nel comando devi solo specificare il tuo indirizzo IP:

sudo tcpdump -i ppp0 ip dst 10.0.6.67

Come puoi vedere, oltre a dst, nel comando abbiamo registrato anche il filtro ip. In altre parole, abbiamo detto al computer di prestare attenzione al proprio indirizzo IP durante la selezione dei pacchetti e non ad altri parametri.

Puoi anche filtrare i pacchetti in uscita per IP. Prendiamo il nostro IP come esempio. Cioè, ora tracceremo quali pacchetti vengono inviati dal nostro computer ad altri indirizzi. Per fare ciò, esegui il seguente comando:

sudo tcpdump -i ppp0 ip src 10.0.6.67

Come puoi vedere, nella sintassi del comando abbiamo modificato il filtro dst sul src, dicendo così alla macchina di cercare il mittente tramite IP.

Filtraggio per HOST

Per analogia con IP nel comando, possiamo specificare un filtro ospite per eliminare i pacchetti con l'host di interesse. Cioè, nella sintassi, invece dell'indirizzo IP del mittente/destinatario, dovrai specificare il suo host. Si presenta così:

sudo tcpdump -i ppp0 host dst google-public-dns-a.google.com

Nell'immagine, puoi vederlo in "Terminale" vengono visualizzati solo quei pacchetti che sono stati inviati dal nostro IP all'host google.com. Come puoi capire, al posto dell'host google, puoi inserirne un altro.

Come nel caso del filtraggio per IP, nella sintassi dst può essere sostituito da src per vedere i pacchetti che vengono inviati al tuo computer:

sudo tcpdump -i ppp0 src host google-public-dns-a.google.com

Nota: il filtro host deve venire dopo dst o src, altrimenti il ​​comando darà un errore. Nel caso di filtraggio per IP, al contrario, dst e src precedono il filtro ip.

Applicazione del filtro e e o

Se è necessario utilizzare più filtri contemporaneamente in un comando, per questo è necessario utilizzare il filtro e o o(a seconda del caso). Specificando i filtri nella sintassi e separandoli con questi operatori, li "fai funzionare" come uno. Ad esempio, si presenta così:

sudo tcpdump -i ppp0 ip dst 95.47.144.254 o ip src 95.47.144.254

Dalla sintassi del comando, è chiaro che vogliamo visualizzare "Terminale" tutti i pacchetti che sono stati inviati all'indirizzo 95.47.144.254 e i pacchetti ricevuti dallo stesso indirizzo. Puoi anche modificare alcune delle variabili in questa espressione. Ad esempio, invece di IP, specifica HOST o sostituisci direttamente gli indirizzi stessi.

Filtro porta e portrange

Filtro porta ottimo nei casi in cui è necessario ottenere informazioni sui pacchetti con una porta specifica. Quindi, se vuoi solo vedere le risposte o le query DNS, devi specificare la porta 53:

sudo tcpdump -vv -i ppp0 porta 53

Se vuoi visualizzare i pacchetti http, devi inserire la porta 80:

sudo tcpdump -vv -i ppp0 porta 80

Tra le altre cose, è possibile tracciare una serie di porte contemporaneamente. Per questo, viene utilizzato un filtro. intervallo di porte:

sudo tcpdump portrange 50-80

Come puoi vedere, in combinazione con il filtro intervallo di porte non è necessario specificare opzioni aggiuntive. Devi solo impostare l'intervallo.

Filtraggio del protocollo

Puoi anche visualizzare solo il traffico che corrisponde a un particolare protocollo. Per fare ciò, usa il nome di questo stesso protocollo come filtro. Diamo un'occhiata a un esempio upp:

sudo tcpdump -vvv -i ppp0 udp

Come puoi vedere nell'immagine, dopo aver eseguito il comando in "Terminale" sono stati visualizzati solo i pacchetti con il protocollo upp. Di conseguenza, puoi filtrare in base ad altri, ad esempio, arp:

sudo tcpdump -vvv -i ppp0 arp

o TCP:

sudo tcpdump -vvv -i ppp0 tcp

filtro a rete

Operatore rete aiuta a filtrare i pacchetti in base alla loro designazione di rete. Usarlo è semplice come il resto: è necessario specificare l'attributo nella sintassi rete, quindi inserire l'indirizzo di rete. Ecco un esempio di tale comando:

sudo tcpdump -i ppp0 net 192.168.1.1

Filtraggio delle dimensioni del pacchetto

Non abbiamo coperto altri due filtri interessanti: meno e maggiore. Dalla tabella con i filtri, sappiamo che servono a visualizzare pacchetti di dati più grandi ( meno) o meno ( maggiore) della dimensione specificata dopo l'inserimento dell'attributo.

Diciamo che vogliamo monitorare solo i pacchetti che non superano il segno di 50 bit, quindi il comando sarà simile al seguente:

sudo tcpdump -i ppp0 meno 50

Ora mostriamoci dentro "Terminale" pacchetti più grandi di 50 bit:

sudo tcpdump -i ppp0 maggiore di 50

Come puoi vedere, vengono applicati allo stesso modo, l'unica differenza è nel nome del filtro.

Conclusione

Alla fine dell'articolo, si può concludere che il comando tcpdumpè un ottimo strumento con cui puoi tracciare qualsiasi pacchetto di dati trasmesso su Internet. Ma per questo non basta inserire il comando stesso "Terminale". Puoi ottenere il risultato desiderato solo se utilizzi tutti i tipi di opzioni e filtri, nonché le loro combinazioni.

Per i sistemi UNIX, ci sono molti diversi sniffer e analizzatori di traffico con una comoda interfaccia grafica e un ricco set di funzioni. Ma nessuno di loro può essere paragonato in flessibilità, versatilità e prevalenza al vecchio tcpdump. Questa utility è inclusa con molte distribuzioni Linux e tutti i sistemi BSD pronti all'uso e può aiutarti quando altri strumenti non sono disponibili.

introduzione

L'utilità tcpdump è uno sniffer di pacchetti di rete a riga di comando che non ha né un'interfaccia grafica né pseudografica. Per i principianti può sembrare goffo e troppo antiquato, ma in mani abili si trasforma in un vero coltellino svizzero per aprire qualsiasi pacchetto e protocollo di rete. Gli amministratori di sistema esperti raccomandano sempre che i principianti utilizzino tcpdump invece di qualsiasi altra utilità a causa della chiarezza e della semplicità dei suoi rapporti.

Tcpdump è nato quasi 25 anni fa all'Università di Berkeley, è ancora attivamente sviluppato e continua ad essere lo standard tra strumenti simili per il sistema operativo UNIX. La libreria di acquisizione dei pacchetti libpcap sviluppata appositamente per esso è ora utilizzata da quasi tutti gli sniffer per i sistemi UNIX e molti programmi simili per Windows.

In questo articolo, tratteremo tutti gli aspetti dell'utilizzo di tcpdump, dalle basi dell'utilizzo del programma a come utilizzare l'utilità per rilevare attacchi di rete, anomalie e vari tipi di errori.

Solo con la console

Proviamo a capire come funziona tcpdump e da quale parte dovrebbe essere affrontato. Aprire un terminale ed eseguire il programma come root (come qualsiasi sniffer, tcpdump deve avere pieno accesso alle interfacce di rete), specificando il nome dell'interfaccia di rete e limitando a dieci il numero di pacchetti di output:

# tcpdump -i wlan0 -c 10 -n

L'opzione -n ​​disabilita la traduzione degli indirizzi IP in nomi DNS. Ora proviamo a tracciare lo scambio solo con un host specifico, ad esempio con un router di casa:

# tcpdump -i wlan0 -c 10 -n host 192.168.0.1 e porta 53

Vediamo cosa ci ha prodotto tcpdump, usando le due righe mostrate nello screenshot "Query DNS attraverso gli occhi di tcpdump" come esempio. Si può facilmente capire che si tratta di una richiesta DNS (porta 53) dall'host 192.168.0.101 all'host 192.168.0.1 e la successiva risposta. Ma cosa significano tutti gli altri numeri e segni?


I numeri 16:22:41.340105 sono l'ora di invio del pacchetto, inclusi i milionesimi di secondo (il cosiddetto frac). Le due lettere IP, come si può intuire, identificano il protocollo di livello di rete utilizzato, seguito dall'indirizzo: la porta di invio e l'indirizzo: la porta di destinazione del pacchetto. Tutto ciò che viene dopo i due punti dipende direttamente dal protocollo del livello di trasporto o applicazione utilizzato. tcpdump ha familiarità con alcuni protocolli e può decrittografarli in un formato leggibile dall'uomo, lascia gli altri così come sono ed elenca semplicemente il contenuto del pacchetto. In questo caso, tcpdump ha decodificato i messaggi DNS e ha restituito la stringa 49244+ A? ya.ru. (23) , che significa: una richiesta (A?) è stata inviata all'indirizzo associato al nome ya.ru., la lunghezza totale del pacchetto meno le intestazioni TCP/IP era di 23 byte. La prima cifra è l'ID della richiesta.

Nella riga successiva, vediamo la risposta, il cui formato di presentazione è quasi identico alla richiesta, con l'unica differenza che ora dopo l'identificatore della richiesta ci sono informazioni sul numero di record trovati (8/2/3) e i record stessi (A 213.180.204.3, A 77.88.21.3 , A 87.250.250.3...).

L'arsenale di tcpdump ha il supporto per molti protocolli, grazie ai quali può presentare in forma leggibile informazioni sui protocolli TCP, UDP e ICMP, SMB/CIFS, NFS, AFS, AppleTalk. Ma cosa succede se tcpdump non sa nulla del protocollo del livello dell'applicazione utilizzato o non riesce a determinarlo? In una situazione normale, genererà semplicemente informazioni sul pacchetto. Potrebbe assomigliare a questo:

Flags [.], seq 3666073194:3666074622, ack 3281095139, vincita 2000, opzioni , lunghezza 1428

Questo è un pacchetto TCP, il formato delle informazioni su cui sono presentate in tcpdump è il seguente (i campi sono separati da virgole):

  • flags - imposta i flag. Denotato dai simboli S (SYN), F (FIN), P (PUSH) e R (RST), un punto significa nessun flag impostato;
  • data-seqno - descrive i dati contenuti nel pacchetto nel seguente formato: first:last, dove first e last sono il numero di sequenza del primo e dell'ultimo byte dei dati trasmessi, nbytes;
  • ack - numero di sequenza successivo (ISN + 1);
  • finestra - dimensione della finestra;
  • opzioni: qui è possibile specificare ulteriori informazioni, ad esempio (dimensione massima del segmento);
  • lunghezza - la lunghezza del pacchetto.

Tutti questi dati possono essere molto utili durante lo studio o il debug di protocolli e applicazioni di rete, ma non ci dicono nulla del loro contenuto. Per vedere il contenuto del pacchetto in formato esadecimale, usa il flag -X:

# tcpdump -i wlan0 -c 10 -n -X host 192.168.0.1 e porta 80

Questa funzione è molto utile per analizzare i protocolli in cui i dati vengono trasmessi in chiaro, come HTTP. Per i protocolli binari e i protocolli con crittografia, ovviamente, sarà inutile.
Puoi anche usare il flag -v per ottenere maggiori informazioni su un pacchetto. Quindi, dopo l'IP tra parentesi, appariranno informazioni dettagliate sul pacchetto IP:

(tos 0x0, ttl 64, id 8339, offset 0, flags, proto UDP (17), lunghezza 51)

In generale, tutto qui è abbastanza prosaico. Innanzitutto viene il tipo di servizio (TOS), seguito dal tempo di permanenza del pacchetto (TTL), l'identificatore del pacchetto, l'offset dall'inizio del primo pacchetto della catena, i flag, il protocollo del livello di trasporto utilizzato (TCP, UDP, ICMP) e la lunghezza .


Funzionalità avanzate

Abbiamo già trattato la maggior parte delle caratteristiche più importanti di tcpdump, ma la sua funzionalità è molto più ampia. Ad esempio, abbiamo utilizzato le istruzioni host e port per specificare l'indirizzo e la porta di cui vogliamo filtrare l'output, ma cosa succede se vogliamo solo vedere i pacchetti andare all'indirizzo specificato, ma non in uscita da esso? Puoi usare l'operatore src per questo:

# tcpdump -i wlan0 -c 10 -n src 192.168.0.1

Esiste anche la sua versione inversa dst, progettata per indicare l'indirizzo di destinazione. Come mostrato sopra, tutti gli operatori possono essere combinati utilizzando l'operatore e (monitorando il traffico di rete, escluse le sessioni SSH e le richieste DNS):

# tcpdump -i wlan0 porta non 22 e porta non 53

Puoi anche usare o (o) ed eccetto (non). Inoltre, tcpdump comprende gli intervalli di porte:

# tcpdump -i wlan0 -c 10 -n portrange 21-23

In grado di filtrare i pacchetti in base alla loro dimensione:

# tcpdump -i wlan0 -c 10 -n > 32 e<= 128

E comprende le subnet mask:

# tcpdump -i wlan0 c 10 -n src net 192.168.0.0/16 e dst net 10.0.0.0/8 o 172.16.0.0/16

Una delle caratteristiche più interessanti di tcpdump è la capacità di filtrare i pacchetti in base al contenuto di bit o byte specifici nelle intestazioni del protocollo. Per questo viene utilizzato il seguente formato: proto, dove proto è il protocollo, expr è l'offset in byte dall'inizio dell'intestazione del pacchetto e size è un campo opzionale che indica la lunghezza dei dati in questione (il valore predefinito è 1 byte ). Ad esempio, per filtrare solo i pacchetti con il flag SYN (avvio dell'handshake TCP), utilizzare la voce seguente:

# tcpdump "tcp==2"

Come funziona? Molto semplice. I 13 byte dell'intestazione TCP contengono esattamente otto flag, un bit ciascuno. Il secondo bit è riservato al flag SYN. La voce precedente controlla semplicemente se questo bit è impostato. A proposito, una forma più leggibile di questa voce sarebbe simile a questa:

# tcpdump "tcp & tcp-syn != 0"

Uso pratico

L'utilità tcpdump viene comunemente utilizzata per due scopi: per eseguire il debug della rete, delle applicazioni di rete e dei nuovi protocolli e per insegnarvi le basi del TCP/IP. Andremo dall'altra parte e utilizzeremo la potenza di tcpdump per rilevare scansioni host e attacchi di rete.

Sulla fig. La Figura 1 mostra come appare una classica scansione delle porte TCP eseguita da Nmap nei log di tcpdump. Puoi vedere chiaramente come Nmap dall'indirizzo 192.168.0.100 tenta di stabilire una connessione TCP con porte diverse inviando un pacchetto SYN (S nel campo flags). In primo luogo, viene rilevata la porta 8888, viene inviato un pacchetto RST in risposta, il che significa che nessun servizio è in ascolto sulla porta, quindi viene rilevata la porta 587 con lo stesso risultato. Infine, Nmap invia un pacchetto SYN alla porta 22 (SSH) e riceve una risposta sotto forma di pacchetto SYN-ACK:

192.168.0.100.43337 > 192.168.0.111.22: Flags[S], seq 2610024277, ... 43337 > 192.168.0.111.22: Flags [.], ack 1, ...

La porta è aperta e ora Nmap può chiudere con successo la connessione inviando un pacchetto RST e passare alle porte successive. Tuttavia, fa qualcosa di più intelligente: invia una conferma di ricezione del pacchetto ACK e passa immediatamente alle porte successive. Questo comportamento ti consente di aggirare alcuni sistemi di rilevamento delle intrusioni, ma non puoi facilmente ingannare una persona armata di sniffer.

Prestare attenzione anche al numero di porte da smistare, non vengono generate casualmente, ma vengono selezionate tenendo conto della maggiore prevalenza. Ciò significa che è in corso una scansione veloce, o più specificamente, Nmap è molto probabilmente in esecuzione senza alcun flag.



Ora diamo un'occhiata a un altro metodo per rilevare le porte aperte: la scansione SYN (nmap -sS). Questo tipo di scansione è solitamente chiamato nascosto, perché durante esso non viene mai stabilita una connessione TCP completa, il che significa che le informazioni sul fatto della connessione non sono incluse nei registri. L'output di tcpdump per questo tipo di scansione è mostrato nella Figura 1. 2. È molto simile al registro di una normale scansione TCP, ma la risposta dello scanner all'apertura delle porte è ora diversa:

192.168.0.100.48585 > 192.168.0.111.22: Flags[S], seq 1679394613, ... 48585 > 192.168.0.111.22: Flags[R], seq 1679394614, ...

Si può notare che dopo aver ricevuto il pacchetto di approvazione SYN-ACK, lo scanner non completa la connessione, ma la interrompe immediatamente, evitando di entrare nei log. Sulla fig. 3 puoi vedere il risultato della scansione UDP. Qui tutto è molto semplice, Nmap enumera le porte con possibili servizi UDP, inviando un pacchetto di lunghezza zero a ciascuna di esse. Se la porta è chiusa, il sistema operativo restituisce un messaggio ICMP irraggiungibile:

16:41:48.798310 IP 192.168.0.100.61020 > 192.168.0.111.18869: UDP, lunghezza 0

In caso contrario, la porta è considerata aperta. Un altro metodo di scansione è la scansione nulla mediante l'invio di pacchetti senza flag impostati (nmap -sN). La reazione a tali pacchetti può variare a seconda del sistema operativo, ma come puoi vedere dal seguente elenco, Linux risponde inviando pacchetti RST:

192.168.0.100.39132 > 192.168.0.111.256: Bandiere , vincita 3072, lunghezza 0 192.168.0.111.256 > 192.168.0.100.39132: Bandiere , ...

Un utente malintenzionato può anche utilizzare la scansione di Natale, in cui i pacchetti hanno i flag FIN, URG e PUSH impostati (il pacchetto sembra brillare di bandiere come un albero di Natale):

192.168.0.100.35331 > 192.168.0.111.5544: Flags, seq 3998959601, win 4096, urg 0, lunghezza 0

Come puoi vedere, la reazione a tali pacchetti è identica. Una scansione ACK (-sA) apparirà nei registri di tcpdump mentre invia più pacchetti con il flag ACK impostato e risponde ad essi inviando pacchetti RST. Tuttavia, se sul sistema è installato un firewall, non ci saranno messaggi di risposta e Nmap sarà in grado di capire se la porta viene filtrata.

Con l'aiuto di tcpdump, puoi anche rintracciare vari tipi di inondazioni. Ad esempio, un classico flood ICMP nei log sarà simile a questo:

16:43:06.008305 IP 192.168.0.100 > 192.168.0.111: tipo ICMP-#68, lunghezza 1032 192.168.0.100 > 192.168.0.111: tipo ICMP-#183, lunghezza 1032 16:43:06.008831

Di particolare importanza qui è il campo contenente l'ora in cui è stato ricevuto il pacchetto. Nessuna normale applicazione invierà molti messaggi ICMP in un periodo di tempo pari a un millesimo di secondo. Altri tipi di flood (ad es. SYN) sono definiti esattamente allo stesso modo.

Interazione con altri programmi

Uno dei vantaggi più importanti di tcpdump è che il formato dei suoi report durante l'esistenza del programma è diventato effettivamente lo standard per tutti gli sniffer e oggi è compreso da tutti gli strumenti di analisi del traffico più o meno seri. Ad esempio, tcpdump può essere utilizzato per generare un dump su una macchina remota, quindi inviarlo alla macchina locale e analizzarlo con wireshark:

$ ssh [email protetta] tcpdump -w - "porta !22" | wireshark -k -i -

Qui abbiamo usato l'opzione -w - per scrivere il dump su stdout e reindirizzarlo a wireshark in esecuzione sul computer locale. Allo stesso modo, puoi analizzare il traffico utilizzando snort:

$ ssh [email protetta]"tcpdump -nn -i eth1 -w -" | snort -c /etc/snort/snort.conf -r -

Reindirizzando l'output del programma all'input di grep, è possibile riscontrare vari problemi nella rete, ad esempio identificare i pacchetti con un checksum errato, che possono essere visualizzati utilizzando il flag -vv:

# tcpdump -nnvv -r dump.cap tcp | grep -v "somma TCP ok" | wc-l

Roba da amministrazione

La capacità di filtrare i pacchetti in base ai dati di intestazione, di cui abbiamo discusso all'inizio della prima sezione, è molto utile per eseguire il debug di vari protocolli e trovare problemi di rete. Ad esempio, possiamo usarlo per catturare i pacchetti di rete trasmessi tramite il Cisco Discovery Protocol, attraverso il quale i router Cisco scambiano informazioni sulla topologia e sullo stato della rete:

# tcpdump -nn -v -i eth0 -s 1500 -c 1 "etere == 0?2000"

Allo stesso modo puoi catturare tutti i pacchetti trasmessi tramite il protocollo DHCP (DISCOVER, REQUEST, INFORM) per identificare i problemi di connessione del client:

# tcpdump -i eth0 -vvv -s 1500 "((porta 67 o porta 68) e (udp = 0x1))"

Oppure cattura i pacchetti inviati come parte dell'autenticazione POP3:

# tcpdump -i eth0 "porta TCP pop3 e ip = 85 e ip = 83" -s 1500 -n

grep di rete

Lo sniffer tcpdump è buono per la sua versatilità e varietà di capacità, ma non è così facile e conveniente usarlo per cercare dati specifici all'interno dei pacchetti trasmessi. Questa attività è gestita molto meglio da ngrep, che è progettato per visualizzare i pacchetti di rete che passano che corrispondono a una determinata maschera.

Ad esempio, per trovare i parametri passati dai metodi GET e POST all'interno di una sessione HTTP, è possibile utilizzare il comando seguente:

# ngrep -l -q -d eth0 "^GET |^POST " tcp e porta 80

Trovare i fannulloni:

# ngrep -i "gioco*|p0rn|adulto" -W byline -d eth0 > slackers.txt

Analizziamo il traffico SMTP su tutte le interfacce di rete:

# ngrep -i "rcpt to|mail from" tcp port smtp

opzioni tcpdump

Una tabella dei flag di tcpdump più interessanti e utili.

  • -i [interfaccia] - l'interfaccia di rete su cui ascoltare, specificare qualsiasi per tutti.
  • -n Non risolve gli indirizzi IP in nomi DNS.
  • -nn Non traduce indirizzi IP e numeri di porta.
  • -X - mostra il contenuto del pacchetto in formato testo ed esadecimale.
  • -XX - lo stesso più il contenuto del frame Ethernet.
  • -v, -vv, -vvv - aumenta la quantità di informazioni e pacchetti mostrati (più, più, tutto).
  • -c [n] Mostra solo i primi n pacchetti.
  • -s [n] - numero di byte visualizzati per ogni pacchetto (può essere ridotto per leggibilità o aumentato per ulteriori informazioni).
  • -S - mostra i numeri di sequenza TCP assoluti.
  • -e - mostra le intestazioni dei frame Ethernet.
  • -q - mostra meno informazioni (per leggibilità).
  • -E - decrittografa il traffico IPsec utilizzando la chiave specificata.
  • -w - salva il dump del programma su file, argomento - utilizzato per specificare stdout.

risultati

Nelle mani di un utente esperto, tcpdump si trasforma in un potente strumento non solo per il debug, ma anche per la ricerca di anomalie. Grazie a un ricco set di operatori e flag, puoi usarlo per uscire dall'aria della rete ed esplorare ciò di cui hai veramente bisogno.

Tcpdump è un analizzatore di rete estremamente utile che è molto utile sia per gli amministratori di rete che per gli addetti alla sicurezza. Naturalmente, per ottenere il massimo delle informazioni quando si lavora con tcpdump, è semplicemente necessario avere una conoscenza dello stack del protocollo TCP/IP. Per comodità si possono utilizzare programmi più comodi e intelligenti, ad esempio, ma spesso ci sono situazioni in cui non è possibile installare servizi aggiuntivi sulla macchina in prova, e quindi tcpdump è semplicemente insostituibile, l'amministratore, per amore del pacchetto analisi, non si sveglia, mette su un server unix X-Windows, soprattutto perché sulla maggior parte dei sistemi Unix, l'utilità tcpdump viene fornita per impostazione predefinita.

La comprensione del protocollo TCP/IP offre un ampio campo di applicazione per l'utilizzo dell'analizzatore e la risoluzione dei problemi e la risoluzione dei problemi della rete tramite l'analisi dei pacchetti. Poiché l'uso ottimale di questa utilità richiede una buona comprensione dei protocolli di rete e di come funzionano, è una situazione divertente in cui un ingegnere deve comunque conoscere e comprendere i meccanismi di comunicazione di rete. Compreso tcpdump è utile in ogni modo, dalla risoluzione dei problemi all'autoeducazione.

Di seguito sono elencate alcune opzioni che ti aiuteranno a utilizzare questa utility nel modo più completo e dettagliato, soprattutto perché tutte queste caselle e chiavi sono abbastanza facili da dimenticare e questi esempi sono molto utili per rinfrescare la memoria.

Il primo switch utilizzato è -n che proibisce i tentativi di convertire gli indirizzi in nomi di dominio, fornendoci così indirizzi IP puliti con porte.

Il secondo è -X che dice a ogni pacchetto di produrre sia il contenuto esadecimale (esadecimale) che ASCII del pacchetto.
E l'ultima opzione è -S che sostituisce l'output della numerazione TCP relativa con la numerazione assoluta. Il punto è che con la numerazione relativa, alcuni problemi potrebbero essere nascosti alla tua attenzione.

È necessario comprendere che il vantaggio principale di tcpdump rispetto ad altre utilità è che consente un'analisi dettagliata e manuale dei pacchetti. È inoltre necessario ricordare che per impostazione predefinita tcpdump utilizza solo i primi 68 byte del pacchetto, incl. se hai bisogno di vedere di più, dovresti usare l'opzione -s number, dove numero è il numero di byte da acquisire. Se il numero è impostato su 0 , si verificherà un'acquisizione completa del pacchetto, quindi è meglio utilizzare il valore 1514, che fornirà un'acquisizione completa di un pacchetto Ethernet standard.

Elenco delle chiavi più utilizzate:
-c: imposta per controllare la dimensione del file di acquisizione prima di ogni registrazione successiva del pacchetto catturato, se la dimensione è maggiore, il file viene salvato e la registrazione passa a un nuovo file
-e : stampa l'intestazione ethernet (livello di collegamento) su ciascuna riga di dump
-i any: ascolta su tutte le interfacce, nel caso ti serva tutto il traffico.
-n: disabilita la traduzione degli indirizzi in nomi di dominio o simboli
-nn: disabilita la traduzione di indirizzi e porte in nomi di dominio o simboli
-q: stampa brevemente le informazioni, a costo di ridurre l'output delle informazioni sul protocollo.
-X: emette sia i contenuti esadecimali che ASCII del pacchetto
-v, -vv, -vvv: specifica informazioni aggiuntive sui pacchetti acquisiti da emettere, consentendo un'analisi più ampia.
Alcuni esempi da utilizzare:

# Uscita pacchetto standard
tcpdump -nS
# Uscita standard estesa
tcpdump -nnvvS
# Analisi approfondita dei pacchetti
tcpdump -nnvvXS
# Informazioni sul traffico più dettagliate
tcpdump -nnvvXSs 1514

Le espressioni consentono di eseguire scansioni più mirate e definire i tipi di traffico. La capacità di utilizzare le espressioni rende tcpdump uno strumento molto produttivo nelle mani di un amministratore di sistema. Esistono tre tipi principali di espressioni: type, dir e proto.
Le opzioni dell'espressione di tipo sono host, net e port.
Per esprimere la direzione data da dir, sono disponibili le opzioni src, dst, src o dst e src e dst.
Alcune espressioni standard:

host // analizza il traffico in base all'indirizzo IP (funziona anche con nomi simbolici se -n non è impostato)
host tcpdump 1.2.3.4

src, dst // analizza il traffico solo per una destinazione o un trasmettitore specifico
tcpdump src 2.3.4.5
tcpdump dst 3.4.5.6

net // cattura il traffico appartenente a una rete specifica
tcpdump net 1.2.3.0/24

proto // funziona con tcp, udp e icmp. Va ricordato che il proto non è menzionato
tcpdump icmp

port // analizza il traffico da una porta specifica (in entrata o in uscita)
tcpdump porta 3389

src, dst port // filtro basato sulla porta in entrata o in uscita
tcpdump src porta 1025
tcpdump dst porta 3389

Ma lo strumento più potente sono gli operandi, che consentono di impostare condizioni per espressioni e opzioni per un isolamento più dettagliato delle informazioni sul traffico analizzato.

E
e o &&
O
o o ||
TRANNE
non o!

Traffico TCP dalla risorsa 10.15.123.33 con la porta di destinazione 3379:

# tcpdump -nnvvS tcp e src 10.15.123.33 e porta dst 3379

Traffico proveniente dalla rete 192.168 con destinazione sulle reti 10 o 172.16:

# tcpdump -nvX src net 192.168.0.0/16 e dst net 10.0.0.0/8 o 172.16.0.0/16

Traffico non ICMP con destinazione 192.168.0.2 e da rete 172.16:

# tcpdump -nvvXSs 1514 dst 192.168.0.2 e src net 172.16.0.0/16 e non icmp

Traffico dagli host Eros o Ares , ma non diretto alla porta SSH standard (questa espressione richiede la risoluzione dei nomi):

# tcpdump -vv src eros o ares e non dst port 22

Come puoi vedere dagli esempi sopra, possiamo costruire qualsiasi espressione, per qualsiasi scopo. Inoltre, utilizzando una sintassi complessa, possiamo escludere qualsiasi tipo di traffico dall'analisi.

Inoltre, tieni presente che possiamo creare query che includono gruppi e pool di opzioni forniti in una singola query. Ma affinché l'utilità tcpdump vi presti attenzione, devono essere inseriti tra parentesi, prendendo l'espressione tra virgolette singole:
Traffico proveniente dall'host 10.0.2.4 alle porte di destinazione 3379 o 22:
# tcpdump ‘src 10.0.2.4 e (dst port 3379 o 22)’

È anche possibile filtrare in base ai flag TCP, ad esempio per isolare i pacchetti SYN o RST:

Analizza tutti i pacchetti URG:
# tcpdump 'tcp & 32 != 0'

Analizza tutti i pacchetti ACK:
# tcpdump 'tcp & 16 != 0'

Analizza tutti i pacchetti PSH:
# tcpdump 'tcp & 8 != 0'

Analizza tutti i pacchetti RST:
# tcpdump 'tcp & 4 != 0'

Analizza tutti i pacchetti SYN:
# tcpdump 'tcp & 2 != 0'

Questo tutorial ti mostrerà come isolare il traffico in vari modi, dall'IP, alla porta, al protocollo, al traffico a livello di applicazione, per assicurarti di trovare esattamente ciò di cui hai bisogno il più rapidamente possibile.

tcpdump è lo strumento che tutti dovrebbero imparare come base per l'analisi dei pacchetti.

Installa tcpdump con apt install tcpdump (Ubuntu) o yum install tcpdump (Redhat/Centos)

Iniziamo con un comando di base che ci porterà il traffico HTTPS:

tcpdump -nn S X porta 443

04:45:40.573686 IP 78.149.209.110.27782 > 172.30.0.144 .443 : Flags [.], ack 278239097, win 28, opzioni , lunghezza 0 0x0000: 4500 0034 0014 0000 2e06 c005 4e8e d16e E..4.......N..n 0x0010: ac1e 0090 6c86 01bb 8e0a b73e 1095 9779 ....l......>...y 0x0020: 8010 001c d202 0000 0101 080a 3803 7b55 ............8.(U 0x0030: 4801 8100

Puoi ottenere un singolo pacchetto con -c 1 , o n numero con -c n .

Questo ha mostrato del traffico HTTPS, con un display esadecimale visibile sulla parte destra dell'output (ahimè, è crittografato). Ricorda solo: in caso di dubbio, esegui il comando sopra con la porta che ti interessa e dovresti essere sulla buona strada.

Esempi

PacketWizard™ non è un marchio registrato, ma dovrebbe esserlo.

un praticante che si prepara a eseguire tcpdump

Ora che sei in grado di ottenere il traffico di base, esaminiamo numerosi esempi di cui potresti aver bisogno durante il tuo lavoro nel networking, nella sicurezza o come qualsiasi tipo di PacketWizard™.

Tutto su un'interfaccia

Basta vedere cosa sta succedendo, guardando cosa sta colpendo la tua interfaccia.

O ottenere Tutto si interfaccia con -i any .

tcpdump -i eth0

Trova traffico per IP

Una delle query più comuni, utilizzando host , puoi vedere il traffico in entrata o in uscita da 1.1.1.1.

tipi di espressione:

host, rete e porta.

src e dst .

host, rete e porta.

tcp, udp, icmp e molti altri.

host tcpdump 1.1.1.1

06:20:25.593207 IP 172.30.0.144.39270 > uno.uno.uno.uno .dominio : 12790+ A? google.com. (28) 06:20:25.594510 IP one.one.one.one .domain > 172.30.0.144.39270: 12790 1/0/0 A 172.217.15.78 (44)

Se vuoi vedere solo il traffico in una direzione o nell'altra, puoi usare src e dst .

tcpdump src 1.1.1.1
tcpdump dst 1.0.0.1

Trovare pacchetti per rete

Per trovare i pacchetti diretti o provenienti da una particolare rete o sottorete, utilizzare l'opzione net.

Puoi combinarlo anche con le opzioni src e dst.

tcpdump net 1.2.3.0/24

Ottieni il contenuto del pacchetto con l'output esadecimale

L'output esadecimale è utile quando si desidera visualizzare il contenuto dei pacchetti in questione e spesso viene utilizzato al meglio quando si isolano alcuni candidati per un esame più attento.

tcpdump -c 1 -X icmp

Sommario

Ecco gli asporto.

  1. tcpdump è uno strumento prezioso per chiunque cerchi di entrare in rete o .
  2. Il modo grezzo con cui si interfaccia con il traffico, combinato con la precisione che offre nell'ispezione dei pacchetti, lo rendono il miglior strumento possibile per l'apprendimento del TCP/IP.
  3. Analizzatori di protocollo come Wireshark sono fantastici, ma se vuoi davvero padroneggiare packet-fu, devi prima diventare un tutt'uno con tcpdump.

Bene, questo primer dovrebbe farti andare forte, ma la pagina man dovrebbe essere sempre utile per gli scenari di utilizzo più avanzati e una tantum. Spero davvero che questo ti sia stato utile e non esitare a farlo in caso di domande.

Appunti

  1. Attualmente sto (più o meno) scrivendo un libro su tcpdump per No Starch Press.
  2. L'immagine principale è di SecurityWizardry.com.
  3. Alcuni dei filtri di isolamento presi in prestito

PERCHE' TCPDUMP?

Tcpdump è il principale strumento di analisi della rete per i professionisti della sicurezza delle informazioni. Per coloro che desiderano ottenere una comprensione completa di TCP / IP, è indispensabile avere una comprensione sufficiente di questa importante applicazione. Molti preferiscono utilizzare strumenti di livello superiore come Wireshark, ma penso che questo sia un errore.

Quando si utilizza uno strumento che visualizza il traffico di rete in modo più naturale (semplice), la complessità dell'analisi ricade direttamente sulla persona, non sull'applicazione. Questo approccio sviluppa una comprensione della suite TCP/IP, motivo per cui consiglio vivamente di utilizzare tcpdump invece di altri strumenti quando possibile.

15:31:34.079416 IP (tos 0x0, ttl 64, id 20244, offset 0, flags, proto: TCP(6), lunghezza: 60) source.35970 > dest.80: S, cksum 0x0ac1 (corretto), 2647022145: 2647022145 (0) Vinci 5840 0x0000: 4500 003C 4F14 4006 7417 0AFB 0257 E .. 0x0010: 4815 222A 8C82 0050 9DC6 5A41 0000 0000 H. "* ... P..za .... 0x0020: A002 16D0 0x0020 0000 0204 05b4 0402 080a ................ 0x0030: 14b4 1555 0000 0000 0103 0302

BASE

Di seguito sono elencate alcune opzioni che puoi utilizzare durante la configurazione di tcpdump. Sono facili da dimenticare e/o confondere con altri tipi di filtri come Wireshark, quindi questa pagina può fungere da riferimento per te. Ecco i principali che mi piace tenere a mente, a seconda di ciò che guardo.

OPZIONI

  • -i any: ascolta su tutte le interfacce per vedere se vedi del traffico.
  • -i eth0: ascolta sull'interfaccia eth0.
  • -D: mostra l'elenco delle interfacce disponibili
  • -n: Visualizza gli indirizzi IP invece dei nomi host.
  • -nn: Visualizza indirizzi IP e numeri di porta invece di nomi host e nomi di protocollo.
  • -q: Visualizza la quantità minima di informazioni su un pacchetto.
  • -t: non visualizza il timestamp su ogni riga.
  • -tttt: specifica che i timestamp vengono emessi nel formato predefinito per ciascuna riga.
  • -X: mostra il contenuto del pacchetto sia in esadecimale che in ASCII.
  • -XX: Come -X, ma mostra anche l'intestazione Ethernet.
  • -v, -vv, -vvv: aumenta la quantità di informazioni sul pacchetto restituite.
  • -c: ottieni solo x numero di pacchetti e poi fermati.
  • -s: specifica la lunghezza dello snap (dimensione) dell'acquisizione in byte. Usa -s0 per ottenere tutto, a meno che tu non ne prenda intenzionalmente meno.
  • -S: stampa numeri di sequenza assoluti.
  • -e: Ottieni l'intestazione Ethernet.
  • -q: mostra informazioni minime sul pacchetto.
  • -E: decrittografa il traffico IPSEC fornendo la chiave di crittografia.
[Il valore di snaplength, l'impostazione predefinita per tcpdump 4.0, è cambiato da 68 byte a 96 byte. Anche se questo ti darà maggiori informazioni sul pacchetto, non saranno tutte le informazioni. Usa -s1514 o -s0 per ottenere una copertura completa]

ESPRESSIONI

In tcpdump, le espressioni ti consentono di troncare diversi tipi di traffico e trovare esattamente quello che stai cercando. Padroneggiare le espressioni ed essere in grado di combinarle in modo creativo è ciò che rende tcpdump davvero potente.

Esistono tre tipi principali di espressioni: type, dir e proto.

Tipi di opzioni: host, rete e porta.

Le directory ti consentono di eseguire src, dst e combinazioni di questi.

Il protocollo permette di definire: tcp, udp, icmp, ah e molti altri.

ESEMPI

Quindi, ora che abbiamo visto quali opzioni abbiamo, diamo un'occhiata ad alcuni esempi del mondo reale che probabilmente vedremo nel nostro lavoro quotidiano.

MESSAGGIO PRINCIPALE

Basta vedere cosa sta succedendo guardando tutte le interfacce.

# tcpdump -i qualsiasi

INTERFACCIA SPECIFICA

Una visione di base di ciò che sta accadendo su una particolare interfaccia.

# tcpdump -i eth0

PRESENTAZIONE DELLA PRODUZIONE RAW

Output dettagliato senza risolvere nomi host o numeri di porta, numeri di sequenza assoluti e timestamp leggibili dall'uomo.

# tcpdump -ttttnnvvS

TROVA IL TRAFFICO PER IP

Una delle query più comuni, ti mostrerà il traffico da 1.2.3.4, sia esso la sorgente o la destinazione.

# host tcpdump 1.2.3.4

VISUALIZZA MAGGIORI INFORMAZIONI SUL PACCHETTO HEX

L'output esadecimale è utile quando si desidera visualizzare il contenuto dei pacchetti in questione e spesso viene utilizzato al meglio quando si isolano più candidati per un esame più approfondito.

# tcpdump -nnvXSs 0 -c1 icmp tcpdump: in ascolto su eth0, link-type EN10MB (Ethernet), 23:11:10.370321 IP (tos 0x20, ttl 48, id 34859, offset 0, flags , length: 84) 69.254.213.43 > 72.21.34.42: icmp 64: echo request seq 0 0x0000: 4520 0054 882b 0000 3001 7cf5 45fe d52b E..T.+..0.|.E..+ 0x0010: 4815 222a 0800 354 Hd 2700 2a 00 50"..%..D 0x0020: ae5e 0500 0809 0a0b 0c0d 0e0f 1011 1213 .^............... 0x0030: 1415 1617 1819 1a1b 1c1d 1e1f 2021 2223 ... .. ........!"# 0x0040: 2425 2627 2829 2a2b 2c2d 2e2f 3031 3233 $%&"()*+,-./0123 0x0050: 3435 3637 4567 1 pacchetti catturati 1 pacchetti ricevuti dal filtro 0 pacchetti eliminati per nocciolo

FILTRAGGIO PER FONTE E DESTINAZIONE

Individuare il traffico in base alla sorgente o alla destinazione è molto semplice utilizzando src e dst.

# tcpdump src 2.3.4.5 tcpdump dst 3.4.5.6

CERCA PACCHETTI SULLA RETE

Per trovare pacchetti da o verso una rete specifica, utilizzare l'opzione net. Puoi combinarlo con le opzioni src o dst.

# tcpdump net 1.2.3.0/24

SPETTACOLO TRAFFICO ASSOCIATO A UN PORTO SPECIALE

È possibile trovare una porta di traffico specifica utilizzando l'opzione porta seguita da un numero di porta.

# porta tcpdump 3389 porta tcpdump src 1025

MOSTRA IL TRAFFICO DI UN PROTOCOLLO

Se stai cercando un tipo specifico di traffico, puoi utilizzare tcp, udp, icmp e molti altri.

# tcpdump icmp

MOSTRARE SOLO IL TRAFFICO IP6

Puoi anche trovare tutto il traffico IP6 usando l'opzione del protocollo.

TROVA IL TRAFFICO UTILIZZANDO LE FASCE PORTUALI

Puoi anche utilizzare l'intervallo di porte per trovare il traffico.

# tcpdump portrange 21-23

TROVA IL TRAFFICO IN BASE ALLE DIMENSIONI DEL PACCHETTO

Se stai cercando pacchetti di una dimensione specifica, puoi utilizzare queste opzioni. Puoi usare simboli piccoli, grandi o qualunque altro ti aspetti dalla matematica.

# tcpdump minore di 32 tcpdump maggiore di 64 tcpdump<= 128

DOCUMENTAZIONE SCRITTA IN ARCHIVIO

Spesso è utile salvare l'output dei batch in un file per un'analisi successiva. Questi file sono noti come file PCAP (PEE-cap) e possono essere elaborati da centinaia di applicazioni diverse, inclusi analizzatori di rete, sistemi di rilevamento delle intrusioni e, naturalmente, tcpdump stesso. Qui stiamo scrivendo un file chiamato Capture_file usando l'opzione -w.

# tcpdump porta 80 -w file_cattura

LETTURA DI FILE PCAP

Puoi leggere i file PCAP con l'opzione -r. Nota che puoi usare tutti i normali comandi in tcpdump durante la lettura di un file; sei limitato solo dal fatto che non puoi acquisire ed elaborare qualcosa che non esiste nel file.

# tcpdump -r file_cattura

AVANZATE

Ora che abbiamo visto cosa possiamo fare con le basi con alcuni esempi, diamo un'occhiata ad alcune cose più avanzate.

È TUTTO SU DI COMBINAZIONI

Rendere queste diverse cose individuali è potente, ma la vera magia di tcpdump deriva dall'essere in grado di combinare le opzioni in modi creativi per isolare esattamente ciò che stai cercando. Esistono tre modi per creare combinazioni e, se hai studiato programmazione, ti risulteranno molto familiari.

E
e o &&

O
o o ||

TRANNE
non o!

Ecco alcuni esempi di comandi combinati.

DA UN IP SPECIFICO E ASSEGNATO A UNA PORTA SPECIFICA

Troviamo tutto il traffico da 10.5.2.3 a qualsiasi host sulla porta 3389.

Tcpdump -nnvvS src 10.5.2.3 e porta dst 3389

DA UNA RETE ALL'ALTRA

Diamo un'occhiata a tutto il traffico proveniente da 192.168.x.x e verso le reti 10.xo 172.16.x.x e mostreremo l'output esadecimale senza il nome host e un livello di dettaglio extra.

Tcpdump -nvX src net 192.168.0.0/16 e dst net 10.0.0.0/8 o 172.16.0.0/16

IL TRAFFICO NON ICMP VERSO UN IP SPECIFICO

Questo ci mostrerà tutto il traffico che va a 192.168.0.2 che non è ICMP.

tcpdump dst 192.168.0.2 e src net e non icmp

TRAFFICO DA UN OSPITE CHE NON SI TROVA IN UN PORTO SPECIFICO

Questo ci mostrerà tutto il traffico dall'host che non è traffico SSH (supponendo che venga utilizzata la porta predefinita).

Tcpdump -vv src mars e non dst porta 22

Come puoi vedere, puoi creare query per trovare praticamente tutto ciò di cui hai bisogno. La chiave è definire prima esattamente ciò che stai cercando e quindi creare la sintassi per isolare il tipo specifico di traffico.

Raggruppamenti complessi e caratteri speciali

Tieni inoltre presente che quando crei query complesse, potrebbe essere necessario raggruppare i parametri utilizzando virgolette singole. Le virgolette singole vengono utilizzate per dire a tcpdump di ignorare alcuni caratteri speciali, in questo caso quello tra parentesi "()". Lo stesso metodo può essere utilizzato per raggruppare utilizzando altre espressioni come host, porta, rete, ecc. Guarda il comando seguente.

# Traffico proveniente da 10.0.2.4 E destinato alle porte 3389 o 22 (errata) tcpdump src 10.0.2.4 e (dst port 3389 o 22)

Se hai provato a eseguire questo comando molto utile in un'altra occasione, otterrai un errore tra parentesi. Puoi risolvere questo problema eseguendo l'escape delle parentesi (precedendo ciascuna con un \) o inserendo l'intero comando tra virgolette singole:

# Traffico proveniente da 10.0.2.4 E destinato alle porte 3389 o 22 (corretto) # tcpdump "src 10.0.2.4 e (dst port 3389 o 22)"

Isolare flag TCP specifici

Puoi anche acquisire il traffico in base a determinati flag TCP.

[NOTA: i filtri sottostanti trovano questi vari pacchetti perché TCP rileva l'offset 13 nell'intestazione TCP, il numero rappresenta la posizione in un byte, eh! = 0 significa che questo flag è impostato su 1, cioè è su. ]

Mostra tutti i pacchetti URGENT (URG)...

# tcpdump "tcp & 32!=0"

Mostra tutti i pacchetti di RICONOSCIMENTO (ACK) …

# tcpdump "tcp & 16!=0"

Mostra tutti i pacchetti PUSH (PSH) …

# tcpdump "tcp & 8!=0"

Mostra tutti i pacchetti RESET (RST) ...

# tcpdump "tcp & 4!=0"

Mostra tutti i pacchetti SYNCHRONIZE (SYN) ...

# tcpdump "tcp & 2!=0"

Mostra tutti i pacchetti FINISH (FIN)...

# tcpdump "tcp & 1!=0"

Mostra tutti i pacchetti SYNCHRONIZE / ACKNOWLEDGE (SYNACK) …

# tcpdump "tcp=18" [Nota: solo il flag PSH, RST, SYN e FIN è mostrato nell'output del campo tcpdump. Vengono visualizzati URG e ACK, ma sono mostrati altrove nell'output rispetto al campo flag. ]

Tuttavia, come con gli strumenti più potenti, ci sono molti modi per fare ciò di cui hai bisogno. L'esempio seguente mostra un altro modo per acquisire pacchetti con set di flag TCP specifici.

# tcpdump "tcp == tcp-syn"

Rimuovere i flag RST con l'opzione tcpflags...

# tcpdump "tcp == tcp-rst"

Rimuovere i flag FIN con tcpflags...

# tcpdump "tcp == tcp-fin" [Nota: lo stesso metodo può essere usato per altri flag; sono stati omessi nell'interesse del risparmio di spazio. ]

Identificazione del traffico degno di nota

Infine, ci sono alcune ricette veloci che vorresti ricordare per catturare traffico specifico e specializzato, come pacchetti dannosi/probabilmente dannosi.

PACCHETTI CON REGOLARI RST E SYN KIT (QUESTO NON DEVE ESSERE)

# tcpdump "tcp=6"

TROVA TESTO SEMPLICE HTTP E OTTIENI RICHIESTA

# tcpdump "tcp=0x47455420"

TROVA CONNESSIONI SSH SU QUALSIASI PORTA (ATTRAVERSO IL BANNER)

# tcpdump "tcp[(tcp>>2):4] = 0x5353482D"

PACCHETTI CON TTL INFERIORE A 10 (MOSTRA GENERE PROBLEMA O UTILIZZA TRACEROUTE)

# tcpdump "ip< 10"

PACCHETTI DI BIT DEL MALE

# tcpdump "ip & 128 != 0"

Conclusione

tcpdump è uno strumento prezioso per chiunque voglia entrare nella sicurezza della rete o delle informazioni.
Il modo insolito con cui interagisce con il traffico, combinato con l'accuratezza che fornisce nell'ispezione dei pacchetti, lo rende lo strumento migliore per l'apprendimento di TCP/IP.
Gli analizzatori di protocollo come Wireshark sono fantastici, ma se vuoi davvero padroneggiare i pacchetti, devi prima padroneggiare tcpdump.
Tutto sommato, questo tutorial dovrebbe aiutarti a diventare forte, ma la pagina man dovrebbe essere sempre a portata di mano per i casi d'uso più avanzati e occasionali. Spero sinceramente che questo ti sia stato utile e non esitare a contattarmi in caso di domande.

  • Offriamo un programma collaudato e tutorial da esperti di Cisco Networking Academy e Linux Professional Institute, istruttori certificati e un tutor personale.
  • Aiuteremo con l'occupazione e faremo carriera. Il 100% dei nostri laureati è impiegato.
  • Come sta andando la formazione?

    • Teniamo lezioni online serali sulla nostra piattaforma o studiamo a tempo pieno sulla base dell'ufficio di Kiev.
    • Ti chiederemo un momento conveniente per esercitarti e adattarti: capiamo che non c'è abbastanza tempo per studiare.
    • Se desideri un programma individuale, lo discuteremo e lo implementeremo.
    • Stabiliremo scadenze chiare per l'auto-organizzazione. Un curatore personale ti contatterà per rispondere a domande, consigliarti e motivarti a rispettare le scadenze per il superamento degli esami.

    Ti aiuteremo anche: