l6k10ky
Programul fingerd este un utilitar care permite obtinerea de informatii despre
utilizatori. De obicei, este folosit pentru a identifica numele intreg sau
numele de conectare (login) al unui utilizator, daca acesta se afla in sesiune
si posibil, alte informatii despre persoana respectiva, cum ar fi numerele de
telefon etc. Acest program este rulat ca daemon sau proces in fundal (background),
pentru rezolvarea cererilor de informatii venite de la distanta, utilizandu-se
protocolul fingerd, Acest program accepta conexiuni de. la programe ce ruleaza
in alta parte, citeste linia de intrare si trimite raspuns receptorului
care a adresat intrebarea.
Punctul slab exploatat, prin care se "sparge" acest program, implica
modificarea buffer ului de intrare folosit de acesta. Biblioteca f/0 a limbajului
C are cateva rutine care citesc intrarea fara a verifica limitele buffer-ului
implicat in aceasta operatiune. In particular, apelul functiei gets
preia datele de intrare intr-un buffer, fara a face verificarea limitelor
acestuia. Apelul acestei functii a fost exploatat de Vierme. Rutina gets nu este
singura care are acest neajuns. O intreaga familie de rutine din biblioteca
C-ului face posibila depasirea buffer ului, atunci cand se decodifica intrarea
sau cand se formateaza iesirea, daca utilizatorul nu specifica explicit
numarul de caractere pentru conversie.
Cu toate ca programatorii experimentati sunt cunoscatori ai acestor probleme,
multi dintre ei continua sa foloseasca aceste rutine. Necazul este ca orice server
de retea sau program privilegiat, care utilizeaza aceste functii, poate fi compromis
datorita utilizarii unei intrari improprii. Interesant este ca recent, au mai
fost descoperite inca doua comenzi in standardul BSD UNIX, care au
aceasta problema.
Dupa atacul asupra INTERNET-ului au fost relevate mai multe probleme potentiale
si mai multe modalitati de a le inlatura, dar cu toate acestea, biblioteca
cu aceste rutine continua sa fie utilizata.
Programul Sendmail
Programul sendmail este un serviciu de posta electronica, destinat sa ruteze
scrisorile intr-o retea eterogena. Programul are mai multe moduri de operare,
dar unul dintre acestea este exploatat de Vierme si implica lansarea serviciului
ca proces in background (daemon). In acest mod de lucru, procesul
se afla in starea de "ascultare" la un port TCP (25), pentru
a face distribuirea postei sosite prin protocolul standard INTERNET, SMTP (Simple
Mail Transfer Protocon. Cand o astfel de situatie este detectata, procesul
intra intr-un dialog cu un alt proces de la distanta, pentru a determina
expeditorul, destinatarul, instructiunile de distribuire si continutul mesajului.
Punctul slab exploatat in sendmail este legat de o optiune de depanare
a codului. Viermele transmite comanda DEBUG la sendmail si apoi specifica destinatarul
mesajului, ca un set de comenzi si nu ca o adresa utilizator. Intr-o operatiune
normala, acest lucru nu este permis; insa, in activitatea de depanare
a codului este posibila verificarea postei sosite pentru un anumit destinatar,
fara a se apela rutinele de adresare. Prin utilizarea acestei optiuni, testele
pot rula programe care sa afiseze starea sistemului de posta, fara trimiterea
de mesaje sau stabilirea unei conexiuni. Aceasta optiune de depanare este adesea
utilizata tocmai datorita complexitatii configurarii lui sendmail.
Programul sendmail este de mare importanta, mai ales pentru sisteme UNIX derivate
din BSD, deoarece manuieste procese complexe de rutare si distribuire
a postei. Totusi, in ciuda importantei mari si a utilizarii largi, cea
mai mare parte a administratorilor de sisteme stiu putin despre felul in
care lucreaza sendmail. Desi sunt relatate multe aparitii de driver e scrise
de administratori de sisteme sau modificari aduse Kernel-ului, nimeni nu a adus
inca modificari la sendmail sau la configuratia fisierelor sale. In
concluzie, punctele slabe prezentate in sendmail sunt putin cunoscute,
iar unele dintre ele sunt depistate si comunicate pe masura descoperirii lor.
Parole
Una din "piesele de rezistenta" ale Viermelui implica incercarea
de a descoperi parolele utilizatorilor. In sistemele UNIX, utilizatorul
furnizeaza o parola ca semn de verificare a identitatii. Parola este criptata,
utilizand o versiune a algoritmului DES, iar rezultatul este comparat
cu rezultatul criptarii anterioare, prezent in fisierul letclpasswd. Daca
acestea coincid, accesul este permis. In acest fisier nu sunt incluse
parolele in clar si algoritmul se presupune a fi neinversabil; deci, fara
cunoasterea parolei nu avem acces.
Organizarea parolelor in UNIX permite unor comenzi neprivilegiate sa utilizeze
informatii din fisierul /etc/passwd si sa acceseze schema de autentificare a
parolelor. Deci se permite un atac prin criptarea unei liste cu parole posibile
si compararea rezultatelor cu fisierul letclpasswd, fara a se face apel la o
functie sistem, special dedicata. De fapt, securitatea parolelor este asigurata
in principal prin numarul mare de incercari ce trebuie efectuate
pentru a le determina, cu toate combinatiile de caractere posibile. Din nefericire,
exista masini care lucreaza rapid si costul unei astfel de actiuni este in
continua descrestere, datorita rapiditatii dezvoltarii produselor hard.
Divizand procesul pe mai multe procesoare, se reduce mult timpul necesar
determinarii unei parole. Astfel de atacuri sunt usurate mult, atunci cand
utilizatorul alege drept parola un cuvant comun sau des folosit. In
acest caz, toata cautarea se rezuma la determinarea parolei prin verificarea
unor cuvinte comune, existente intr-o astfel de lista (vezi capitolul
2).
Viermele utilizeaza pentru spargerea parolei un astfel de tip de atac. In
acest sens se foloseste o lista de cuvinte standard, cuvinte care sunt considerate
a fi parole posibile. Viermele asigura criptarea lor prin intermediul unei versiuni
rapide a algoritmului de cifrare si apoi, compara rezultatul cu continutul fisierului
/etc/passwd. Deci Viermele exploateaza accesul la acest fisier, cuplat cu tendinta
utilizatorilor de a alege cuvinte comune drept parole.
Un defect discutat in prezent si care a fost exploatat de Vierme implica
utilizarea sesiunilor de incredere. Una din facilitatile utile ale soft-ului
de retea al lui BSD UNIX este suportul de executie a proceselor pe masini aflate
la distanta. Pentru a se evita repetarea tiparirii parolelor pentru accesul
in conturi aflate la distanta, se asigura posibilitatea unui utilizator
de a specifica o lista cu perechi gazda/cont, care sunt considerate a fi de
incredere, in sensul ca un acces la distanta de la calculatorul
gazda la acel cont se face fara a utiliza parola contului respectiv. Acest aspect
este responsabil de numeroasele accese neautorizate la calculatoare, dar continua
sa fie utilizat, fiind convenabil. Viermele a exploatat acest mecanism prin
incercarea de a localiza host-urile de incredere si a determina
perechile corespunzatoare. Acest lucru a fost realizat prin examinarea de catre
Vierme a fisierului de pe host-ul curent, care contine perechile host/conturi.
Odata ce Viermele gaseste astfel de candidati, va incerca, in modul
cel mai rapid, sa se autoinstaleze pe aceste masini, folosind facilitatea executiei
la distanta, copiindu-se pe sine pe masina de la distanta, ca si cum ar fi un
utilizator autorizat, care efectueaza o operatie standard de la distanta. Pentru
a inlatura astfel de incercari in viitor, este necesar ca actualul
mecanism de acces la distanta sa fie anulat si inlocuit cu ceva nou. Un
mecanism nou creat, care se apropie de cerintele de mai sus, este server ul
de autentificare Kerberos (vezi subcapitolul 7.4).