Accesul la site-urile si aplicatiile pe care le folosim zi de zi se bazeaza pe validarea identitatii noastre, astfel incat nimeni altcineva care nu stie credentialele sa nu poata sa ne intre in cont. Din nefericire, de cele mai multe ori tot ce sta intre un atacator si datele noastre este o parola, chiar una simpla, Parolele nu sunt un lucru rau, dar suntem oameni si cand avem de ales o parola vom avea grija sa alegem drumul de minima rezistenta: vom alege o parola usor de tinut minte si usor de scris inspirata din viata noastra (zi de nastere, numele cuiva drag, anotimp preferat, etc). Ceea ce pentru un atacator se traduce in usor de ghicit. Un exemplu perfect despre cum ne alegem parolele poate fi urmarit aici. Nici parolele complexe cu o entropie mare nu sunt infailibile. Daca un hacker are la dispozitie suficiente resurse computationale si suficient timp, nicio parola, oricat de mare si de complexa ar fi, nu este in siguranta.
Hackerii au in arsenalul lor diverse tehnici si metode prin care incearca sa obtina accesul la conturile noastre.
O metoda care nu implica niciun skill tehnic este ingineria sociala. Atacatorul poate pretinde ca este cineva din departamentul IT al companiei, poate impersona un reprezentant al unei banci sau alte scenarii similare si incearca sa convinga utilizatorul sa ii comunice parola pentru ca “sunt probleme cu accesul la un server”, “pentru a va valida identitatea” sau motive asemanatoare.
Un alt atac care nu implica cunostiinte tehnice este cel prin care, pe baza informatiilor colectate despre utilizator, hacker-ul incearca sa deduca parola. Retelele de socializare, blogurile, articole in presa, stirile sunt o sursa excelenta de OSINT (Open-Source intelligence) care servesc drept material de baza in profilarea unei tinte si in oferirea de indicii despre parolele alese de utilizator.
Atacurile criptografice se bazeaza pe tehnica de brute force si variante ceva mai elegante ale acesteia.
Brute force.
Un astfel de atac incearca toate combinatiile posibile de caractere care pot forma o parola pana la ghicirea celei potrivite. Este un atac care consuma mult timp si multe resurse hardware. Pentru a grabi lucrurile atacatorii pot folosi o lista de parole numita si “wordlist” care poate contine chiar si milioane de parole sparte in urma unor brese de securitate, de exemplu listele puse la dispozitie de SecList sau rockyou. Unelte software care pot fi folosite, de exemplu John the Ripper sau Hydra, sunt si ele open-source si sunt preinstalate in distributii de Linux precum Kali sau ParrotOS. Hackerii pot compromite astfel orice protocol care impune folosirea autentificatii utilizatorului: HTTP, FTP, VNC, SMB, SSH, etc. Un atac brute force este destul de rudimentar: necesita mult timp si o doza mare de noroc, mai ales pentru parolele mai complexe. Un dezavantaj major este ca hackerul nu poate lansa oricat de multe incercari de conectare pentru ca serverul impotriva caruia se incearca login-ul va fi victima unui atac DoS, care nu va mai oferi promptul de conectare niciunui utilizator, inclusiv nici hackerului. Plus ca un bun Dev va folosi filtre care sa blocheze “spam-ul” de login-uri care provin de la aceeasi adresa IP.
Rainbow table.
O varianta mai eleganta a atacului brute force implica folosirea unui rainbow table. Un rainbow table este similar cu un wordlist, dar in loc de parole in clar contine hash-urie de parole. Cel mai adesea serverele care gazduiesc aplicatiile si site-urile pe care avem conturi pastreaza parolele sub forma de hash, desi unele aplicatii legacy si chiar sisteme de operare le pastreaza in clar 🙂 Un hash este ceea ce rezulta atunci cand parola este oferita ca data de intrare unui algoritm precum MD5, SHA-1 sau SHA-2. Principala caracteristica a unei functii de hashing este unidirectionalitatea. Daca hash-ul este compromis, atacatorul nu poate inversa functia. Atunci cand ne conectam, serverul ia parola transmisa de utilizator si o supune functiei de hashing. Rezultatul este comparat cu hash-ul pastrat pe server in dreptul utilizatorului. Daca cele doua hash-uri sunt identice, inseamna ca am furnizat parola corecta si suntem autentificati. Problema apare atunci cand serverul este compromis si bazele de date care stocheaza hash-urile cad in mainile atacatorilor. Adica, titlurile din presa cand se anunta o bresa de securitate. Hackerii pot lua un wordlist, pot folosi MD5 sau SHA-1 sau alt algoritm de hashing si obtin un wordlist de hash-uri, adica un rainbow table, o lista precalculata de hash-uri. Apoi compara hash-urile din baza de date furata cu cele calculate si vede care sunt identice, obtinand parola utilizatorului. Pe Internet se pot gasi suficiente exemple de rainbow tables deja calculate si gata de a fi puse la munca. Just Google it 🙂 Ca o paranteza, MD5 si SHA-1 sunt considerabile functii de hashing vulnerabile si se recomanda evitarea lor.
Credentialele de login sunt bunuri tranzactionate pe Dark Web si sunt printre cele mai profitabile surse de venit pentru atacatori, de aceea sunt o tinta predilecta a acestora. Atacatorii dezvolta in mod constant noi metode de a compromite parolele si le rafineaza pe cele vechi pentru a le maximiza eficienta. Mentinerea la zi a sistemelor si a aplicatiilor, aplicarea patch-urilor de securitate, folosirea parolelor lungi si complexe, gestionarea parolelor cu un program de password management si implementarea unui pas aditional de verificare la autentificare (2FA/MFA) sunt cateva din masurile de securitate pe care le putem lua pentru a ne pastra parolele in siguranta.
Mihai Dumitrascu, Sr Systems Engineer