Tecnología

Come il Morris Worm ha cambiato per sempre la storia di internet

Il New York Times del 5 Maggio 1990 si presentava in stampa con in prima pagina uno dei primi casi di condanne penali nel mondo della sicurezza informatica: Computer Intruder Is Put on Probation And Fined $10,000. Oggi potrebbe suonare una notizia come un’altra, ma il 1990 per la storia dei computer — e in particolar modo di Internet — è praticamente un’altra era.

Prendiamo la macchina del tempo e torniamo indietro di qualche decennio. Siamo nella seconda metà degli anni sessanta e un ingegnere di nome Larry Roberts si è messo in testa di voler fondare una rete distribuita di calcolatori, collegandoli tra loro con la linea telefonica. Avrebbero comunicato tramite dei pacchetti in sequenza, sfruttando come unità di misura il bit. ARPANet nasce concepita inizialmente per scopi militari, ma nel 1983 viene divisa in due branch: da una parte prende forma Milnet, una rete con la stessa struttura di ARPANET e basata sulla suite classica dell’architettura del protocollo TCP/IP (che usiamo ancora oggi), con l’aggiunta di un servizio di Gateway. Poi nasce il ramo civile, che collega le università d’America e permette a professori e ricercatori di scambiarsi opinioni e articoli.

Videos by VICE

La disciplina dell’Internet Security in quegli anni è ancora acerba. Qualche tempo prima alcuni sistemisti e programmatori si erano concentrati sulle possibilità di crittografare il protocollo già dal suo interno, ma vennero ostacolati dalla stessa NSA ( National Security Agency). Ciononostante, fu proprio l’iniziale bisogno di strutturare forme stabili e standard di sicurezza a far optare per la nascita di Milnet.

L’articolo del New York Times relativo al Morris Worm.

Nel 1988 qualcosa sta bollendo nella pentola degli scienziati dell’informazione. C’è fermento tra i geni della matematica computazionale, i programmatori in cravatta e camicia a quadri che passeggiano trai campus d’ America: Tim Berners Lee è a un passo dal far nascere il world wide web, coniandone la definizione stessa e dando al mondo il primo linguaggio di markup, l’HTML.

Tra le decine di migliaia di giovani talentuosi dell’informatica c’è anche il nostro Robert Morris . A guardarlo in foto potrebbe rispettare tutti i canoni del nerd, ma saremmo fuori strada. “He’s not a nerd, not a geek and certainly not a purposeful wrongdoer” ( Portrait of an artist as a young hacker, Computer World), diranno di lui più avanti. Robert si è laureato ad Harvard ed è al primo anno di PhD alla Cornell University, un paradiso di vecchi edifici ottocenteschi immersi nel verde a due passi dalla città di Ithaca (New York).

Il ricercatore ha una brillante idea, voler calcolare la grandezza di Internet e quindi di ARPANET, un reticolato di nodi connessi tra loro. Il piano è quello di scrivere un programma così astuto da insediarsi in un computer collegato ad ARPANET, riprodursi e ottenere informazioni su altri nodi da invadere. Robert Morris non è l’unico protagonista di questa storia ma ci sono una serie di comprimari e, uno di questi, è Andrew Sudduth che a quei tempi era nello staff tecnico dei laboratori IT di Harvard.

Sono le undici di sera di un mercoledì, precisamente è il 2 Novembre. Sudduth riceve una chiamata da Morris. Il dottorando della Cornell confessa di aver rilasciato un worm che si sta propagando per i nodi della rete e che presto avrebbe richiamato per dare le indicazioni allo staff tecnico su come difendersi da possibili problematiche. Alle due di notte Morris è di nuovo al telefono, questa volta è teso, e confessa di aver scatenato involontariamente un piccolo disastro. Chiede a Sudduth di postare su Usenet (la rete ad archivio dei server) un messaggio con firma anonima:

