Ako prethodnih par dana niste prespavali, onda ste gotovo sigurno čuli za heartbleed bug ili ste makar zapazili čudnu ilustraciju srca sa gore spomenutog sajta. Obzirom da nisam primetio mnogo tekstova o njemu na srpskom jeziku (a realno na skali sigurnosnih propusta od 0-10 ovaj bug verovatno zaslužuje 11) – rešio sam da napišem jedan post u nadi da ću makar malo podići svest naših ljudi na temu sigurnosti njihovih podataka.
Dakle “heartbleed” je u osnovi bug u popularnoj OpenSSL biblioteci ali pre nego krenem u detalje, sledi malo objašnjenje za one sa jeftinijim ulaznicama.
SSL
Po defaultu podaci se preko Weba prenose u običnom tekstualnom formatu. To praktično znači da bilo koji podatak tipa username, password itd. koji iz vašeg browsera šaljete ka nekom sajtu, neko ko bi bio u stanju da presretne vaš Internet saobraćaj može jednostavno pročitati. Zbog toga je firma Netscape još davne 1994 godine uvela SSL koji u najkraćem omogućava enkripciju vaših podataka tako da podaci koji šaljete iz browsera mogu biti apsolutno sigurni. Iako se u početku SSL koristio pretežno na stranama za plaćanje, u današnje vreme popularni sajtovi poput Facebooka i Gmaila celu komunikaciju obavljaju preko SSL-a što čini vaš saobraćaj sigurnim. SSL u vašem browseru možete prepoznati po karakterističnom “katancu” i https konekciji.
Šta je to Heartbleed?
Dakle kao što rekoh gore, heartbleed je u osnovi bug u u popularnoj OpenSSL biblioteci koja predstavlja besplatnu open source implementaciju SSL-a koju između ostalih koriste i veoma popularni Web serveri poput Apache-a i Ngixa. U prevodu ovaj bug utiče na većinu sajtova na Internetu. Detalji o propustu su objavljeni pre tri dana ali “najbolje” od svega je činjenica da ovaj bug faktički postoji 2 godine tako da je svako zlonameran sa dobrim poznavanjem SSL-a i programiranja ovo mogao zloupotrebiti.
Kako radi?
U osnovi radi se o zloupotrebi takozvanog heartbeat requesta koji u suštini služi da klijent sa jedne strane SSL konekcije pošalje mali request serveru kao potvrdu da je još uvek online i dobije taj isti request natrag. Bez da idem mnogo u tehničke detalje, suština zloupotrebe svodi se na broj bajtova koji se šalje kroz request kao dodatni parametar, tj. uz request šalje se i broj bajtova o veličini requesta. Broj bajtova bi trebao odgovarati veličini što je recimo 1bajt, međutim zahvaljujući propustu serveru se može poslati parametar koji je znatno veći od requesta, tipa 65535 što će rezultovati odgovorom sa servera koji će faktički “višak” bajtova nadoknaditi tako što će povući sadržaj iz svoje memorije, dakle nekih 64kb podataka. Obzirom da se SSL koristi za osetljive podatke to znači da će potencijalni napadač dobiti 64KB osetljivih podataka što može biti nečiji password, broj kreditne kartice i sl. Najbolje od svega je da nakon cele akcije ne postoji apsolutno nikakav trag u logovima, što faktički znači da apsolutno niko ko je imao pomenuti propust na svom serveru ne može znati da li je došlo do curenja podataka ili ne!
Za one koji nisu razumeli gornje objašnjenje predlažem da odgledaju sledeći video, verujem da će posle toga stvari biti jasnije.
Šta činiti
Za početak predlažem da se podsetite reči sa Autostoperskog vodiča kroz galaksiju (ako ne znate šta tamo piše – googlajte). Ako znate odlično pošto je odgovor na gornje pitanje – ništa! Tačnije obzirom da gornji propust postoji gotovo 2 godine onaj ko je do sada želeo da dođe do vaših podataka on je to već i učinio! No dobre vesti su da će većina zloupotreba nastati upravo sada i to na sajtovima koji još uvek nisu zakrpili propuste, tako da takve sajtove apsolutno ne bi smeli posećivati!
Dobra stvar je što je svetski community jako brzo reagovao i objavio listu top 1000 sajtova gde propust u danu objavljivanja još uvek nije bio ispravljen (u međuvremenu većina je sređena). Nažalost kod nas je situacija daleko od idealne tako da sam nakon provere samo par sajtova došao do nekoliko kod kojih propust još uvek postoji. Verovatno najveći od njih je sajt Airserbia.com gde sam i sam nekoliko put do sada kupovao avionske karte. Spomenuti sajt (kao i mnogi drugi) testirao sam pomoću pacemaker ulititya koji i sami možete skinuti sa githuba, a za one koji nisu vični CLI-u postoji i Web sajt gde se može obaviti provera (koja doduše traje nešto duže). Rezultat provere airserbia.com i dokaz o propustu možete videti ovde: http://pastebin.com/Mjad0x2w.
Airserbia.com test na fillipo.io
Ono što je svakako neophodno da uradite (koliko god to možda teško zvučalo) je da promenite sve passworde pogotovo za one sajtove na kojima držite osetljive podatke i koji su bili izloženi ovom propustu. Napominjem da je besmisleno a potencijalno i opasno menjati password na sajtu koji još uvek nije zakrpljen, tako da obavezno proverite sa jednim od online alata dole da li je situacija čista pre nego uopšte pristupite sajtu. Takođe (nadam se da u 2014 godini ovo više ne moram da ponavljam) neophodno je da setujete različite passworde za sve sajtove, pošto će u protivnom potencijalnom napadaču biti dovoljno da sa jednim vašim passwordom dobije pristup svim sajtovima koje koristite!
Za kraj nekoliko korisnih linkova.
Online SSL Test
Online heartbleed test
Pacemaker utility
Lista top sajtova i stepen ugroženosti