četvrtak, 18 aprila, 2024
Internet, mreže i komunikacije

OpenSSL: sigurnost ili pretnja

Autor: Petar Simović

Šta je u stvari OpenSSL koji je prouzrokovao neviđeno zlo nazvano Heartbleed?

OpenSSL je open-source implementacija kriptografskog protokola SSL/TLS (SSL – Secure Socket Layer i njegovog naslednika TLS – Transport Layer Security). Ovi protokoli služe za razmenu simetričnog ključa između dva računara kojim se na dalje šifruje sva međusobna komunikacija, ali samo tokom te sesije. Za svaku sledeću sesiju, stari se odbacuju i formiraju sasvim novi ključevi. Možete videti da li se koristi ovakav tip sigurne komunikacije po tome što veb-adrese počinju sa https://, umesto sa http://.

Ranjivost je otkrivena prvog aprila ove godine od strane Codenomicon, firme za veb-sigurnost zajedno sa Google-ovim sigurnosnim inženjerima, a publikovana je tek sedam dana kasnije, kada je izašla i prva zakrpa za ranjivost. Sama ranjivost je u okviru ekstenzije zvane „Heartbeat” za TLS protokol koja je dodata još 2012. godine.

Heartbeat, ili prevedeno „otkucaj srca”, jeste dodatak koji omogućava održavanje uspostavljene sigurnosne komunikacije i u trenucima kada nema aktivne razmene poruka između servera i klijenta. Odlika ovog dodatka je da klijent-korisnik šalje poruku sa brojem koji predstavlja dužinu same poruke serveru na kome je OpenSSL, server odgovara vraćanjem podataka iz bafera u dužini koja mu je prosleđena uz samu poruku korisnika, što bi trebalo da bude ista poruka koju je i dobio od istog. Problem je što nema provere da li je informacija o dužini poruke ispravna, tj. da li je sama poruka baš toliko duga.

Ovakav problem se može eksploatisati tako što napadač koji se na server konektuje, može serveru da šalje „otkucaj srca” sa kratkom porukom od nekoliko bajtova, a da uz to prosleđuje informaciju da je dužina poruke 64 kilobajta. U tom slučaju, server prima poruku i informaciju o njenoj dužini, vraća je napadaču uz proizvoljne podatke do ukupne količine od 64kb (64kb – nekoliko bajtova) iz bafera koji je rezervisan za potrebe OpenSSL-a. Postavlja se pitanje zašto bi napadač želeo 64kb iz memorije OpenSSL-a. Odgovor je zato što baš ta memorija može da sadrži privatni ključ servera (server’s private key), enkripcione ključeve korisnika logovanih na server, šifre korisnika i kolačiće korisnika (eng. cookies). Jednom rečju, to je sve ono što ne bi smeo napadač da zna i zbog čega i postoje sigurnosni enkripcioni protokoli.

Treba napomenuti da je katastrofa još veća time što se napad može ponoviti više puta i tokom svakog napada napadač dobija još 64 „zlatnih” kilobajta, pri tome iza sebe ne ostavlja nikakve tragove samog upada. Međutim, to nije ono najgore, jer se uz malo sreće mogao dočepati i vašeg privatnog ključa i time dešifrovati sav vaš prošli i budući „šifrovani” saobraćaj, ili je možda mogao napraviti lažni sajt (kopiju pravog) od koga je uzeo privatni ključ pretvarajući se na mreži da je pravi pomoću identifikacije privatnim ukradenim ključem i time je mogao da nanese još veću štetu jer može prevariti korisnike originalnog sajta i od njih prikupljati još poverljivih informacija. Zamislite da je otet identitet neke banke ili nekog servisa za trgovinu bitcoin-om, ili ko zna čega još.

Popularni servisi ugroženi ovim bag-om su LastPass i Yahoo mail, a više o tome na http://goo.gl/59Ct1n i http://goo.gl/og2Pge. Problem je veći jer se softver brzo može zakrpiti, za razliku od hiljade drugih uređaja koji su na mreži i predstavljaju veliki problem jer je neophodna akcija korisnika istih, a među njima su i ruteri, štampači, serveri za skladištenje (storage servers), video kamere, vatreni zidovi (firewalls) i još mnogi drugi.

Međutim, ovaj problem se mogao izbeći omogućavanjem PFS-a (Perfect Forward Secrecy ) u okviru OpenSSL-a, što se i preporučuje. On onemogućava zloupotrebu dobijenog ključa za dekriptovanje prošlog i budućeg šifrovanog saobraćaja, a koji nije podrazumevano omogućen, već mora biti ručno. Za one koji žele da omoguće ovu opciju na njihovim serverima, preporučujemo da prvo pročitaju ovaj dokument (http://goo.gl/SkAz5v), a vlasnike Apache i NGINX servera – uputstvo za omogućavanje PFS-a koji se može naći na ovim stranama: http://goo.gl/a5vJVV i http://goo.gl/MGHi50. Proveru da li je vaš ili neki drugi sajt otporan na ovu ranjivost, možete izvršiti na ova tri sajta: http://goo.gl/bOQDdx , http://goo.gl/LTN5Uz i http://goo.gl/VofjAx.

Dobra vest je to što je ranjivost samo u okviru OpenSSL 1.0.1 (1.0.1f) i 1.0.2-beta (1.0.2-beta1) verzije i što ostale verzije OpenSSL-a nemaju ovakav propust, pa se smatraju bezbednim, barem što se Heartbleed ranjivosti tiče, iako je preporučljivo imati uvek najnoviju verziju što je moguće ranije, najbolje pri samom izlasku, kao i omogućen PFS. U razvoju su i alternative OpenSSL-u, u vidu LibreSSL-a i PolarSSL-a, što je odlično jer će biti veća konkurencija i dve trećine interneta neće zavisiti od jedne jedine slobodne implementacije sigurnosnog protokola.