sâmbătă, 3 ianuarie 2009

MD5 a cazut

La multi ani, 2009!

De revelion, cercetatorii in domeniul securitatii au demonstrat ca MD5, creat de faimosul Ronald Rivest, unul din co-autorii Cormen-ului, nu este sigur pentru a fi folosit in PKI (Public Key Infrastructure). Folosind un atac bazat pe o coliziune de hash MD5, au reusit sa creeze un CA fals care sa garanteze pentru un website rauvoitor. Combinat cu DNS cache poisoning, si cu o metoda recenta descoperita de Dan Kaminski de a face acest lucru, un rau-voitor va poate fura datele cartii de credit astfel:
  1. Isi creaza un CA fals, care va garanta autenticitatea unui website fals
  2. Isi alege "tinta", sa spunem www.bcr.ro
  3. Otraveste cache-ul unui server DNS la care apelati cu un IP fals pentru hostname-ul bcr.ro
  4. Gazduieste la acel IP un webserver care livreaza o pagina foarte asemanatoare cu victima, care expune un certificat public semnat de CA-ul fals
  5. Cand deschideti o conexiune sigura criptata HTTPS pentru a introduce datele card-ului dvs., raufacatorul le va prelua si va efectua tranzactii in locul dvs.
Gasiti mai multe detalii (tehnice) mai jos.

Ce e un certificat digital si la ce foloseste? Un certificat este un fisier care contine niste date de identificare publice, si o semnatura a unui Certification Authority (prescurtat de acum CA), care garanteaza veridicitatea datelor. Daca reusesti sa strecori datele dorite de tine si sa falsifici semnatura CA-ului, poti sa te dai drept cine vrei:) Un exemplu real-life ar fi cartea de identitate: contine numele tau si niste elemente de siguranta ale Politiei Romane ca sa garanteze ca e (aproape) imposibil sa fabrici tu unul.

Ce este o pereche (cheie privata, cheie publica)? Cele doua chei sunt 2 numere folosite in algoritmii de criptare asimetrici, astfel incat:
  • data fiind cheia publica, este foarte greu de reconstituit cheia privata (necesita un efort computational enorm - vezi de exemplu problema logaritmului discret)
  • un mesaj criptat cu cheia publica poate fi decriptat doar folosind cheia privata
O analogie putin fortata cu real-life ar fi ca unui infractor ii este greu sa fabrice uneltele necesare pentru realizarea elementelor de siguranta de pe o carte de identitate, chiar daca el detine o C.I.

Ce este un rezumat al unui mesaj? Ce este MD5?
Rezumatul unui mesaj este un numar, de lungime fixata, calculat folosind un algoritm determinist pe baza unui mesaj de lungime oricat de mare. In limbaj popular, este folosit termenul "hash". MD5 este o astfel de functie de hash.

Cum poate fi folosita o astfel de pereche pentru semnarea unui mesaj?
Daca cheile au fost generate cu un algoritm potrivit, atunci cheia privata poate fi folosita pentru a calcula un numar bazat pe un rezumat al mesajului, iar cheia publica pentru a valida faptul ca cel care a semnat mesajul detine intr-adevar cheia privata. Observam ca trebuie ca algoritmul de semnare trebuie sa aiba proprietatea ca este greu de "fabricat" o semnatura dat fiind un mesaj, sau greu de fabricat un mesaj plauzibil data fiind o semnatura.

Cum folosesc browser-ele un certificat? Pentru o conexiune sigura (HTTPS), browser-ul va examina certificatul pe care il publica un site pentru a stabili ca la IP-ul de la celalalt capat al conexiunii se afla "cine trebuie". Pentru ca user-ul este interesat sa transmita date "sensibile", el le va cripta folosind cheia publica expusa in certificat, si detinatorul cheii private (si numai el!) le va putea decripta. Singura problema ramasa este asocierea cheii publice cu website-ul (hostname-ul). Aici intervine certificatul publicat de site, el fiind semnat de un CA.

Si cine imi garanteaza ca acest CA e de incredere? Exista 2 tipuri de ca: root CA si celelalte. Root CA sunt mari si cunoscute, iar certificatele lor sunt incluse in browser-e. Pentru a determina ca un CA e de incredere, un browser urmeaza algoritmul:
  • daca certificatul CA-ului curent se afla in lista mea de root CA, inseamna ca e de incredere
  • daca certificatul CA-ului curent este semnat de un alt CA, atunci ce mai am de verificat este CA-ul care a semnat, si reiau algoritmul pentru el
Bun, si pana la urma, care e problema? Pai totul se bazeaza pe sistemul CA-urilor. Tu te bazezi pe ele ca sa verifici ca un site este cine pretinde ca este. Daca cineva gaseste o metoda sa creeze un CA malitios, acesta poate garanta pentru un website care nu are certificatul corect. Algoritmul de semnare al certificatului unui CA folosea pana nu demult MD5, care este vulnerabil la atacuri de tipul "coliziune": poate fi fabricat un mesaj asemanator cu cel initial astfel incat hash-urile MD5 sa coincida. Asadar, poate fi fabricat un certificat asemanator cu cel initial, cu acelasi hash MD5, si atunci cele doua vor avea aceeasi semnatura digitala, doar ca in cel falsificat am introdus ce informatii am dorit noi. Deci fara a sti cheia privata, am semnat un mesaj in care am pus continutul dorit de noi.

Niciun comentariu:

Trimiteți un comentariu