четвртак, 25 априла, 2024
Интернет, мреже и комуникације

ОпенССЛ: сигурност или претња

Аутор: Петар Симовић

Шта је у ствари OpenSSL који је проузроковао невиђено зло названо Heartbleed?

OpenSSL је open-sourcе имплементација криптографског протокола SSL/TLS (SSL – Secure Socket Layer и његовог наследника TLS – Transport Layer Security). Ови протоколи служе за размену симетричног кључа између два рачунара којим се на даље шифрује сва међусобна комуникација, али само током те сесије. За сваку следећу сесију, стари се одбацују и формирају сасвим нови кључеви. Можете видети да ли се користи овакав тип сигурне комуникације по томе што веб-адресе почињу са https://, уместо са http://.

Рањивост је откривена првог априла ове године од стране Codenomicon, фирме за веб-сигурност заједно са Google-овим сигурносним инжењерима, а публикована је тек седам дана касније, када је изашла и прва закрпа за рањивост. Сама рањивост је у оквиру екстензије зване „Heartbeat” за TLS протокол која је додата још 2012. године.

Heartbeat, или преведено „откуцај срца”, јесте додатак који омогућава одржавање успостављене сигурносне комуникације и у тренуцима када нема активне размене порука између сервера и клијента. Одлика овог додатка је да клијент-корисник шаље поруку са бројем који представља дужину саме поруке серверу на коме је OpenSSL, сервер одговара враћањем података из бафера у дужини која му је прослеђена уз саму поруку корисника, што би требало да буде иста порука коју је и добио од истог. Проблем је што нема провере да ли је информација о дужини поруке исправна, тј. да ли је сама порука баш толико дуга.

Овакав проблем се може експлоатисати тако што нападач који се на сервер конектује, може серверу да шаље „откуцај срца” са кратком поруком од неколико бајтова, а да уз то прослеђује информацију да је дужина поруке 64 килобајта. У том случају, сервер прима поруку и информацију о њеној дужини, враћа је нападачу уз произвољне податке до укупне количине од 64kb (64kb – неколико бајтова) из бафера који је резервисан за потребе OpenSSL-а. Поставља се питање зашто би нападач желео 64kb из меморије OpenSSL-а. Одговор је зато што баш та меморија може да садржи приватни кључ сервера (server’s private key), енкрипционе кључеве корисника логованих на сервер, шифре корисника и колачиће корисника (енг. cookies). Једном речју, то је све оно што не би смео нападач да зна и због чега и постоје сигурносни енкрипциони протоколи.

Треба напоменути да је катастрофа још већа тиме што се напад може поновити више пута и током сваког напада нападач добија још 64 „златних” килобајта, при томе иза себе не оставља никакве трагове самог упада. Међутим, то није оно најгоре, јер се уз мало среће могао дочепати и вашег приватног кључа и тиме дешифровати сав ваш прошли и будући „шифровани” саобраћај, или је можда могао направити лажни сајт (копију правог) од кога је узео приватни кључ претварајући се на мрежи да је прави помоћу идентификације приватним украденим кључем и тиме је могао да нанесе још већу штету јер може преварити кориснике оригиналног сајта и од њих прикупљати још поверљивих информација. Замислите да је отет идентитет неке банке или неког сервиса за трговину bitcoin-ом, или ко зна чега још.

Популарни сервиси угрожени овим bag-ом су LastPass и Yahoo mail, а више о томе на http://goo.gl/59Ct1n и http://goo.gl/og2Pge. Проблем је већи јер се софтвер брзо може закрпити, за разлику од хиљаде других уређаја који су на мрежи и представљају велики проблем јер је неопходна акција корисника истих, а међу њима су и рутери, штампачи, сервери за складиштење (storage servers), видео камере, ватрени зидови (firewalls) и још многи други.

Међутим, овај проблем се могао избећи омогућавањем PFS-а (Perfect Forward Secrecy ) у оквиру OpenSSL-а, што се и препоручује. Он онемогућава злоупотребу добијеног кључа за декриптовање прошлог и будућег шифрованог саобраћаја, а који није подразумевано омогућен, већ мора бити ручно. За оне који желе да омогуће ову опцију на њиховим серверима, препоручујемо да прво прочитају овај документ (http://goo.gl/SkAz5v), а власнике Apache и NGINX сервера – упутство за омогућавање PFS-а који се може наћи на овим странама: http://goo.gl/a5vJVV и http://goo.gl/MGHi50. Проверу да ли је ваш или неки други сајт отпоран на ову рањивост, можете извршити на ова три сајта: http://goo.gl/bOQDdx , http://goo.gl/LTN5Uz и http://goo.gl/VofjAx.

Добра вест је то што је рањивост само у оквиру OpenSSL 1.0.1 (1.0.1f) и 1.0.2-beta (1.0.2-beta1) верзије и што остале верзије OpenSSL-а немају овакав пропуст, па се сматрају безбедним, барем што се Heartbleed рањивости тиче, иако је препоручљиво имати увек најновију верзију што је могуће раније, најбоље при самом изласку, као и омогућен PFS. У развоју су и алтернативе OpenSSL-у, у виду LibreSSL-а и PolarSSL-а, што је одлично јер ће бити већа конкуренција и две трећине интернета неће зависити од једне једине слободне имплементације сигурносног протокола.