Due attacchi comuni sulla rete sono lo sniffing e lo spoofing.
Negli attacchi di sniffing, l'attaccante può origliare sulla rete fisica, cablata o wireless e catturare pacchetti trasmessi attraverso la rete.
I tool che sono utilizzati per portare a compimento questo attacco sono:
Le macchine sono connesse alla rete attraverso delle NIC.
Ogni NIC ha un indirizzo fisico: il MAC.
Le comunicazioni di rete comunemente usate (ethernet e wifi) sono mezzi broadcast di natura, il che vuol dire che le macchine sono connesse ad un unico mezzo di trasmissione.
Mentre i dati fluiscono nel mezzo di trasmissione, ogni scheda di rete sulla rete potrà ascoltare tutti i frame che passano dal mezzo condiviso.
Quando un frame arriva nel mezzo, viene copiato nella memoria dentro la NIC, che controlla l'indirizzo di destinazione nell'intestazione; se il MAC address corrisponde con quello della NIC viene copiato nel kernel (del sistema operativo) attraverso una tecnica chiamata DMA (Direct Memory Access, la NIC scrive direttamente in memoria, dopodiché la CPU viene informata della presenza di nuovi pacchetti e li processa).
Come abbiamo appena detto, i frame che non sono destinati ad una certa NIC (scheda di rete di un dispositivo) vengono scartati invece di essere passati alla CPU per essere processati.
Per cui al sistema operativo giungeranno solo i pacchetti utili per il dispositivo in cui è in esecuzione. Tuttavia, molte NIC hanno una speciale modalità detta promiscua. Quando la scheda di rete è in questa modalità, la NIC passa ogni frame ricevuto dalla rete al kernel, senza controllare il MAC di destinazione. Se uno sniffer (inteso come programma) è registrato nel kernel, tutti questi frame verranno eventualmente inoltrati dal kernel allo sniffer. Si noti che la maggior parte dei sistemi operativi richiede privilegi elevati per permettere la modalità promiscua ad una NIC.
La modalità promiscua funge per reti cablate, mentre la modalità monitor è utile per reti wireless.
Quando si sniffano dei pacchetti di rete, è abbastanza comune che chi sniffa sia interessato solo ad una certa categoria di pacchetti, per esempio solo ai pacchetti TCP o alle query DNS. Il sistema può dare tutti i pacchetti catturati al programma sniffer, che scarta i pacchetti non interessanti. Questo è inefficiente, poiché processare pacchetti non interessanti e consegnarli dal kernel alla applicazione di sniffing richiede tempo.
I sistemi operativi unix hanno definito filtro per pacchetti chiamato BSD packet filter (BPF) che dà la possibilità di filtrare i pacchetti a livelli più bassi. BPF consente ad un utente con privilegi elevati di attaccare filtri direttamente alla socket, il che comunica al kernel di scartare pacchetti inutili quanto prima. Il filtro è scritto in linguaggio umano, usando operatori booleani, ed è compilato in pseudo-codice e passato ad un dirver di BPF. Questo pseudo-codice è poi interpretato dalla BPF-pseudo-machine, una macchina a livello kernel progettata per filtrare pacchetti.