Viermele ``CodeRed''

Mihai Budiu -- mihaib+@cs.cmu.edu
http://www.cs.cmu.edu/~mihaib/

august 2001

Subiect:
cel mai eficace vierme electronic care a infectat Internetul
Cunoștințe necesare:
cunoștințe elementare despre funcționarea calculatoarelor
Cuvinte cheie:
infecție, vierme, virus, Microsoft IIS


Cuprins




Cu 13 ani în urmă

Pe 2 noiembrie 1988 unele din calculatoarele cuplate la rețeaua numită Internet, care lega o parte dintre marile universități și centre de cercetare americane, au început să exhibe simptome ciudate. Calculatoarele executau tot felul de programe, compilau surse și comunicau cu alte calculatoare din rețea, fără ca cineva să fi inițiat aceste activități. Prima alarmă a fost pornită la universitatea Stanford, la ora 9 seara (ora coastei de est a Statelor Unite), care afirma că majoritatea mașinilor Unix din campus (în număr de vreo 2500) erau infectate de un virus care pornise de la MIT. La ora 10 seara programatorii de la MIT au descoperit și ei o activitate suspicioasă și au încercat să reboot-eze calculatoarele, crezînd că e vorba de un program care a luat-o razna. Cînd au observat însă că, nu mult timp după repornire, calculatoarele re-începeau același lanț de activități bizare, au realizat că ceva mai serios se află la mijloc.

În curînd mesaje de e-mail schimbate cu colegi de la alte universități le-au revelat că atacul era universal: calculatoare din toată America sufereau de aceleași simptome. Au urmat apoi două nopți albe și muncă în foc continuu în care hacker-ii încercau să înțeleagă în ce fel funcționează noul virus care le ataca calculatoarele. La fel ca și cei biologici, virușii de obicei călătoresc în spinarea altor programe, care forțează celulele organismului gazdă să-i multiplice. Programul cel nou era însă autonom; ca atare a fost botezat ``vierme'': era un organism de sine-stătător, capabil să se multiplice și să atace de la sine alte calculatoare.

Cercetătorii au atacat viermele prin mai multe metode:

Viermele acesta era deosebit de virulent și complicat, atacînd stații de lucru Sun și VAX care rulau sistemul de operare Unix de la Berkeley. Viermele folosea mai multe metode de propagare, exploatînd mai multe slăbiciuni în configurarea calculatoarelor și implementarea programelor:

Viermele nu efectua acțiuni distructive, cum ar fi ștergerea de fișiere sau instalarea de conturi ascunse: singurul efect negativ provenea din faptul că mașinile erau infectate în mod repetat, și repede nu făceau altceva decît să execute copii ale viermelui.

Cercetări ulterioare au relevat faptul că viermele fusese creat și lansat de un student la doctorat al universității Cornell, pe nume Robert Tappan Morris. În mod oarecum ironic, Morris este fiul unui alt Robert Morris, care era pe vremea aceea cercetător la National Security Agency, o organizație guvernamentală americană însărcinată cu criptologia.

Robert Morris a fost condamnat la trei ani de închisoare cu suspendare pentru fapta sa, 10000 de dolari amendă și 400 de ore de muncă în serviciul comunității. După terminarea sentinței Robert Morris a terminat doctoratul la universitatea Harvard și începînd din 1999 este profesor la universitatea MIT, lucrînd în domeniul rețelelor de calculatoare. Să nu faceți cumva greșeala să credeți că Morris a avut aceste succese ulterioare datorită pățaniei cu viermele: el a reușit să-și ``repare'' cariera în pofida istoriei cu viermele, pentru că este un ins foarte capabil și inteligent. În prezent refuză să vorbească despre vierme sau să facă cercetare în securitatea calculatoarelor.

O mulțime de rapoarte au descris aceste evenimente în detaliu și au discutat problema securității în Internet imediat după aceste evenimente. Cu toate acestea, nimic nu s-a schimbat...

