Apr 11, 2014 - Securitate IT    No Comments

Despre vulnerabilitatea Heartbleed

A trecut destul de mult timp de la ultima postare pe acest blog. Din păcate timpul nu îmi permite să mă mai ocup de blog așa cum mi-ar plăcea, dar evenimentele din ultima vreme m-au făcut să îmi rezerv puțin timp pentru a descrie o vulnerabilitate intens mediatizată – Heartbleed.

Voi începe prin a descrie conceptul Heartbleed, într-un mod accesibil și celor mai puțin familiarizați cu programarea și domeniul IT în general. Heartbleed este un bug (eroare de programare) ce afectează OpenSSL, un program ce implementează protocoalele SSL și TLS, prin care se asigură securitatea serverelor din Internet. Prin SSL se realizează criptarea (secretizarea) datelor transmise, mai ales în cazul serviciilor de e-mail (GMail, Yahoo, etc.), a serviciilor de internet banking și a site-urilor care solicită autentificarea utilizatorilor. Daca folosim Chrome sau Firefox și accesăm un site care oferă servicii securizate prin SSL în bara de adresa va apărea un lacăt, însoțit de obicei de numele protocolului https, considerat până mai ieri unul dintre cele mai sigure protocoale.

Simbol HTTPS

Heartbleed este de fapt o mică eroare de programare, ce cauzează probleme semnificative de securitate. Atunci când se programează într-un limbaj de nivel înalt cum este Java nu există mari probleme legate de modul de alocare/gestionare a memoriei. În schimb atunci când se scrie un program în C/C++, așa cum este cazul OpenSSL, gestionarea eficientă a memoriei revine în sarcina programatorului. Protocolul SSL impune o comunicație periodică de control între client și server, prin care se verifică existența conexiunii. Practic clientul trimite serverului un dimensiunea unui șir de caractere și conținutul acestuia, de exemplu 4 – TEST, iar serverul trebuie să trimită înapoi clientului același șir de caractere. Mecanismul este destul de simplu – serverul primește de la client dimensiunea șirului și textul și le stochează în RAM. Apoi trimite un răspunsul cu lunigmea corespunzătoare din RAM. Problema bug-ului Heartbleed apare pentru că nu se verifică dimensiunea propriu-zisă a șirului recepționat de către server, un atacator putând trimite un șir de genul 65000 – TEST, iar serverul răspunzând cu 65000 de caractere în loc de 4. Cele 64996 de caractere rămase sunt date din memoria RAM a serverului: conturi de utilizator, parole, conținut al e-mailurilor și cel mai grav ar putea fi chiar cheia privată a serverului, un element de securitate deosebit de important, a cărui cunoaștere compromite securitatea întregului server. Un astfel de fenomen poartă numele de buffer overflow attack (underrun în cazul de față). Lucrurile sunt serioase, dar nu extrem de grave întrucât datele din RAM nu sunt stocate tocmai în ordine și pentru orice atacator este destul de dificil să identifice parole, dar nu este imposibil.

O imagine care poate să explice foarte bine mecanismul Heatbleed este prezentată mai jos (sursa xkcd.org):

Ce putem face în legătură cu bug-ul Heartbleed?

Simplii utilizatori pot verifica dacă serverele pe care le utilizează au fost afectate de Heartbleed folosind link-ul http://filippo.io/Heartbleed/. Administratorii de sistem trebuie să actualizeze OpenSSL pentru a elimina bug-ul respectiv.

Câteva site-uri importante au fost afectate de vulnerabilitatea Heartbleed, conform mashable.com:

  • facebook.com
  • instagram.com
  • Google (gmail.com)
  • Yahoo (mail.yahoo.com)
  • Soundcloud
  • Youtube

Recomandarea tuturor experților în domeniul securității informatice este de a schimba cât mai rapid toate parolele pe care le folosiți, nu numai pe site-urile menționate mai sus, ci pe orice site ce ar fi putut fi afectat de vulnerabilitatea Heartbleed.
Așadar … spor la schimbat parole!

Got anything to say? Go ahead and leave a comment!

*