Next Previous Contents

1. WORM

I Worm rappresentano i virus dei sistemi Unix, o meglio diciamo che sono attacchi che meglio si addicono a questi sistemi, perchè sfruttano alcune peculiarità particolari legate all'ambito delle reti.La differenza sostanziale con i virus è rappresentata dal tipo di infezione praticata dalle 2 entità; mentre per i primi la modalità di infezione avviene copiandosi in programmi "sani" o nelle informazioni di caricamento di sistema sui dischi o dischetti, per i Worm l'attacco è autosufficiente, non necessità cioè di altri programmi per infettare la macchina, ma caratteristica più importante la diffusione avviene via rete sfruttando protocolli e sistemi di rete, per questo i Worm trovano nei sistemi UNIX un ambiente ideale. Una caratteristica importante dei Worm è la riproduzione remota, infatti dopo che l'utente dell'hosts si è accorto e ha cancellato l'infezione, l'attacco può essere riprodotto al nuovo collegamento con la rete. In questo articolo verrà focalizzata l'attenzione sul primo Worm della storia dell'informatica che nel Novembre 1989 mise letteralmente in ginocchio la "madre delle reti", questo Worm rappresenta una descrizione generale di questo tipo di attacchi. Il virus o meglio Worm che colpì internet fu ad opera di uno studente della Cornell University di nome Morris che può essere considerato il primo hacker della storia dell'informatica.

1.1 Introduzione

Il funzionamento del Worm era relativamente semplice; quando il virus entrava nel sistema, il sistema operativo creava il processo per l'esecuzione. L'esecuzione del virus era costituita da due parti:

  1. La prima ricercava una connessione di rete esterna, e se la trovava gli inviava una copia di se stesso in rete.
  2. a seconda replicava una copia di se stesso in memoria.
Le copie si comportavano poi esattamente come la prima, e così in breve tempo con una progressione che può essere paragonata a quella geometrica, il sistema aveva in esecuzione un numero altissimo di processi che non riuscivà piu a gestire "congelandosi", e non potendo più servire nessun altro accesso (amministratore compreso). Il sistema per poter funzionare doveva essere spento, ma al nuovo collegamento con la rete la macchina subiva lo stesso processo non riuscendo più a lavorare, ben presto tutti i maggior centri di ricerca nazionali e internazionali furono inutilizzabili e tutti collaborarono per sconfiggere questo Worm che venne successivamente isolato e studiato. Entreremo ora più in dettaglio in questo attacco mettendone in luce le caratteristiche principali, arrivando infine a darne una descrizione piu precisa. Il Worm di Morris quando infettava le macchine lasciava diverse traccie che andavano dalla comparsa di file inusuali nella directory /usr/tmp, a strani messaggi nei file di log relativi ai diversi servizi di rete, per esempio sendmail; ma la più evidente traccia dell'infezione era l'allungamento del tempo di caricamento di un programma che veniva maggiorato durante ogni clonazione del Worm; molte macchine mandarono un messaggio che disabilitava la creazione dei processi altre caddero completamente dopo aver esaurito la propia area di memoria virtuale o swap. Il Worm prende vantaggio dai difetti del software presente nei sistemi UNIX, e più precisamente dal meccanismo semplificato della condivisione delle risorse delle reti L.A.N. .Partiamo dall'analisi delle varie routine che possono avere dei problemi e fornire al Worm possibili bugs per entare in un sistema Unix: Fingerd, Sendmail e il sistema di Passwords.

1.2 Vari bug sfruttati dai Worm

L'utility Fingerd è un programma adibito a dare informazioni sugli utenti collegati a un sistema, viene quindi usato per controllare alcune informazioni sugli utenti come numero di telefono, indirizzo, etc.; ed è paragonabile a una agenda elettronica. Il demone Fingerd è un programma che accetta richieste remote su una particolare porta leggendo una riga in input e processando la relativa risposta in output al richiedente (tutto naturalmente via socket); il bug o exploit risale alla caratteristica comune di molte routine di I/O presenti nelle librerie del C che non controllano la dimensione dei buffer in gioco, permettendo di uscire dallo stack e prendendo privilegi diversi dai propi. Le routine di I/O non sono le uniche ad avere questi bachi, la tecnica del buffer overrun viene usata sempre piu spesso, e anche se i programmatori più esperti la conoscono continuano a usare queste routine nei loro programmi senza porsi problemi particolari.