“There may be a virus loose on the Internet,”

Il post non viene letto fino al venerdì successivo e nei pochi giorni la frittata è fatta. Nessun attacco hacker avrebbe bissato negli anni, o anche solamente avvicinato il Morris Worm. Un computer su dieci era stato colpito, precisamente 6.000 sui 60.000 presenti in ARPANET. Tra le grandi vittime c’erano i sistemi della NASA e di Berkley, di Stanford e di altre onorevoli istituzioni. Il virus andava letto come worm.

La creatura di Morris assorbiva la potenza di calcolo dei sistemi colpiti, causando un vero e proprio Denial of Service. Analizziamo, molto superficialmente, le caratteristiche strutturali della bestiolina di Morris. Il Worm (scritto in linguaggio C) era costituto da un bootstrap code, cioè la parte di codice che permette l’installazione su di un ospite. L’operazione poteva avvenire in tre modi differenti e sfruttavano protocolli e programmi Unix: la vulnerabilità del servizio Finger quella di Sendmail o quelle di rexec e/o rsh.

Successivamente il worm stabiliva una connessione TCP verso il padre, che permetteva il trasferimento di codice ai fini di ottenere i dati utili per penetrare nuovi ospiti. L’utility sendmail che gestisce la posta elettronica veniva sfruttata per il comando debug. Ogni calcolatore era dotato di sendmail, e di conseguenza del protocollo SMT,P faceva da trampolino da lancio per un nuovo attacco.

Il Worm era anche in grado di tentare a indovinare la password del root. Lo faceva in modo semplice, magari statisticamente debole, ma sui grandi numeri ha funzionato. Oggi lo si definisce un Attacco a dizionario. Non è una cosa grezza come un brute force — tentarsi tutte le combinazioni possibili per quanti bit di cifratura esistono, implicando una potenza di calcolo allora impensabile — piuttosto si tenta di indovinare le password più probabili con una serie di opzioni. Il servizio finger, in ambiente Unix, si utilizzava per accedere a informazioni basilari sugli utenti. E sfruttava un processo in background (chiamato in gergo daemon), il fingerd, che utilizzava la funzione gets per ricevere stringhe in input. L’exploit del finger è stato possibile attraverso un Buffer Overflow proprio sulla funzione di gets.

Il floppy contenente il Morris Worm, al Computer History Museum.

Il concetto di buffer overflow è un grande classico della sicurezza informatica e non è difficile da immaginare anche se non si conosce nulla di programmazione. Possiamo immaginare il buffer come una regione della memoria con una grandezza precisa in byte. Immaginiamo una piantina di una casa, dove le stanze sono misurate in metri quadri. Ogni stanza ha una quadratura precisa.

char stanza_a[10];

In C questa linea di codice ci permette di creare un buffer di 10 byte — ogni carattere in C costa un byte — limitato “a sinistra” da stanza[0] e a destra da stanza[9]. Un buffer si dice che è in condizione di overflow nel caso in cui il contenuto dello stesso “trasbordi” a destra o a sinistra. Immaginiamo che le stanze della casa siano posizionate una vicino all’altra. Cosa succederebbe se la roba che infiliamo in quella stanza fosse così tanta da uscire fuori dalla stanza stessa? Semplice, invaderebbe la stanza vicina.

stanza_a[10] = ‘x’ ;

Quello che facciamo sopra è sbagliato, perché stiamo infilando un carattere oltre il bordo destro di una variabile stanza.

char stanza_a[10]; strcopy(stanza, “Il primo carattere c della seguente frase provocherà l’inizio di un overflow”).

Strcopy è una classica funzione del linguaggio C ed il modello è semplice da spiegare. Si sceglie una variabile nel primo campo, e una stringa di caratteri da inserire nel secondo. Quella stringa da più di quaranta metri quadri è troppo lunga per la nostra stanza di dieci metri quadri. Dove finiranno i byte in più?

