BLOG

BEAST útok na SSL v3.0 a TLS v1.0

2011-09-23 21:03 Pavol Lupták

Juliano Rizzo and Thai Duong, ktorí minulý rok odhalili vážný Oracle Padding útok (jeho popis bol zverejnený aj na našom blogu), pred pár dňami na najväčšej bezpečnostnej konferencii v Južnej Amerike Ekoparty demonštrovali vážnu zraniteľnosť v SSLv3/TLS v1.0 protokole, ktorý je masívne využívaný vo väčšine šifrovaných spojeniach ako HTTPS, IMAPS, POP3S, SMTPS a iných protokoloch využívajúcich SSLv3/TLSv1. Prakticky implementovali doposiaľ teoretický “chosen-plaintext recovery” útok na SSL z roku 2004, ktorým demonštrovali dešifrovanie HTTPS spojenia na https://paypal.com z ktorého dokázali získať zašifrované “cookies” a tým pádom celé HTTPS spojenie kompromitovať (viac informácií o týchto “teoretických” problémoch z roku 2004).

Na úspešné vykonanie útoku musí byť útočník “uprostred” medzi samotným klientom a cieľovým serverom, teda musí mať možnosť odpočúvania TCP spojení medzi daným klientom a serverom a to aj s možnosťou MITM (Man-In-The-Middle) útoku, teda možnosťou upraviť nešifrovanú HTTP odpoveď zaslanú serverom danému klientovi (čo sa prakticky využíva v samotnom útoku). Podotýkam, že bezpečné “end-to-end” šifrované SSL/TLS spojenia sú akurát také, ktoré útočník “uprostred” nedokáže nijako ohroziť, resp. akýkoľvek jeho pokus je odhalený samotným klientom/serverom (nesedia certifikáty, klientovi sa zobrazí veľké upozornenie). Ako uvidíme ďalej, v nasledujúcom popísanom útoku to neplatí.

Ako útok funguje?

1. Otvoríte nešifrované spojenie v princípe na ľubovoľnú nešifrovanú HTTP stránku. Nakoľko útočník má plnú kontrolu nad vašimi nešifrovanými spojeniami, tak spraví jednoduchý MITM útok a do HTTP odpovede Vám nainjektuje svoj vlastný nebezpečný javascript kód.

2. Tento nebezpečný javascript sa samozrejme spustí vo vašom prehliadači a vytvorí šifrované spojenie na https://www.paypal.com (napríklad cez <img src=”https://www.paypal.com”…>), takže daný javascript nemusí vôbec bezať v kontexte SOP (Same-Origin-Policy) domény www.paypal.com.

