Heartbleed
Heartbleed
Autor: Maarja-Liisa Tammepõld
Rühm: A22
Sissejuhatus
See on tõsine krüptograafilise tarkvara teegi OpenSSL-i nõrkus. See võimaldab SSL-i/TSL-i enkrüpteerimisega kaitstud informatsiooni varastada. SSL/TLS pakuvad erinevate rakenduste turvalist kasutamist üle Interneti nt. emaili teenuste ja mõne VPN-i kasutamisel, võimaldab turvaliselt minna panka, ilma et keegi salajast infot näha saaks. Nüüd on avastatud, aga OpenSSL-i turvaauk nimega Heartbleed, mis võimaldab ligipääseda serveri mälule ja mis hõlmab kogu salajast informatsiooni: kasutajate nimesid, salasõnu ja tegelikku sisu. Seeläbi on ründajatel võimalik pealtkuulata vestlusi, andmeid varastada ja võimaldab kehastada teist kasutajat või teenust. [1]
Kuidas töötab Heartbleed?
Internetitoimingutes kontrollivad serveritega ühenduses olevad arvutid teatud ajavahemike järel, kas nad on endiselt samal liinil ühenduses saates üksteisele signaale. Selle sama signaali kaudu ongi võimalik ligi pääseda serveri mälule. [2]
Nõrkus (CVE-2014-0160) on kadunud signaali kontroll enne memcpy()kutsungit, mis kasutab kasutaja sisendit parameetri pikkusena. Ründaja saab OpenSSL-i trikitada paigutades sinna 64KB suuruse puhvri, kopeerib rohkem baite kui vaja puhvrisse, saadab selle buhvri tagasi ja seetõttu lekib ohvri mällu 64KB suurune sisu samal ajal. [3]
Mida saab selle vastu ette võtta?
Servereid hallatavatel administraatoritel soovitatakse genereerida serverile uus privaatvõti, hankida kaasnev uus sertifikaat ja paluma kõikidel kasutajatel oma paroolid ära vahetada.
Kuna Heartbleed mõjutab Internetis umbes 18% hulga ulatuses servereid, siis selle turvamiseks on tehtud ka juba avalik tööriist, mis võimaldab näha, kas mõni server on turvaline või mitte: https://filippo.io/Heartbleed/ . [2]
Nüüdseks on loodud OpenSSL-st uuem ja täiustatum versioon, millel puudub see sama haavatav koht, kuid nii kaua, kui kasutatakse nõrkusega olevat OpenSSL-i, senikaua püsib ka oht ründe ohvriks sattuda. [1]
Mis OpenSSL-i versioonid on haavatavad?
- OpenSSL 1.0.1 läbi 1.0.1f on haavatav
- OpenSSL 1.0.1g on turvaline
- OpenSSL 1.0.0 laiendus on turvaline
- OpenSSL 0.9.8 laiendus on turvaline
Alates 2012. aasta 14. märtsist OpenSSL versiooniga 1.0.1 levis nõrkus ja 7. aprillil 2014 sai avalikuks versioon 1.0.1g, mis muutus turvaliseks.
[1]
Mõned operatsioonisüsteemi distributsioonid, mis on haavatava OpenSSL-i versiooniga:
- Debian Wheezy (stable), OpenSSL 1.0.1e-2+deb7u4
- Ubuntu 12.04.4 LTS, OpenSSL 1.0.1-4ubuntu5.11
- CentOS 6.5, OpenSSL 1.0.1e-15
- Fedora 18, OpenSSL 1.0.1e-4
- OpenBSD 5.3 (OpenSSL 1.0.1c 10 mai 2012) and 5.4 (OpenSSL 1.0.1c (10 mai 2012))
- FreeBSD 10.0 - OpenSSL 1.0.1e (11 veebruar 2013)
- NetBSD 5.0.2 (OpenSSL 1.0.1e)
- OpenSUSE 12.2 (OpenSSL 1.0.1c)
Operatsioonisüsteemi distributsioonid, mis on turvalised:
- Debian Squeeze (oldstable), OpenSSL 0.9.8o-4squeeze14
- SUSE Linux Enterprise Server
- FreeBSD 8.4 - OpenSSL 0.9.8y (5 veebruar 2013)
- FreeBSD 9.2 - OpenSSL 0.9.8y (5 veebruar 2013)
- FreeBSD 10.0p1 - OpenSSL 1.0.1g (8 aprill 2014)
- FreeBSD Ports - OpenSSL 1.0.1g (7 aprill 2014)
[3]
Lahendus
Kood, mis loodi selle vea vastu OpenSSL versioonis 1.0.1g, mis kontrollib signaali õige ajavahemiku tagant SSL3 struktuuris (s3->rrec), mis kirjeldab sissetulevat signaali.
hbtype = *p++; n2s(p, payload); if (1 + 2 + payload + 16 > s->s3->rrec.length) return 0; /* silently discard per RFC 6520 sec. 4 */ pl = p;
[3]