User:Kmarge/sandbox/Heartbleed turvanõrkus

Heartbleed on turvanõrkus OpenSSL krüptograafiatarkvaras, mis on laialdaselt kasutusel olev implementatsioon transpordikihi turbeprotokollist (TLS). Esmaselt tekkis turvanõrkus tarkvaras aastal 2012 ning avalikuks sai see 2014. aastal. Heartbleed turvanõrkust on võimalik ära kasutada sõltumata sellest, kas haavatav OpenSSL instants jookseb TLS serveri või kliendina. Heartbleed turvanõrkuse avastamist raskendas asjaolu, et selle ekspluatatsioon ei jäta logidesse jälge viitamaks ühelegi anomaaliale.

Ekspluatatsioon
Turvanõrkus on mittekorrektse sisendivalideerimise tulemus TLS’i Heartbeat laienduses. Sellest tuleneb ka turvanõrkuse nimi. Kuna Heartbeat päringutes puudusid täiendavad piirikontrollid length ja payload väljadel ning lisaks usaldati teistelt masinatelt saadud andmeid, saatis päringule vastav masin kogemata välja iseenda mäluandmeid. Krüpteeritud TLS käepigistuse käigus saadavad kaks masinat üksteisele Heartbeat sõnumeid. RFC 6520 kohaselt peab Heartbeat vastus sisaldama täpset koopiat Heartbeat päringus sisalduvatest andmetest. Heartbeat vastuse kättesaamisel kirjutab masin payload’i andmed enda mällu ja kopeerib sisu oma vastusesse tagasi. Length väli tähistab payload’i pikkust. OpenSSL hõivab mälu length välja alusel ning kopeerib seejärel payload’i vastusesse memcpy abil. Ründajad saavad Heartbeat päringuid saata pikema length välja väärtusega kui payload välja väärtus tegelikkuses on. Masinas jooksvad OpenSSL protsessid, mis Heartbeat päringule vastavad, ei verifitseeri, et payload’i suurus oleks sama suur, nagu on spetsifitseeritud length väli. Seega kopeerib masin payload’is sisalduvad üleliigsed (pahatahtlikud) andmed enda vastusesse. Üleliigsed baidid on lisaandmed kaugprotsessi mälus.

Mõjuulatus
Antud turvanõrkus lubab ükskõik kellel Internetis lugeda mälu süsteemidest, mida kaitseb haavatav versioon OpenSSL tarkvarast. Tundlik informatsioon, nagu sessiooniidentifikaatorid, kasutajanimed, token’id on paljastatavad. Ekstreemsetel juhtudel võivad isegi serveri privaatsed krüptograafilised võtmed ründajate kätesse sattuda. Asja teeb veelgi ohtlikumaks fakt, et seda turvanõrkust ekspluateeriv rünnak ei jäta logifailidesse mingisuguseid tõendeid. Seega on väga keeruline kindlaks teha kas vaatluse all olev masin on rünnaku alla sattunud. Ühe Heartbeat sõnumi kohta saab ründaja lugeda 64 kilobaiti serverimälu. Sellest hoolimata pole piirangut rünnatavalt serverilt loetava mälu kogumahu osas. Veelgi enam, ründajal on võimalik jätkata ühendumist ja suvalise arvu 64 kilobaidiste segmentide pärimist, et paljastada mälus paiknevat salajast infot (paroolid, salavõtmed, krediitkaardiinformatsioon jne).

Parandus
Haavatavus Heartbleedi suhtes on võimalik lahendada OpenSSL uuendamisega parandatud versioonile (1.0.1g või uuem). OpenSSL-i on võimalik kasutada kas eraldiseisva programmina, dünaamilise jagatud objektina või staatiliselt ühendatud raamistikuna. Seega võib uuendamisprotsess nõuda OpenSSL-i haavatava versiooniga laetud protsesside taaskäivitamist ning lisaks ka staatiliselt ühenduses olnud programmide ja raamistike uuesti ühendamist. Praktiliselt tähendab see OpenSSL-iga staatiliselt ühendatud pakettide uuendamist ning jooksvate programmide taaskäivitamist, et eemaldada mälusisene koopia vanast, haavatavast OpenSSL koodist. Peale haavatavuse parandamist peavad serveriadministraatorid tegelema potentsiaalse konfidentsiaalsuslekkega. Kuna Heartbleed lubas ründajatel omandada ligipääsu privaatsetele võtmetele, tuleb neid käsitleda rünnatutena. Võtmepaarid tuleb uuesti genereerida ja neid kasutavad sertifikaadid uuesti väljastada. Vanad sertifikaadid tuleb tagasi võtta. Heartbleedil võis potentsiaalselt avalikustada ka teisi mälusiseseid saladusi. Seega tuleb ka muu autentimismaterjal (näiteks paroolid) uuesti genereerida. Üksikutel juhtudel on võimalik kindlaks teha, et süsteem, mis oli turvanõrkusest mõjutatud, ei saanud rünnaku osaliseks või määrata kindlaks kas mingi kindel osa informatsioonist lekkis.