3. Nakoľko útočník odpočúva (=sniffuje) všetky TCP spojenia medzi vami ako klientom a serverom www.paypal.com, tak dokáže zachytiť samozrejme aj obsah šifrovaného spojenia medzi vašim prehliadačom a www.paypal.com (ktorý bol vygenerovaný jeho skriptom, ktorý otvoril https://www.paypal.com). Nakoľko útočník presne vie, čo jeho injektovaný javascript poslal zo strany prehliadača, tak disponuje ako odchytenými šifrovanými datami (“ciphertext”), tak nešifrovanými datami, ktoré poslal jeho skript (“plaintext”) a môže sa pustiť do “chosen-plaintext-recovery” útoku. Behom pár minút použitím bežnej výpočtovej sily, útočník dokáže odhaliť tzv. “inicializačný vektor” pre dané zabezpečené spojenie (ide konkrétne o zneužitie zraniteľností slabého inicializačného vektora v SSL/TLSv1, ktoré bolo popísané už v roku 2004).

4. Znalosť uvedeného inicializačného vektora stačí útočníkovi na odhalenie/dešifrovanie bezpečných autentifikačných “cookies”, ktoré sú nasledne zaslané v danom HTTPS zašifrovanom spojení.

5. Útočník dokáže uvedené odhalené “cookies” zopakovať (tzv. “replay”), čím automaticky získa plný prístup do daného účtu (v našom prípade https://www.paypal.com), do ktorého je daný klient už prihlásený a teda vidí a môže vykonávať ľubovoľné akcie zo strany klienta.

Základne predpoklady na úspešný BEAST útok:

1. Klient musí mať v prehliadači zapnutý javascript (čo má v dnešnej dobe viac ako 99% všetkých prehliadačov).

2. Útočník sa musí nachádzať “uprostred” medzi klientom a daným serverom a musí byť schopný tiež aktívneho MITM útoku (to znamená byť schopný modifikovať HTTP odpoveď s cieľom nainjektovať vlastný podvrhnutý javascript).

3. Útočník musí dopredu vedieť, aký zabezpečený HTTPS web klient navštívi (aby na základe toho vedel, aký javascript mu má podvrhnúť).

4. Útočník musí mať dostatočne veľa času na zozbieranie a analýzu odchytených dát medzi klientom a serverom (rádovo polhodinu, čo samozrejme v budúcnosti bude len klesať).

5. Klient musí na dané šifrované spojenie (napr. https://www.paypal.com), ktoré mu útočník kompromituje, použiť ten istý prehliadač (session) bez toho, aby ho zatvoril a spustil znovu, prípadne použil iný prehliadač – to všetko od okamihu ako útočník donútí klienta cez nainjektovaný javascript otvoriť šifrované spojenie na https://www.paypal.com, ktoré následne odpočuje v jeho šifrovanej forme.

6. Samozrejme akékoľvek akcie, ktoré útočník dokáže pod klientom vykonať, môže len počas toho ako je jeho spojenie aktívne (ak sa raz klient dobrovoľne zo svojho PayPalu odhlási, tak aj útočník stratí možnosť kontroly nad týmto webom – samozrejme pokým mu nestihol predtým zmeniť heslo:-)

Ako vidieť, podmienok, ktoré sú nevyhnutné na úspešný útok je relatívne veľa, určite nejde ale o teoretický útok, ale čisto praktický, ktorý nie je ťažko realizovateľný (obzvlášť ak útočník má plný prístup nad infraštruktúrou daného klienta a dokáže odhadnúť na aké SSL weby daný klient pristupuje).

Riešenie:

Protokol TLS v1.1 a v1.2 nie je síce zraniteľný na uvedený útok, bohužiaľ tento protokol je podporovaný len Internet Explorerom a Operou – ostatné prehliadače (Google Chrome, Firefox, Safari a pravdepodobne väčšina mobilných prehliadačov) tieto novšie protokoly nepodporujú. Minimálne Google už stihol zareagovať a vydal patch do Chrome.
Podobne veľmi slabú podporu TLS v1.1/v1.2 majú aj Internetové webové servery (podľa Opery je to len 0.25% všetkých webových serverov). Bohužiaľ tento fakt je spôsobený tým, že stabilná verzia OpenSSL stále nepodporuje TLS v1.1 (je to podporované len “development” verziami OpenSSL), takže to prirodzene nepodporujú ani služby postavené nad OpenSSL. Ďalší pochopiteľný dôvod nepoužívania TLSv1.1/v1.2 bol samozrejme taký, že doteraz nebola potreba tieto novšie protokoly využívať – žiadne reálne útoky voči SSL v3.0 a TLS v1.0 totiž neexistovali.
Beast útok sa primárne týka AES implementácie TLS 1.0, tak riešenie predstavuje preferovanie symetrickej šifry RC4, uvádzame bezpečnú konfigurácia pre webový server Apache:

SSLHonorCipherOrder On
SSLCipherSuite ECDHE-RSA-AES128-SHA256:AES128-GCM-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH

Ako sa chrániť pred BEAST útokom?

1. Určite neprestať používať šifrované SSL/TLS spojenia, je potrebné používať čo najaktuálnejšie verzie prehliadačov, ktoré uvedenú chybu už majú opravenú.

2. Pri pristupovaní na šifrované weby je potrebné používať výhradne prístup cez https:// (nepreklikávať sa z nešifrovaného http:// spojenia), je vhodné si tieto priame linky na šifrované verzie webov rovno uložit do webových záložiek prehliadača.

3. Používať iný prehliadač na prístup k šifrovaným webom a iný k nešifrovaným.

Viac informácií:

Beware of BEAST decrypting secret PayPal cookies

Hackers break SSL encryption used by millions of sites

Is SSL/TLS Really Broken by the BEAST attack? What is the Real Story? What Should I Do?