Il secondo strumento nelle mani del Worm è Sendmail uno dei piu datati servermail che è stato prodotto dall'Università di Berkeley, e viene usato per l'instradamento di messaggi di posta elettronica attraverso reti diverse tra loro.Il demone può operare in diverse modalità ma quella sfruttata dal Worm è quella che lo vede come server in ascolto sulla porta 25 in modalità di DEBUG. Il bug o exploit di sendmail come abbiamo già detto è riferita alla modalità di DEBUG del demone; il Worm infatti cerca in questa modalità di inserire una serie di comandi al posto dell'indirizzo dell'utente che vengono eseguiti con i permessi del demone e quindi dell'amministratore.Nella modalità normale il DEBUG è disabilitato, ma può essere usato come test per il server Mail; cosi facendo l'amministratore può monitorare sendmail in casi specifici, visto anche la complessità di configurazione di questo programma, che se da una parte rappresenta una potenza ineguagliabile, dall'altra nelle mani di un amministratore inesperto diventa una buco di sicurezza enorme.

La terza chiave d'attacco del Worm è quella diretta alla scoperta delle password di un dato server. Questa è data dai permessi in lettura del file delle password e dal algoritmo di criptazione DES che è reso pubblico; in questo modo si può tentare attraverso la comparazione di parole criptate con l'algoritmo e quelle contenute nel file /etc/passwd di trovare le password.Il Worm cerca quindi attraverso un potenziale vocabolario di scoprire le eventuali password del sistema, le statistiche evidenziano che questo metodo porta alla scoperta del 50% delle password che di solito vengono associate a nomi di uso comune. Una protezione a questo attacco è l'uso ormai presente in tutti i sistemi Unix delle shadow password; infatti con questo meccanismo il file contenente la criptazione delle password è posto solo in lettura per l'amministratore. Una volta trovati gli account il Worm mette il file .rhosts nella directory dell'utente in modo da avere accesso senza l'uso di password alla macchina. Affronteremo adesso una descrizione più dettagliata del Worm.

1.3 Descrizione dettagliata del Worm di Morris

Il Worm è composto da 2 parti: un programma principale e un bootstrap o vector program. Il programma principale una volta stabilita la connessione con una macchina, cerca di reperire quante più informazioni possibili per il collegamento ad altre macchine, queste informazioni si possono trovare o controllando i file di configurazione, o eseguendo utility di rete presenti nel sistema; il Worm cerca poi di sfruttare i difetti precedentemente descritti: exploit shell, remote per eseguire il bootstrap in ogni macchina infettata. Il vector program è un programma di 99 linee scritto in codice C che deve essere compilato sulla macchina remota, in modo da poter infettare più architteture.Il vector program dopo essere compilato viene lanciato con 3 parametri: IP della macchina vittima, il numero di porta della macchina attraverso cui si prende il main del Worm e un numero magico che viene usato per il trasferimento del main del Worm, Se il numero magico non viene ricevuto, il server si disconnette immediatamente dal vector program, perchè presuppone un possibile spoofing. Il programma quando riceve sulla linea di comando l'opzione image si forka creando una copia di se stesso; nel caso di trasferimento fallito vengono cancellati tutti i file trasferiti e l'esecuzione termina. Quando il bootstrap stabilisce la connessione su una macchina, cerca di connettersi al main e trasferire i file precompilati (del main) per quella particolare architettura, e per quella versione di sistema operativo, che rende dipendenti i programmi dalle librerie dinamiche. Una curiosa caratteristica che è rimasta ancora insoluta era il perchè il programma adibiva un'area di trasferimento di 20 file, se in realtà ne usava solo 3 ,forse il Worm era stato pensato per poi essere ampliato e trasferire magari trojani e altre cose di questo genere. Una volta che il file binario è stato trasferito, il bootstrap carica il file lo linka con le librerie del sistema operativo, in modo da poterlo eseguire. Se l'esecuzione va a buon fine viene caricata una copia del bootstrap e dei file in memoria e vengono cancellate le copie su disco, altrimenti in caso di fallimento il bootstrap avrebbe cancellato le traccie dell'infezioni precedenti all'esecuzione del Worm.

1.4 Approfondimento tecnico dell'esecuzione del Worm di Morris

Scendiamo adesso un ulteriore gradino della nostra descrizione, in modo da affrontare il comportamento del Worm ad un livello più basso. La descrizione parte dal punto in cui almeno un hosts è infettato. A questo punto abbiamo un Worm che è in esecuzione su una macchina e riesce a stabilire una connessione TCP (finger, SendMail, o altri exploit descritti precedentemente) in modo da spedire il bootstrap su un'altra macchina da infettare:

