☰

Izziņota bīstama OpenSSL ievainojamība Heartbleed

Šonedēļ izziņota nopietna OpenSSL 1.0.1 TLS/DTLS ievainojamība, plašāk pazīstama kā "ssl heartbeat"/"heartbleed bug".

Ievainojamība ļauj nesankcionēti iegūt sensitīvus datus no servera, kas izmanto ievainojamu OpenSSL pakotni, kas normālā situācijā būtu pasargāta pārsūtīšanas brīdī ar SSL/TLS.

Izmantojot šo ievainojamību, iespējams attālināti no servera iegūt lietotāju paroles un lietotājvārdus, transakciju datus, kriptogrāfiskās atslēgas, konfigurācijas detaļas, e-pasta sistēmu lietotāju datus un citu sensitīvu vai sargājamu informāciju, kuras noplūde var sekmēt ne tikai informācijas sistēmas kompromitēšanu, bet visu informācijas sistēmas lietotāju datu un elektroniskās identitātes kompromitēšanu.

Apdraudētas var būt tīmekļa vietnes, kas lieto https://, pasta sistēmas, VPN vārtejas, kā arī citi risinājumi, kas izmanto OpenSSL.

Informācija par ievainojamības skartiem starptautiskajiem portāliem pieejama šeit:

http://mashable.com/2014/04/09/heartbleed-bug-websites-affected

Ievainojamas ir arī mobilās ierīces

"Heartbleed" ievainojamības skarto mobilo lietotņu saraksts pieejams šeit:

http://www.digitaltrends.com/mobile/heartbleed-bug-apps-affected-list

Lai pārbaudītu mobilās ierīces, kas izmanto Android OS, var izmantot Heartbleed detector aplikāciju:

https://play.google.com/store/apps/details?id=com.lookout.heartbleeddetector

Publiski pieejamā informācija liecina, ka IOS un OSX operētājsistēmas nesatur ievainojamībai pakļauto komponenti.

Kas jāzina interneta lietotājam par bīstamo ievainojamību OpenSSL "heartbleed"?

Ievainojamība pastāv gan serveros, gan lietotāju programmatūrā, kas izmanto OpenSSL.

Šobrīd kritiski jāvērtē jebkura tīmekļa vietne, kas izmanto https:// un kurā jāveic autorizācija, ievadot lietotājvārdu un paroli.

Paroli ir nozīme mainīt tikai tad, ja ievainojamais portāls/vietne problēmu ir jau novērsis.

Lai pārbaudītu vai Jūsu serviss ir ievainojams, iesakām apmeklēt šos resursus:

http://possible.lv/tools/hb

un

http://filippo.io/Heartbleed

Ierakstot domēna vārdu pārbaudes laukā, pēc brīža redzēsiet testa rezultātus.

Ja rezultāts uzrāda, ka vietne ir ievainojama un Jūsu dati nav drošībā, iesakām ziņot par to attiecīgā servisa turētājam.

Tehniskā informācija:

Ievainojamībai pakļautas OpenSSL versijas no 1.0.1 līdz 1.0.1f

Kaitniecisku "heartbeat" pieprasījumu piemērs nginx un Apache servera žurnālfailā:

192.168.123.1 - - [09/Apr/2014:15:32:09 +0300] "-" 400 0 "-" "-"
192.168.123.1 - - [09/Apr/2014:15:33:47 +0300] "\x16\x03\x02" 501 292 "-" "-"

Pēc žurnālfaila fragmenta ir iespējams izdarīt secinājumus. Nav viennozīmīgi vērtējams heartbleed pieslēgums no servera žurnālfaila, bet lielākā daļa internetā izplatīto rīku uz nginx servera ģenerē ierakstu:

<client_IP> - - [11/Apr/2014:09:22:31 +0300] "-" 400 0 "-" "-"

normāls ieraksts pēc pieprasījuma no lietotāja izskatās aptuveni šādi:

<client_IP> - - [11/Apr/2014:09:22:40 +0300] "GET /something HTTP/1.1" 200 14611 "https://something/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Iron/31.0.1700.0 Chrome/31.0.1700.0 Safari/537.36"