O problema în serverul de web de la Microsoft

Pe data de 18 iunie 2001 compania Eeye Digital Systems a publicat descoperirea unei probleme de securitate în serverul de web al companiei Microsoft, numit IIS. Bug-ul este de exact aceeași natură ca și în urmă cu 13 ani: buffer overflow. Microsoft a emis o corecție pentru această problemă la scurt timp după aceea.

Cu toate acestea, la ora actuală se estimează că există aproximativ două milioane de calculatoare care rulează acest program, care vine instalat automat cu Windows NT și Windows 2000. Multe persoane probabil că execută acest program fără a ști măcar.

Pe data de 12 iulie a fost semnalată pentru prima oară prezența unui vierme care exploata această slăbiciune. Această prima variantă a viermelui a fost denumită CodeRed versiunea 1; numele provine de la sucul ``Code Red'' care conține un procent ridicat de cafeină, și care i-a ținut treji pe cercetătorii care atacau viermele cu aceleași arme ca în urmă cu 13 ani.

Viermele funcționează în două etape:

Versiunea 1 a viermelui s-a răspîndit foarte lent, din cauză că un vierme nou infectat folosea aceleași adrese generate aleator (pornea de la aceeași ``sămînță'' (seed) în generarea numerelor aleatoare), și ca atare încerca să infecteze mereu și mereu aceleași calculatoare.

Pe data de 19 iulie, în jurul orei 10 dimineață a apărut o variantă mutant a viermelui, care folosea o sămînță generată aleator. Această mică schimbare a avut un impact colosal: pînă la sfîrșitul zilei acesteia viermele a infectat peste 400000 (patru sute de mii) de mașini! Probabil că ar fi infectat și mai multe dacă nu ar fi intrat în faza a doua, care începea pe data de 20 a lunii.

Din fericire viermele verifică existența adresei atacate; pentru a preveni diluviul, administratorii de la Casa Albă au dezafectat serverul care era ținta atacului distribuit. Dacă 400000 de calculatoare din toată lumea lansează un atac simultan în Internet, aceasta poate avea efecte dramatice asupra traficului.

Între timp mass-media a făcut o publicitate enormă virusului; astfel mulți administratori de sistem au aflat de existentă lui și au aplicat corecțiile de la Microsoft. Cu toate acesta, există în continuare un mare număr de calculatoare vulnerabile.

Pe 4 august a apărut un nou vierme, complet diferit, dar care conține textul ``CodeRed2''. Acest vierme exploatează aceeași slăbiciune, dar odată instalat face ravagii pe calculatorul infectat, instalînd conturi ascunse pentru administratori care pot fi apoi folosite de la distanță. În plus, acest vierme are un algoritm special prin care adesea selectează și atacă în mod special calculatoarele din aceeași rețea cu victima.

La ora la care scriu acest articol (pe 27 august) a fost anunțată o a treia mutație a viermelui. Ținînd cont de numărul uriaș de victime și de probabilitatea practic nulă ca toate să fie peticite, e foarte probabil că acest vierme va continua să existe în Internet încă foarte multă vreme.

Legea logistică

Figura 1 arată numărul de calculatoare infectate ca funcție de timp. Axa orizontală este ora iar axa verticală indică numărul estimat de calculatoare infectate. Am descris metoda prin care se poate estima numărul de calculatoare infectate în articolul meu din NET Report din luna iulie. Acest număr se poate estima numărînd atacurile care vin într-o anumită porțiune din rețea de la serverele infectate (această tehnică a fost numită în articolul meu anterior ``împrăștiere''; fenomenul în acest caz este puțin diferit, dar mijloacele folosite pentru estimare sunt aceleași).

Figura 1: Multiplicarea viermelui codeRed versiunea a doua pe data de 19 iulie 2001. Ora este cea a meridianului Greenwich. Această figură este extrasă din pagina de web de la CAIDA, www.caida.org/analysis/security/code-red/gifs/cumulative-ts.gif.
\begin{figure}\centerline{\epsfxsize=12cm\epsffile{replicare.eps}}\end{figure}