Trasferimento da parte del Worm del bootstrap sulla macchina infettata

  1. Il programm vector dopo essere recapitato dal main del Worm su una macchina remota, viene installato ed eseguito dal Worm stesso attraverso 2 metodi principali:

  2. A questo punto viene stabilita una connessione sulla nuova macchina infettata tramite il programma di bootstrap e il Worm via socket (esempio33000) e viene costruita una stringa random( esempio 10846078 ) e un numero random (esempio 14490788) utlizzati per possibli anti-spoofing.

  3. Il programma vector dopo aver contattato il Worm invia la stringa random creata e scarica 3 file: una versione binaria del Worm per Sun, una Versione per il Vax, e il codice sorgente del programma vector.Dopo aver trasferito i file il programma vector esegue una shell con la chiamata execl ancora connessa al Worm o main.

  4. Il Worm attraverso la shell appena aperta invia i seguenti comandi:
    PATH=/bin:/usr/bin:/usr/ucb rm -f sh 
          if [ -f sh ] then P=x14481910 
            else P=sh 
          fi 
    
    Successivamente per ogni binario trasferito si manda la seguente sequenza di comandi:
    cc -o $P x14481910, sun3.o ./$P -p $$ x14481910,sun3.o x14481910,vax.o x14481910,11.c rm -f $P
    
    Il comando rm viene eseguito solo se l'esecuzione del Worm fallisce; infatti se il Worm si accorge che l'host è giàinfettato la connessione viene chiusa, altrimenti se l'esecuzione fallisce vengono cercati tutti i file oggetto e cancellati in modo da non lasciare traccia dell'infezione.

    Descrizione dell'esecuzione del Worm

  5. Il nuovo Worm dopo aver infettato la macchina procede a nascondersi, uccidendo i processi parenti e cancellando dal disco ogni file binario appartenente al Worm stesso.

  6. Successivamente, il Worm cerca di raccogliere quante più informazioni possibili sulle interfaccie di rete sulle macchine connesse a quella infettata, e si costruisce cosi una lista in memoria sui nomi e gli alias di tali macchine. Queste informazioni vengono raccolte attraverso la chiamata ioctl() e con il programma netstat che viene eseguito con varie opzioni; inoltre altre informazioni sono reperibili guardando alcuni file di sistema riguardanti il networking.

  7. Una volta costruita la lista in memoria di host vulnerabili, Il Worm cerca di creare una nuova lista con gli hosts effettivamente connessi alla rete, a seconda del tipo di hosts che poteva essere un gateway o un nodo di una L.A.N.; viene lanciato il comando telnet o rexec ports per determinare se l'host è effettivamente raggiungibile.

  8. L'infezione segue a questo punto 3 strade: rsh, fingered o sendmail.

  9. Successivamente il Worm opera in 5 stati.Ogni stato è caratterizzato dall'esecuzione di un piccolo ciclo, ,poi il Worm torna al passo 8 in attesa di irrompere in un altro host tramite le tecniche sopra descritte(sendmail fingerd o rsh). Nei primi quattro stati il Worm cerca di procurarsi un account sulla macchina locale. Nel quinto stato il Worm cerca invece di infettare altri host che risultano raggiungibili dalla sua tabella in memoria costruita al passo precedente. I primi quattro stati consistono nelle seguenti operazioni:

  10. Una volta che sono state crakkate le password di ogni account, il Worm cerca negli hosts che si è ricavato, gli account di quella macchina in modo da poter entrarci attraverso due tipi di attacco:
Una volta che il Worm entrava in una macchina provava a vedere se erano in esecuzione altri Worm nel sistema, se il controllo era positivo allora il Worm usciva, tranne che una volta su sette per proteggersi nel tentativo che l'amministratore faceva eseguire un falso Worm in modo da confondere quello vero.Questa caratteristica del settimo Worm fu quella che portò alla scoperta dell'infezione visto che in poco tempo le macchine si "congelavano" non potendo piu eseguire nessuna operazione. Morris fu scoperto quando uno dei suoi amici parlò con John Markoff, un giornalista esperto in computer del New York Times,e provò a convincere Markoff che l'incidente era involontario, il worm era inoffensivo e l'autore era dispiaciuto. L'amico,inavvertitamente, si lasciò sfuggire il login del provocatore del danno. Passare dal nome di login al nome del proprietario fu facile. Il giorno dopo la storia era in un articolo in prima pagina. Morris fu giudicato e condannato dalla corte federale al pagamento di una multa, a tre anni con la sospensione condizionale della pena e a numerose ore di lavoro in una comunità.


Next Previous Contents