Iata cateva metode de atac asupra unui sistem UNIX.
1. Local DOS attack. D.o.S. - denial of service.
Se poate realiza prin:
- epuizarea memoriei, a resurselor procesorului sau a spatiului pe HDD. In cazul epuizarii resurselor ( o bomba fork()) - sistemul devine inutilizabil pana la resetare.
- epuizarea spatiului pe HDD: ca rezultat sistemul nu va putea functiona normal, toate incercarile de a scrie ceva in loguri vor esua. Acest sistem nici nu va putea boota dupa un reset, pana nu va avea
ceva spatiu liber pe hard disk.
Aceste probleme pot fi preintimpinate usor - prin setarea unor limite asupra reusrselor procesorului, resurselor memoriei, numarului maxim de procese, numarului maxim de fisiere deschis la un moment dat. Epuizarea spatiului pe HDD poate fi preintimpinata inca de la instalarea sistemului de operare, prin alocarea unor directoare "critice" (/var/log, /tmp, /var, /home ) partitii separate.
In asa fel daca spatiul liber de pe o partitie este epuizat, sistemul va continua sa functioneze (pana la un moment dat desigur). La fel, aceasta are si avantajul ca putem mounta diferite partitii cu diferite optiuni (/home nu are de ce sa contina fisiere cu bitul suid setat, precum si /tmp nu are de ce sa contina executabile).
2. Remote D.o.S. attack: Scopul - de a scoate sistemul din functiune pe o perioada de timp.
Acest tip de atac poate fi clasificat in 2 categorii:
a)Atacul prin executarea unui numar mare de cereri catre serviciul oferit de un daemon al sistemului.
b)Atacul asupra unor servicii vulnerabile. Pentru realizarea primului tip de atac nu este nevoie de multe cunostinte in domeniu, ci de o legatura buna la reteaua la care este conectata si victima atacului (cum ar fi internetul). Principiul de baza al acestui tip de atac consta in proiectarea proasta (din punct de vedere a securitatii) a protocolului TCP/IP.
Dupa cum se stie, atunci cand se produce o legatura tip client-server, serverul asculta pe un anumit port, la care clientul trimite o cerere de legatura - un pachet ce contine in header bitul SYN setat (bitul ACK lipseste), iar in pachetele urmatoare - este setat bitul ACK ( SYN lipsind). In continuare, in mod normal, serverul va raspunde la primul pachet al clientului cu cu un pachet cu bitul ACK setat (semn ca a primit primul pachet al clientului) , si un SYN request de sincronizare.
Atunci cand clientul primeste acest raspuns de la server, legatura se considera stabilita. Pana la acel moment , conexiunea se considera a fi pe jumatate deschisa.
In tipul de atac pe care incerc sa-l descriu acum, se foloseste anume acest stadiu de initiere al unei conexiuni. Pe masina atacatorului se creeaza o multime de pachete cu bitul SYN setat, care se trimtit serverului. Ca rezultat, serverul atacat (presupunem ca e un server web) va fi ocupat o perioada numai de prelucrarea acestor conexiuni .
In continuare, totul depinde de setarile masinii victime, precum si alte conditii. In cazul in care pachetele trimise au avut ca adresa sursa adresa unei masini existente in retea, victima nu va avea
de suferit mult, deoarece inca la a 3 etapa va inchide conexiunea, din cauza ca masina din numele careia au fost trimise pachetele nu stie nimic despre ele.
O alta problema apare daca pachetele au fost trimise din numele altei masini, inexistente in retea. Serverul va avea de asteptat ceva timp pana va inchide conexiunea, el asteptand raspuns de la o masina inexistenta, astfel resursele sale vor fi ocupate mai mult timp.
In acest caz - avem 2 posibilitati de evolutie -
1.In caz ca administratorul masinii victime a setat restrictii asupra numarului de conexiuni "in asteptare" , nu se va intimpla nimic grav, doar masina victima nu va putea prelucra cererile unor utilizatori care vor sa acceseze legal resursele sale (si aceasta poate fi pana la urma scopul atacatorului ! ).
2.Resursele vor fi consumate, pana la epuizare, urmatoarele cereri vor fi prelucrate tot mai lent, pana la urma se poate ajunge ca toate resursele sistemului sa fie aruncate in prelucrarea cererilor atacatorului. In final masina atacata va suferi un crash, sau va fi mult timp indisponibila in retea, pana nu va prelucra toate cerereile trimise. Al doilea tip al atacurilor D.o.S. remote - au loc datorita erorilor de programare, altfel spus a bugurilor existente in software-le ce ruleaza pe
masina atacata.
Aici avem :
- buguri la nivel de OS
- buguri la nivel de program/serviciu
In cazul bugurilor din programe - cel mai des sunt exploatate erorile ce duc la "buffer overflow" - supraincarcarea bufferului acordat unui program. De exemplu, exista un oarecare program - care asteapta input-ul utilizatorului, si il trimite intr-un fisier. Programatorul care a creat-o , a alocat pentru buferul input-ului doar 65536 biti. In continuare - e de ajuns ca atacatorul sa trimita programului un input mai mare de 65536 biti, ca rezultat se produce un "buffer
overflow".
Cel mai ades atacatorul foloseste aceasta pentru a porni un shell - interpretor de comenzi pe masina atacata. Privilegiile cu care va rula interpretorul de comenzi dat, sunt acelea ale programului vulnerabil la respectivul "buffer overflow".
Bugurile la nivel de OS sunt mai complicate: Scopul atacatorului este ca kernelul, sau un modul al kernelului sa nu poata prelucra o situatie critica aparuta, ca rezultat - apare un fenomen numit "kernel panic" (panica a kernelului sistemului de operare *nix) . Consecinte - reboot imediat, indisponibilitatea sistemului in retea, etc.
Cum vom lupta cu aceasta - in cazul primului tip de atac - SYN flood putem folosi mecanismele implementate in sistemul de operare (mecanismul tcp-syncookies implementat in Linux - compilarea kernelului cu suport de tcp_syncookies si echo "1" > /proc/sys/net/ipv4/tcp_syncookies
la initierea sistemului) , cresterea cozii de conexiuni aflate pe jumatete deschise (aflate in starea SYN RECEIVED), precum si scaderea perioadei de pastrare a conexiunilor in aceasta stare.
Altceva - limitarea resurselor alocat unui program server. Chiar si limitarea cu o cifra mare, dar oricum limitarea. Aflarea coordonatelor atacatorului in majoritatea cazurilor va fi imposibila (sigur ca va folosi adrese ip false) . Numarului celui de-al doilea tip de atac s poate reduce prin updatarea regulata a soft-ului folosit, precum si
citirea/urmarirea regulata a listelor de discutii, forumurilor avand ca tematica securitatea, pentru a fi la curent cu toate vulenrabilitatile descoperite , si a fi cu un
pas inaintea atacatorilor potentiali.
3. Local root attack. Aceste atacuri sunt mult mai periculoase, deoarce rezultatul final este obtinerea drepturilor super-utilizatorului , care poate face orice pe un
sistem Unix (in mod standard, nu luam in consideratie folosirea unor patchuri gen grsecurity, rsbac, openwall), inclusiv stergerea unor fisiere importante, compromiterea unei informatii confidentiale, efectuarea altor atacuri de pe aceasta masina.
Acest tip de atac este cel mai des utilizat (si cea mai simpla metoda de a obtine drepturi de supr-user pe un sistem Linux). De obicei atacatorul capata drepturi locale pe sistem exploatand buguri in daemonii de sistem, si apoi isi ridica privilegiile). Avand acess local, o persoana poate gasi mult mai usor un program
vulnerabil.
In continuare - schema veche - "buffer overflow", daca programul are bitul suid setat (aruncati o privire in /usr/bin, /bin, veti gasi o multime acolo). Unele programe ruleaza sub utilizatorul root, ele dupa specificul lor au nevoie de access in diferite locuri ale sistemului. Un astfel de program e un "cadou" unui cracker.
4. Remote root attack. Algoritmul este asemanator cu cel al atacurilor D.o.S. directionate catre un program vulnerabil, insa acum atacatorul trebuie sa actioneze asupra unui program care ruleaza cu uid 0, sau are bitul sticky setat. Astfel atacatorul obtine un root shell de la distanta, ceea ce e foarte periculos.
Altele:
5. race condition attacks
6. syn flood, TCP RST, bogus ICMP
7. TCP desincronization and hijacking
8. Eavesdropping
9. man-in-the-middle attack
10. dns attacks (cache poisoning, etc)
Si nu uitati, ca sistemul tinde sa devina mai vulnerabil cu timpul, odata cu descoperirea unor vulnerabilitati noi, sau odata cu crearea unor deficiente in securitate de catre admini sau useri incompetenti.