Curba din figura 1 are o formă numită ``sigmoidă'', avînd două zone distincte:

(a)
O zonă în care infecția urmează o curbă exponențială; începutul este lent, rata de infecție fiind scăzută, dar după ce un număr suficient de mare de calculatoare este infectat, viteza cu care infecția se răspîndește este uluitoare.

(b)
O zonă în care infecția se plafonează la o valoare limită. În cazul acestui vierme, platoul a fost atins pentru că viermele era pre-programat să-și oprească multiplicarea la ora 24.

Chiar dacă viermele nu este pre-programat să se oprească, trebuie să ne așteptăm ca viteza de infecție să urmărească o astfel de curbă. De fapt, similitudinea cu un organism biologic este din nou frapantă: zoologii care studiază evoluția unei populații animale au descoperit această lege de înmulțire cu mult timp în urmă, și i-au dat și un nume, ``legea logistică''.

Legea logistică poate fi descrisă printr-o formulă aparent complicată, dar care la o analiză atentă este foarte naturală:

dN/dt = rN ((K-N)/K)

Valorile din această formulă sunt:

Putem recunoaște în legea logistică cele două părți ale sigmoidei:

(a)
Zona inițială, în care N este mic comparat cu K. În această zonă fracția dintre paranteze este aproape 1, și legea devine dN/dt = rN, ceea ce prin integrare în raport cu timpul devine N(t) = rt, deci o curbă exponențială. Explicația este naturală: în prima generație avem un calculator, în a doua el va infecta r calculatoare, în a treia fiecare va infecta alte r, deci vom avea r2, apoi r3etc.
(b)
Cînd numărul de calculatoare infectate N devine comparabil cu populația K, tentativele de infecție nu vor mai fi la fel de eficace: mai multe calculatoare diferite vor infecta aceeași victimă, deci generația va crește mai puțin de r ori. La limită, cînd toate calculatoarele sunt infectate K=N), fracția devine (K-N)/K = 0, deci dN/dt = 0, deci populația nu mai crește. [Notă: probabilitatea ca un mesaj să infecteze un calculator "curat" este raportul dintre numărul de calculatoare neinfectate K-N și numărul total de calculatoare K.]

Ceea ce este înspăimîntător este viteza cu care infecția s-a propagat: în doar 24 de ore infecția a acoperit aproape jumătate de milion de calculatoare!

Calculatoare vulnerabile

Viermele CodeRed s-a bucurat de o publicitate enormă în presă: aproape că nu există ziar sau canal de televiziune care să nu fi menționat viermele. Ca atare informația despre atac s-a propagat destul de bine și a atins multă lume prin multe canale. Ne așteptăm deci ca foarte mulți dintre administratorii de sistem să fi luat măsuri aplicînd ``peticele'' de la Microsoft care corectează problemele din IIS.

CAIDA monitorizează și numărul de calculatoare peticite, folosind o eșantionare statistică: dintre calculatoarele infectate inițial, CAIDA alege la întîmplare cîteva și trimite niște cereri prin care poate afla dacă peticele au fost aplicate. Multe din calculatoarele infectate inițial nu răspund la aceste pachete de test, probabil pentru că unele dintre ele nu au adrese IP fixe. Dintre calculatoarele testate însă, graficul din figura 2 arată cîte au fost peticite.

Figura 2: Procentul estimat de calculatoare infectate care au aplicat peticele (patches) de la Microsoft în urma propagării viermelui. Acest grafic poate fi obținut în timp real de la http://worm-security-survey.caida.org/patching.gif.
petice.eps

Concluzii

Din acest text putem extrage două concluzii îngrijorătoare:

Fiți cu ochii pe rețea, cît timp mai există!

Alte surse de informație