Non voglio dilungarmi sul Buffer Overflow, ma questo esempio è un utile approfondimento. Vi basti sapere che grazie a questa tecnica è possibile riscrivere variabili o ottenere privilegi. Il worm, una volta penetrato nel server, ha un compito preciso: recuperare gli indirizzi di altri calcolatori, le future vittime, e riprodursi ancora una volta. In caso di attacco su una macchina già infetta, il worm sarebbe dovuto passare alla vittima successiva. Ma Morris vuole stare sul sicuro e decide di assicurare l’installazione 1 volta su 7, anche in caso di infezione. Qui salta fuori il danno: i calcolatori si ritrovano troppe versioni del worm e rimangono senza potenza di calcolo, praticamente inutilizzabili.

Spiegazione di un buffer overflow.

I danni sono pesanti a livello economico. Si calcola qualcosa come trai 100.000 e i 10.000.000 di dollari. Torniamo con la macchina del tempo all’inizio del nostro articolo, precisamente al 22 Gennaio del 1990. Come titolava il New York Times, Morris venne condannato a tre anni di libertà vigilata, centinaia di ore di servizi sociali e a una multa di 10.000 dollari.

Un po’ come per l’organismo umano, dopo un brutto raffreddore gli anticorpi si rafforzano. Così è successo per la rete colpita dal Morris Worm. Nel 1989 è il tempo del WANK worm ma molti amministratori avevano le difese pronte. Internet nasceva con l’innocenza già perduta, e nelle teste dei tecnici le parole affidabilità e consistenza avevano fatto breccia. Soprattutto per chi lavorava su Unix, che erroneamente era stato considerato sicuro rispetto al sistema DOS.

La DARPA (Defence Advanced Research Project Agency) che era nata negli anni gloriosi della Guerra Fredda e per far fronte al successo dello Sputnik, fonda il CERT (Computer Emergency Response Team), con lo scopo di monitorare una situazione che negli anni è divenuta sempre più complessa. Da allora il CERT è sempre in allerta sulle questioni di sicurezza. Per anni si è anche impegnata a tenere conto della quantità di attacchi informatici in giro per il Pianeta. Nel 1990 erano poco più di un centinaio e un anno dopo se ne contavano più del doppio. Nel 2001 erano 56.000 e nel 2003 ancora il doppio, roba di 100.000 e passa. Da allora il CERT smise di quantificarli, i numeri erano praticamente esplosi.

“We didn’t believe that Morris intended to cause harm or damage,” , parole di Mark Rasch, il procuratore che ai tempi seguì in tribunale il caso dell’informatico. Ma il Dipartimento di Giustizia sapeva bene che non si poteva essere troppo indulgenti in vista di futuri attacchi hacker. La giuria condannò Morris a 15 mesi di prigione, ma il giudice Munson gliela fece scampare con una semplice multa e i lavori sociali. Qualche anno dopo, Morris fonda assieme al suo amico Paul Graham Viaweb, uno dei primi e-commerce — società che venne venduta nel 1998 a Yahoo per 48 milioni di dollari.

Nel 1999 conclude il dottorato ad Harvard e si unisce al MIT, collaborando come ricercatore nel campo dei computer networks. Nel 2005, sempre assieme a Graham, Morris fonda Y Combinator, leggendario accelleratore di Startup della Silicon Valley. E come se non bastasse rilascia anche una variante del Lisp, un dialetto chiamato Arc. Oggi Robert Morris è uno stimatissimo scienziato informatico. Di quegli anni ’80, e del suo “bambino difficile” — tanto per citare Albert Hofmann quando parlava del suo LSD — non ha mai voluto rilasciare interviste. Quello che è certo è che quel worm cambiò per sempre la cybersicurezza, e ancora oggi è considerato dalla comunità dei programmatori e di tanti hacker un modello. Nel bene e nel male.

Seguici su Facebook e Twitter