Idle scan
# Idle scan

L'idle scan è una tecnica di port scanning TCP piuttosto sofisticata che fa uso fraudolento di un host inattivo remoto, chiamato zombie, per lanciare un attacco verso un altro host creando così una triangolazione che maschera del tutto l'attaccante.

## La storia

L'attacco è stato teorizzato da Salvatore Sanfilippo (noto anche come antirez), che si occupa di Web 2.0 ed è autore dell'utility hping e sviluppatore di Redis.

## La teoria

Quando un host invia un pacchetto IP sulla rete, esso valorizza con un identificativo numerico univoco (per esso) il campo identification dell'header. Questo campo è utilizzato per riassemblare il pacchetto originale a partire dagli eventuali frammenti in cui può essere diviso durante la trasmissione, in quanto i vari frammenti includono sempre il campo identification del pacchetto originale.

In generale il sistema operativo genera il valore per questo campo in maniera sequenziale per ogni pacchetto trasmesso, per cui esso cambia solo quando un host trasmette pacchetti (mentre rimane inalterato se non ne trasmette).

## La tecnica

L'attaccante interroga lo zombie per verificarne l'inattività e per sapere qual è il valore che sta usando per il campo identification. L'attaccante invia poi un pacchetto alla porta della vittima che intende sondare, specificando però un IP sorgente pari a quello dello zombie (tramite ip spoofing). Il risultato ottenuto può essere uno dei seguenti:

* la vittima ha la porta aperta: in questo caso la vittima reagisce inviando allo zombie un pacchetto con i flag SYN/ACK. Lo zombie lo riceve, ma trattandosi di un pacchetto fuori sequenza, e quindi inatteso, esso risponde alla vittima trasmettendole un pacchetto con il flag RST.
* la vittima ha la porta chiusa: in questo caso la vittima reagisce trasmettendo allo zombie un pacchetto ICMP di tipo Destination Unreachable specificando che la porta non è raggiungibile. Lo zombie lo riceve, ma non fa nulla perché si tratta di una risposta inattesa ad una richiesta di connessione che esso non aveva inviato.
* la vittima scarta il traffico in ingresso sulla porta (ad esempio tramite un firewall): il pacchetto viene ignorato, e non vi sono risposte ICMP verso lo zombie.

A questo punto l'attaccante interroga di nuovo lo zombie e può osservare uno di questi due comportamenti:

* il valore di identification dello zombie è variato, quindi deduce che la porta della vittima era aperta.
* il valore di identification dello zombie non è variato, e quindi deduce che la porta della vittima era chiusa oppure filtrata.

La tecnica è piuttosto imprecisa e richiede che ci sia un host zombie totalmente inattivo, ma ha il vantaggio di essere completamente anonima alla vittima, impedendo quindi qualsiasi contromisura e facendo scattare un allarme in un eventuale IDS che però indica l'indirizzo dell'idle host.

## Un esempio con hping

Il metodo hping per lo idle scanning fornisce un esempio a basso livello di come si possa eseguire. In questo esempio l'host della vittima (172.16.0.100) viene analizzato usando un host zombie (172.16.0.105) appartenente alla stessa sottorete di classe C. È mostrato quindi lo scenario verificate una porta aperta ed una porta chiusa per vedere come ciascuno scenario si svolge.

In primo luogo, stabilito che lo zombie sia effettivamente inattivo, si inviano i pacchetti usando il comando hping2 e si osserva che i valori di identification aumentano incrementalmente di 1. Se essi crescono casualmente, l'host zombie non è effettivamente inattivo.

Viene quindi inviato un pacchetto spoofed SYN all'host della vittima sulla porta che si suppone sia aperta. Per l'esempio viene usata la porta 22 (ssh):

Poiché è stato effettuato lo spoofing del pacchetto, l'attaccante non riceve risposte e quindi hping restituisce il 100% di pacchetti persi. L'host della vittima risponde direttamente all'host zombie con un pacchetto avente i flag SYN/ACK. L'attaccante controlla quindi l'host zombie per vedere se il valore di identification è variato.

Da notare che il valore di identification dell'host zombie cresce di due unità, da id=1379 a id=1381, in quanto il valore 1380 è stato usato quando l'host zombie ha risposto al pacchetto con i flag SYN/ACK della vittima con un pacchetto con il flag RST, per cui si deduce che la porta della vittima era aperta.

L'intero processo viene ora ripetuto con una porta della vittima che si suppone sia chiusa. Per l'esempio che segue viene usata la porta 23 (telnet).

Si nota che in questo caso il valore di identification dello zombie non varia (o meglio, varia solo da 1382 a 1383 per via della risposta all'attaccante) perché la porta della vittima era chiusa oppure filtrata. Quando l'attaccante invia il pacchetto "modificato" (spoofed) alla vittima, essa non risponde affatto, o risponde allo zombie con un pacchetto con il flag RST che non provoca variazioni nel valore di identification.

## Un esempio con nmap

Nmap non fornisce strumenti per identificare se un host è inattivo. Per questo scopo può essere utilizzato hping. Consultando l'help di nmap si trovano le istruzioni per attivare un idle scan:

Quindi definito idlehost.domain1.it l'host in stato inattivo, victimhost.domain2.it l'host vittima la scansione avviene in questo modo:

## Altri tipi di scan

* TCP connect scan
* SYN scan
* ACK scan
* NULL scan
* FIN scan
* XMAS scan
* IP protocol scan
