Soluții - PC Magazine Romania, Iulie 2004
Securitatea Rețelei [9]
Chasing shadows: Analiza unui sistem spart
Mircea Scărlătescu
Există zeci de moduri în care îți poți da seama că rețeaua ta a fost spartă.
Ceea ce vei citi este cât se poate de real: așa lucrez eu când trebuie să văd
ce s-a întâmplat "peste noapte".
Trebuie să încep prin a spune că analiza decurge, în mare, la fel, atunci când
ai de-a face cu Windows2000/XP/NT, cu unele excepții (fișiere ca .bash_history).
Motivul pentru care am fost, azi, ceva mai Linux-centric decât de obicei este
că am vrut să vă prezint o situație reală. Și realitatea este că stațiile din
rețeaua pe care am examinat-o aveau Linux instalat…
Parcă mergea mai repede…
Există mai multe lucruri care ar trebui să te îngrijoreze. Nu are nici un sens
să fii paranoic și să începi să verifici fiecare stație din rețea imediat ce
ajungi la lucru.
Lucrurile se schimbă radical pe o stație spartă. Un atacator vrea să facă următoarele
lucruri: să pătrundă în rețea, să-și acopere urmele, și să lase o "poartă"
deschisă, în caz că va dori mai târziu să reia atacul. De aceea, el trebuie
să modifice foarte serios stația pe care a obținut acces.
Cele mai evidente probleme sunt întârzierile mari de la logare și rezultatele
ciudate cauzate de comenzile uzuale. Aceste două simptome apar din cauza aplicării
unor patch-uri asupra utilitarelor de sistem (/bin/*), pentru a servi mai bine
cracker-ului.
În cazul meu, am întâlnit o întârziere abia perceptibilă la logarea stației
192.168.141.5 Iiată completă cu mașinile din rețea :
192.168.141.1 - router, Linux Red Hat 5.2
192.168.141.2 - firewall, Linux Slackware 8.1
192.168.141.3 - stație Linux Slackware 8.1 cu XFree
192.168.141.4 - stație Linux Red Hat 9.0 cu XFree
192.168.141.5 - stație Linux Slackware 8.1, fără XFree
192.168.141.6 - stație Windows 3.1/DOS (pentru cursul de arheologie J)
192.168.141.7 - stație Linux Red Hat 7 cu XFree
192.168.141.8 - statie beOS, rulând în rețea, serverul pentru Intranet
192.168.141.9 - server de fisiere, Linux Debian, fără XFree
192.168.141.10 -....
192.168.141.11 -....
192.168.141.12 -....
192.168.141.13 -....
192.168.141.14 -....
192.168.141.15 -....
Ea ar fi trebuit să fie un server www, dar nu avusesem timp să instalez sistemul
de operare seara și, pentru că era prima dată când trebuia să configurez apache,
am lăsat mașina pornită, am tipărit câteva documente pe imprimanta de rețea
(instalasem demonul, dar nu îl configurasem) și cam atâta.
A doua zi, sistemul era instalat, dar era oarecum mai lent decât mă așteptam
pentru un Slackware. M-am gândit un moment că pornisem prea multe procese, sau
că aveam vreo greșeală de configurare. Sincer, numai din curiozitate am trecut
la 192.168.141.3 și am folosit finger. Rezultatul m-a cam întors pe dos:
root@ad: finger @192.168.141.5 Login: root Name: (null) Directory: /root Shell: /bin/bash On since Sun Mar 15 04:40 (EET) on tty1 No plan
La ora aceea nimeni, dar nimeni nu putea să se logheze ca root. În plus de
asta, eram cât se poate de sigur că nu lăsasem mașina pornită logat ca root
- ar fi fost o sinucidere curată!
Am trecut deci la treabă. Citind fișierele din /var/log (locația fișierelor-jurnal
sub Linux), am întâlnit următoarea linie:
MAR 15 02:32:31webserver Invalid password for ´root´ on ´tty1´
Asta nu e de la mine! Păi ia stai așa…
MAR 15 02:32:32webserver Invalid password for ´operator´ on ´tty1´ MAR 15 02:32:32webserver Invalid password for ´admin´ on ´tty1´ MAR 15 02:32:34 webserver Invalid password for ´games´ on ´tty1´ MAR 15 02:32:34webserver Invalid password for ´news´ on ´tty1´ MAR 15 02:32:36 webserver Invalid password for ´mail´ on ´tty1´ MAR 15 02:32:38 webserver Invalid password for ´www´ on ´tty1´
"Ceva" a luat la rând tot fișierul /etc/passwd încercând o parolă
- nu știu exact care. Un moment, m-am temut că atacatorul a reușit să-mi fure
fișierul cu parole, dar n-a reușit să le spargă - în schimb, având o hartă cu
numele de utilizatori, putea găsi unul neprotejat. M-am speriat degeaba - contul
´operator´, de exemplu, știam sigur că nu a existat niciodată pe
acea mașină. Probabil că ar mai fi încercat mult și bine prin bruteforce, dacă
n-ar fi întâlnit contul lp (imprimanta de rețea), pe care, în grija mea de a
configura apache, nu l-am protejat cu parolă L.
Acesta a fost momentul în care toată securitatea rețelei mele a fost compromisă.
Dar asta nu explică totul. S-a logat user-ul lp, dar cum a ajuns root?
Am aruncat o privire în /etc/passwd și am intrat în directorul home al user-ului
"lp". Nimic în neregulă, am crezut eu:
root@ad:/var/spool/lpd# ls \ ./ \ ../
Ba chiar m-am bucurat văzând că atacatorul nu se luase de fișierul meu cu alias-uri
(de fapt, prin ´ls´ eu vroiam să se-nțeleagă ´ls -a´,
care arată și fișierele ascunse). Am continuat cu tot ceea ce știam că e logic:
fișierele-jurnal care nu fuseseră șterse (unele fuseseră). Marele meu noroc
a fost că cel care mă atacase nu și-a dat seama că mașina mea consemnează și
logările eșuate (logarea ca ´lp´ nu fusese eșuată… deci nu
a fost consemnată, dar eu știam că lp nu e protejat prin parolă!).
După vreo două ore de săpat printre fișiere, am văzut totuși că e ceva în neregulă.
Unele din alias-urile mele nu mergeau. De fapt, nu mergea cam nici unul. Și
totuși, cum se face că îmi arătase fișiere ascunse "." și ".."
de mai sus?
Abia atunci mi-am dat seama: fișierele acelea nu erau ascunse! Nu mă credeți?
Ia mai uitați-vă un pic:
root@ad:/var/spool/lpd# ls \ ./ \ ../
Cam multe slash-uri pentru gustul meu. Așa că am încercat:
root@ad:/var/spool/lpd# ls -a . / .. / \ ./ \ ../
Dacă nu vă dați seama imediat din cauza fontului folosit, încercați așa: "."
este ascuns și înseamnă "directorul curent". În schimb, "."
("[spațiu]." ) este un director creat de altcineva!
În cadrul lui se aflau câteva fișiere și anume un patch pentru fișierele din
/bin și un exploit scris, probabil, în ASM. Exploit-urile sunt programe mici
care permit obținerea anumitor privilegii prin tehnici avansate de programare.
Se pare că privilegiile fuseseră foarte mari J de vreme ce atacatorul obținuse
acces ca root.
Iată, pe românește, ce s-a întâmplat: eu am lăsat mașina pornită seara. Greșeala
mea, mai ales că, încercând să configurez apache pentru a folosi cgi și php,
uitasem să adaug o parolă pentru contul lp (serverul pentru imprimantă era "pe
butuci" și a trebuit să improvizez). Atacurile prin bruteforce au reușit,
în sensul că atacatorul a găsit un cont neprotejat. A intrat, și a folosit exploit-ul
pentru a deveni root și a patch-ui fișierele din /bin ca să-și ascunde urmele.
Mai târziu, am descoperit chiar că adăugase un cont cu username ´Root´
(diferit, în Linux, de ´root´ - Linux e case sensitive) și o parolă
pe care n-am reușit s-o sparg. Oricum, am șters contul.
Apoi…
Evident, se punea problema ce voi face cu stația? Era un pericol potențial,
poate că nu descoperisem toate "găurile". Iată ce trebuie făcut, în
ordine, pentru a reintegra în rețea o mașină care a fost spartă.
Mai întâi, deconectează imediat masina din rețea. Nu poți știi niciodată când
va avea loc următorul atac. După ce ți-ai dat seama cum a avut loc penetrarea
rețelei, crează imagini ale disk-ului și pune-le undeva la păstrare. Dacă vei
avea vreo discuție cu Poliția, aceste imagini pot constitui dovezi!
Apoi salvează toate documentele importante care nu pot conține viruși sau exploit-uri
- documente, imagini sau MP3-uri. Acestea le vei păstra pentru reinstalarea
de după. În nici un caz să nu refolosești programe, script-uri cgi/bash, pentru
că ar putea fi potențiale porți pentru alți crackeri. Formatează hard-disk-ul
și reinstalează sistemul de operare. Reconfigurează-l, având grijă să acoperi
poarta tocmai descoperită. Abia acum poți reconecta mașina în rețea.
N-ai terminat! Ai grijă, dacă o mașină a fost spartă, e posibil să fii fost
și altele. Verifică și celelalte stații pentru intruziuni similare. Abia după
ce te-ai asigurat că totul e în ordine și acolo, poți fii liniștit. Ai scăpat
și de data asta!
A mai trecut de-atunci ceva…
Și cu asta se încheie ultimul articol din serie. Eu voi continua să scriu despre
acest subiect, dar asta nu este suficient (sau, oricum, n-ar trebui să fie suficient
pentru tine). Pentru mine nu e niciodata…J. La fel ca în toate numerele,
închei prin a te încuraja să te informezi cât mai bine, pe cât mai multe căi.
Grupurile USENET (poți folosi serviciul Google Groups dacă nu vrei să te chinui
prea mult cu newsreadere și alte asemenea) sunt surse excelente de informații.
Nu ezita să postezi pe forumuri, ți se va răspunde mereu la întrebări dacă știi
cum să le pui. Internetul e plin de hackeri wannabe care se vor ofusca la o
întrebare mai amatoricească ("trebuia să știi deja", "hacker
ești tu sau ce?"), dar hackerii și administratorii adevărați îți vor răspunde
dacă le arăți respect.
Securitatea este un domeniu foarte complex. Nu poți învăța nimic dacă nu faci
decât să citești și să întrebi. Dacă nu ai o rețea "serioasă", fă
rost de Virtual PC sau de VMWare Workstation, care îți vor permite să folosești
o rețea virtuală pe un singur calculator. Încearcă orice afli nou pe rețeaua
asta, astfel nu vei intra în conflict cu legea. Ceea ce nu vrea
să-nsemne că, atunci când vei știi mai multe, e cazul să o faci. Reține că
granița între un hacker și un cracker este foarte subțire. Hackerii au adus
numai beneficii lumii TI (inventariem? TCP/IP, Internet-ul deci, www, C/C++,
Linux, Python…), dar crackerii doar au tras-o în jos. Primii sunt apreciați
pentru ceea ce fac, iar faptul că nu totdeauna fac lucruri tocmai legale nu
este un impediment pentru autorități (decât în cazuri rare). Crackerii nu sunt
tocmai apreciați, iar condamnarea lor mi se pare mai mult decât îndreptățită.
Cu asta se încheie ultima parte din Securitatea Rețelei. Dar, cum spuneam,
I´ll be back for more…
|