ir redzama anomālija - nav ne user-agent, ne citu parametru, kas nāk līdzi normālam pieprasījumam.

Pieprasījumus var modificēt, bet lielākā daļa rīku šobrīd ģenerēs šādus pieprasījumus.

Uz nginx servera ir iespējams identificēt mēģinājumus veikt heartbleed pieprasījumus meklējot uzbrukuma pazīmes access-log žurnālā pēc nosacījumiem (REGEX):

# egrep '\"-\"\ [[:digit:]]{1,3}\ [[:digit:]]{1,4}\ \"-\" \"-\"' access.log

Kā alternatīvu egrep var izmantot awk (loģika atšķiras – tiek meklēti atbildes kodi 400 un 408):

# awk '{ if (($12 == "400")||($12 == '408')) {print}}' access.log

Administratoriem iesakām piesardzīgi izvērtēt pieprasījumus, kas ģenerē atbildes kodus 400 un 408.

Apache serveris.

Apache gadījumā standarta konfigurācijā log fails neko neuzrādīs. CERT.LV sniegtajā piemērā ir proxēts pieprasījums, kur ssl handshake pirmie baiti ir redzami \x16\x03\x02 ... ,

bet Heartbeat pieprasījuma fragments izskatīsies šādi: \x18\x03\x02 ...

Balstoties uz šo informāciju IR iespējams identificēt kaitīgos pieprasījumus un arī bloķēt tos.

Vairāki drošības risinājumu ražotāji šos nosacījumus jau ir ieviesuši un to pašu var darīt arī administratori, kas izmanto atvērtā koda risinājumus, kā SNORT un tamlīdzīgus.

Ar iptables ugunsmūri iespējams ieviest filtru, kas žurnalē un bloķē TLS heartbeat pieprasījumus. Šajā gadījumā tiks analizēta katra pakete, kas iesūtīta uz TCP portiem 21,25,110,143,443,993,995 un tiks bloķētas tās paketes, kuru saturā būs Heartbeat pieprasījuma sākuma fragments.

\x18\x03\x02\x00\x03\x01\x40\x00 nosacījumā ir norādīts diapazons no:līdz, jo pieprasījumam ir vairākas variācijas - 0x18030000:0x1803FFFF

#iptables piemērs:

iptables -A INPUT ! -i lo -p tcp -m multiport --destination-port
21,25,110,143,443,993,995 -m u32 --u32 "52=0x18030000:0x1803FFFF" -m
limit --limit 5/h -j LOG --log-level debug --log-prefix "Firewall: Heartbleed"
iptables -A INPUT ! -i lo -p tcp -m multiport --destination-port
21,25,110,143,443,993,995 -m u32 --u32 "52=0x18030000:0x1803FFFF" -j DROP

Žurnāls būs pieejams no syslog.

/var/log/syslog:

Apr 11 15:23:05 SRV kernel: [13300953.085949] Firewall:
HeartbleedIN=eth0 OUT= MAC=00:00:3e:ee:00:52:00:0e:00:ac:00:40:00:00
SRC=192.168.123.1 DST=192.168.3.3 LEN=60 TOS=0x00 PREC=0x00 TTL=62
ID=9111 DF PROTO=TCP SPT=32841 DPT=443 WINDOW=182 RES=0x00 ACK PSH URGP=0
Apr 11 15:23:05 SRV kernel: [13300953.094124] Firewall:
HeartbleedIN=eth0 OUT= MAC=00:00:3e:ee:00:52:00:0e:00:ac:00:40:00:00
SRC=192.168.123.1 DST=192.168.3.3 LEN=60 TOS=0x00 PREC=0x00 TTL=62
ID=9112 DF PROTO=TCP SPT=32841 DPT=443 WINDOW=182 RES=0x00 ACK PSH URGP=0

Ievainojamības risku mazināšanas ieteikumi:

Uzstādīt OpenSSL 1.0.1g versiju, kurā ievainojamība ir novērsta.
Nomainīt visas ar ievainojamu OpenSSL versiju ģenerētās atslēgas.

Papildu informācija:

http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-0160

http://heartbleed.com/