Ping of Death
Il 18 Dicembre '96 il CERT de lla Carnegie Mellon
University di Pittsgurg emise un bollettino informando della vulnerabilitý
di molti sistemi in rete quando ricevono un pacchetto IP che supera le dimensioni
standard di 64kb;
in particolare una richiesta ICMP ECHO prodotta
con il co mando "ping" e che supera il limite di 64kb puÚ essere
usata per causare il blocco della macchina a cui viene inoltrata.
ICMP (Internet Control Message Protocol) Ë
un sotto gruppo di istruzioni del protocollo TCP/IP usato per scambiare messaggi
di con trollo ed errore tra sistemi collegati in rete; all'interno delle specifiche
di questo protocollo sono definite due particolari istruzioni ICMP_ECHO_REQUEST
e ICMP_ECHO_REPLY che sono rispettivamente generate tramite l'uso del comando
ping e dalla risposta di un sistema al ping stesso.
Di norma il comando ping viene usato per determinare
se un sistema remoto è raggiungibile o meno dal proprio sistema locale,
(Wintricks.com copyright) valutare
i tempi medi in cui i pacchetti raggiungono la destinazione e la percentuale del
num ero di pacchetti che si perdono durante il tragitto.
Il problema non si limita ai soli computer,
ma viene di fatto esteso anche agli X-terminal, router, stampanti e a tutto ciÚ
che viene connesso direttamente in rete. Le specifiche del TCP/IP (RFC-79 1) fissano
la
grandezza massima di un datagramma IP in 65536 bytes (2^16-1) ; di questi solo
20 sono riservati all'intestazione del pacchetto.
All'interno del pacchetto risiede a sua volta
una richiesta ICMP costituita da 8 bytes di header seguita dal numero di byte
riservati per i dati:
facendo due conti al volo la grandezza massima
disponibile per l'area dati è 65535 - 20 - 8 = 65507 bytes. Il problema
del ping of death nasce dalla possibilità di generare una richiesta ICMP_ECHO
in un pacchetto con più di 65507 byte di campo dati sebbene sia assolutamente
fuori dalle specifiche previste dal TCP/IP. Infatti al momento della trasmissione
il pacchetto originale viene frammentato in piccoli pacchetti e questi spediti
al
destinatario; ciascun frammento al suo interno porta con se le informazioni relative
alla esatta posizione in cui deve essere collocato dal ricevitore quando viene
assemblato.
Poichè la maggior parte dei sistemi operativi non verificano il pacchetto
se non al momento in cui han no ricevuto tutti i frammenti in cui è stato
scomposto durante la trasmissione, puÚ capitare che una volta ricomposto,
il pacchetto generi un overflow dello stato delle variabili interne della macchina;
le conseguenze ovviamente sono diverse a seconda del tipo di macchina e del tipo
di sistema operativo in questione.
Non è una regola o una costante; macchine simili possono reagire in maniera
diversa e assolutamente imprevedibile; in alcuni casi il fenomeno si può
verificare in condizioni di carico gra voso su macchine che in altre
condizioni non avevano presentato l'inconveniente; nei casi limite l'effetto è
decisamente sorprendente, si va dal crash al reboot spontaneo con tutte le varie
sfumature di halt e freeze della console possibili e immaginabili.
Fortunatamente non tutti i sistemi operativi
permettono di spedire un datagramma IP maggiore di 64kb e questo se volete in
parte limita il problema alla sorgente; tuttavia Windows 95 permette tranquillamente
di
superare il limite e ci sono in circo lazione decine di programmi per UNIX e altri
sistemi operativi nate allo scopo di generare liberamente un ping di dimensioni
volute.
Se da una parte è evidente che attaccare
un sistema remoto usando questo artifizio sia estremamente facile e alla portat
a di tutti, non è altrettanto ovvio come si possa riuscire a salvaguardare
la propria macchina o rete locale. Per testare se il vostro computer è
soggetto al problema in questione in prima approssimazione è sufficiente
che vi procurate un sistema Windows 95 e provate il comando:
ping -l 65527 127.0.0.1 dove 127.0.0.1 è
per convenzione l'IP simbolico del computer stesso.
Tipicamente riceverete il messaggio "Request
Timed Out" o perchè la macchina in questione ignora a ragion veduta
il ping, o nella peggiore delle ipotesi perchè si è bloccata.
Ripetuti test effettuati su diverse macchine
hanno confermato l'effettiva esistenza del pericolo; le macchine dotate di sistemi
operativi di realese più datata ne sono fortemente soggetti (ad esempio
le prime versioni di
Windows 95, NT4 sprovvisto di Service Pack 2 e Linux con kernel antecedente alla
2.0.24)
WinNuke
Il 10 maggio '97 su BugTrap veniva postato un
articolo che informava della possibilità di crashare in maniera remota
una macchina Windows NT o 95 tramite un attacco alla porta TCP/IP 139 riservata
alle negoziazioni di
servizio del protocollo NetBIOS della Microsoft.
Parallelamente su tutte le reti IRC del mondo
iniziarono a verificarsi misteriose sconnessioni in massa degli utenti dai server
con errore ping timeout, come se improvvisamente la macchina su cui girava il
client dell'utente era scomparsa dalla rete; pochi giorni più tardi è
il panico per tutti providers che si affidano sui server NT per offrire i loro
servizi.
Erano i primi segni di quella che nelle ultime
settimane Ë diventato il più grosso problema della rete: la diffusione
del programma WinNuke in grado di produrre un messaggio diretto alla porta 139
di una macchina remota
causandone l'i mmediato blocco; su tutte le macchine che ho personalmente testato
nessuna si e' dimostrata immune anche se molte pagine che trattano il problema
parlano di una vulnerabilità limitata al 70%.
WinNuke spedisce sulla porta NetBIOS 139 un
messaggio (quel lo di default è un "bye" ma qualunque sequenza
di caratteri produce lo stesso effetto). Se volete testare personalmente la reazione
del vostro computer a un attacco prodotto dal WinNuke provate a visitare la pagina
http://www.darkening.com/cgi-bin/nukeme.cgi
;
un programma remoto leggerà il vostro
indirizzo ip e inoltrerý l'attacco sulla porta 139 (attenzione:
salvate prima tutti i lavori che state effettuando perchè quasi sicuramente
un secondo dopo aver visitato quella pagina sarete costretti a effettuare un reboot).
Vediamo più nel dettaglio dove sta il
problema e come prevenirlo: le specifiche relative all'interfaccia tra il NetBIOS
e il TCP/IP prevedono la disponibilità di una serie di messaggi urgenti
definiti OOB (Out of Band
data) che vengono scambiati tra le macchine in rete per comunicazioni di servizio
ad alta priorità.
La sintassi di questi messaggi Ë strettamente definita dalle
specifiche del protocollo e ovviamente sia NT che Windows 95 riconoscono perfettamente
tutti i messaggi scambiati su queste porte. Tuttavia Ë sufficiente generare
un messaggio ad alta priorità con una forma errata per provocare un excpetion
che porta all'halt del sistema.
In pochissime parole la routine che si occupa
del NetBIOS sia di NT che Windows 95 non controlla la struttura dei pacchetti
con intestazione di OOB ad alta priorità provenienti dalle porte incriminate,
e li passa direttamente al kernel confidando sul fatto che se arrivano su quella
porta rispettano la sintassi di default; un ingenuità stranamente eccessiva
e che ora ha mandato in crisi mezzo mondo telematico.
Fortunatamente esistono diverse soluzioni per
porre fine al problema. Sotto NT è sufficiente applicare un apposita patch
uscita pochissimi giorni dopo la scoperta del problema e che purtroppo non è
stata inclusa nell'attuale Service Pack 3.
Al momento in cui scriviamo la patch è applicabile esclusivamente alla
versione in lingua inglese di NT.
Per quanto riguarda Windows 95 la soluzione è relativamente semplice ed
è sufficiente inserire una chiave nel file di registro di configurazione
che modifica il modo con cui vengono processati i messaggi urgenti da parte del
sistema operativo.
La chiave in questione è:
[HKEY_LOCAL_MACHINE\ System\CurrentControlSet\Services\VxD\MSTCP] "BSDUrgent"="0"
e potete inserirla manualmente con l'uso di
Regedit con le solite raccomandazioni del caso: modificare il file di configurazione
può essere molto rischioso, quindi intervenite sul vostro sistema solo
nei casi in cui siete connessi in rete tramite TCP/IP oppure usate connessioni
in cui il vostro indirizzo IP sebbene dinamico sia in bella mostra agli occhi
di tutti come ad esempio nelle sessioni IRC; in tutti gli altri casi, e specialmente
per chi non ha
una connessione di rete, questa modifica è del tutto superflua e sconsigliabile.
Telnet 110
Simile come concetto al WinNuke era il problema
che fino all'uscita di un apposito fix posto nel Service Pack 2 affliggeva le
macchine NT sia nella versione client che server se soggette a un telnet sulla
porta 110.
Un telnet su tale porta seguito da una sequenza
random di caratteri fa partire una routine che legge i dati direttamente dalla
porta TCP/IP; a sua volta la routine invia al kernel un interrupt ogni qual volta
debba essere
eseguita una specifica operazione.
Nel momento in cui si interrompe la sessione
telnet la routine entra in loop assorbendo il 100% della CPU della macchina e
provocando un rallentamento graduale di tutte le funzioni fino ad arrivare al
blocco totale della
macchina.
Anche questo, come già detto, Ë
un problema ben noto a Microsoft, risolto completamente sia con la patch post
Service Pack 2 che, ovviamente con la realease 3 dello stesso.
Conclusioni
Questi tre differenti modi di attaccare una
macchina remota sfruttando i bachi del sistema operativo sono solo alcuni dei
svariati metodi utilizzabili per arrecare fastidi e danni sfruttando tutte dimenticanze
dei programmatori; pertanto a tutti gli amministratori rivolgiamo l'invito ad
aggiornare costantemente i loro sistemi e dove possibile applicare dei filtri
direttamente al livello dei router o attraverso un firewall, tuttora la migliore
soluzione per prevenire abusi da parte di utenti esterni alla propria sottorete.
Made by Mattia Fratus for Wintricks
|