Použité SSL verzie a šifry na českých a slovenských weboch

Sú SSL štandardy implementované na webových stránkach v Slovenskej a v Českej republike správne? Cieľom tohto článku je porovnať a analyzovať SSL verzie a šifry používané webovými stránkami so zameraním na ich bezpečnosť.

V dnešnej dobe je bezpečnosť v online svete dôležitejšia ako kedykoľvek predtým. SSL (Secure Sockets Layer) je bezpečnostný protokol, ktorý zabezpečuje šifrovanie medzi komunikujúcimi stranami – typicky medzi serverom a webovým prehliadačom používateľa. Šifrovanie zabezpečuje ochranu prenášaných dát pred prístupom neoprávnených osôb, čím ostáva zachovaná ich integrita a dôvernosť.

SSL Protokol

Bol vyvinutý spoločnosťou Netscape v roku 1995 s cieľom zabezpečiť súkromie, overenie a integritu údajov v internetových komunikáciách. SSL je predchodcom novšieho protokolu TLS (Transport Layer Security). Najznámejším využitím SSL ostáva šifrovaný HTTPS protokol, teda šifrovaná verzia HTTP – SSL ale nie je viazané iba na tento protokol a dá sa použiť aj pri iných a poznáme tak napríklad FTPS alebo IMASP.

Pôvodne sa dáta na webe prenášali v nešifrovanej podobe, ktoré mohli byť v prípade zachytenia kýmkoľvek prečítané. Pri použití HTTP protokolu sa útočníci môžu ľahko dostať k citlivým informáciám odosielaným na webovú stránku, vrátane prihlasovacích údajov či platobných informácií.

Ukážka zachytenej nešifrovanej komunikácie v programe Wireshark
Ukážka zachytenej nešifrovanej komunikácie v programe Wireshark

Naopak, použitie SSL/TLS zabezpečí, že všetky prenášané informácie sú šifrované a nečitateľné pre toho, kto ich zachytí.

Pri šifrovanej komunikácii nevidí útočník prenášané dáta v ich pôvodnej forme
Pri šifrovanej komunikácii nevidí útočník prenášané dáta v ich pôvodnej forme

SSL a TLS Verzie

SSL je predchodcom ďalšieho protokolu nazvaného TLS (Transport Layer Security). Skupina Internet Engineering Task Force (IETF) navrhla v roku 1999 aktualizáciu a keďže táto aktualizácia bola vyvíjaná už IETF a Netscape nebolo zapojené, názov bol zmenený na TLS. Rozdiely medzi konečnou verziou SSL (3.0) a prvou verziou TLS (1.0) nie sú zásadné, jednalo sa skôr o symbol zmeny vlastníctva. V súčasnotsi je definovaných šesť protokolov, na ktoré sa bližšie pozrieme z hľadiska ich bezpečnosti.

Nadviazanie SSL komunikácie medzi klientom a serverom
Nadviazanie SSL komunikácie medzi klientom a serverom

SSL 2.0

SSL 2.0 je prvou publikovanou verziou protokolu SSL, ktorá bola uvedená na verejnosť v roku 1995. V roku 2011 bola oficiálne označená za zastaralú a odhliadnuc od faktu, že ju moderné webové prehliadače nepodporujú, je jej používanie považované za nebezpečné.

SSL 3.0

Verzia SSL 2.0 obsahovala viacero chýb a preto došlo už o rok ku vydaniu novej verzii SSL 3.0. V súčasnosti sa taktiež považuje za zastaranú a kvôli viacerým zraniteľnostiam, ktorými trpí nie je pri jej použití možné zaručiť bezpečnosť prenášaných dát.

TLS 1.0

Prvou verziou protokolu TLS bola verzia 1.0, ktorá bola zverejnená v roku 1999. Hoci je táto verzia stále využívaná, jej používanie sa taktiež nepovažuje za bezpečné v dôsledku zraniteľností akou je napríklad POODLE útok. Napriek tomu, že mnohé organizácie prechádzajú na novšie protokoly je TLS 1.0 stále rozšírená a používaná mnohými aplikáciami a servermi.

TLS 1.1

K zverejneniu ďalšej verzie došlo v roku 2006. TLS 1.1 vyriešila niektoré chyby predošlej verzie a je považovaná za viac bezpečnú, avšak od roku 2020 sú verzie TLS 1.0 a TLS 1.1 považované za zastaralé.

TLS 1.2

Trvalo len dva roky, kým došlo k zverejneniu ďalšej verzie TLS, ktorá je v súčasnosti najpoužívanejšou. Oproti predchádzajúcim verziám ponúka implementáciu Perfect Forward Secrecy, bezpečnejšie šifry s použitím Advanced Encryption Standard (AES) alebo podporu Elliptic Curve Cryptography (ECC). Za zmienku stojí taktiež pridaná podpora autentizovaného šifrovania, čo okrem klasického šifrovania zaručuje taktiež aj autenticitu, a pokiaľ by sa útočník pokúsil zmeniť prenášané dáta, ich prijímateľ by sa to dozvedel.

TLS 1.3

Po viac ako desiatich rokoch došlo v roku 2018 ku publikovaniu momentálne najnovšej verzie TLS. Táto verzia obsahuje mnoho zmien, ktorých cieľom malo byť zefektívnenie a zvýšenie bezpečnosti šifrovania. TLS 1.3 podporuje iba päť šifrovacích sád a prestali sa používať blokové šifry CBC, 3DES alebo šifry RC4. Touto zmenou je oproti svojim predchodcom protokol bezpečnejší a stáva sa odolný voči útokom ako BEAST alebo LOGJAM. Ku zvýšeniu bezpečnosti došlo taktiež ukončením podpory výmeny kľúčov bez Perfect Forward Secrecy.

Časová os s dátumami zverejnenia a ukončenia podpory každej verzie
Časová os s dátumami zverejnenia a ukončenia podpory každej verzie

Známe SSL zraniteľnosti

Medzi známe SSL zraniteľnosti patria napríklad Heartbleed, POODLE, BEAST, CRIME alebo FREAK. Tieto zraniteľnosti umožňujú útočníkovi získať citlivé údaje, ako napríklad heslá, či dokonca SSL kľúče. Väčšina týchto zraniteľností ovplyvňuje najmä staršie verzie protokolov SSL, ktoré už dnes nie sú zaradené medzi podporované protokoly. V najbližších odstavoch si priblížme pár najznámejších zraniteľností.

BEAST - Browser Exploit Against SSL/TLS

Zraniteľnosť BEAST bola prvýkrát popísaná už v roku 2002. Do roku 2011 sa jednalo iba o teoretickú zraniteľnosť, prvú reálnu ukážku útoku predviedli vedci T. Doung a J. Rizzo na službe PayPal. BEAST bol prvým útokom, ktorý umožnil útočníkom dešifrovať dáta zasielané medzi klientom a serverom vďaka zraniteľnosti v CBC (Cipher Block Chaining).

Na úspešné zneužitie tejto zraniteľnosti musia byť splnené nasledujúce podmienky:

  1. Útočník sa musí dostať medzi klienta a server, aby mohol vykonať útok man-in-the-middle
  2. Na spojenie medzi klientom a musí byť použitá zraniteľná TLS verzia
  3. Po vytvorení spojenia medzi klientom a serverom začne útočník vkladať do prenášaných dát vlastný JavaScript kód
  4. Vložením tohto kódu dôjde ku modifikácii prenášaných dát a vzniku slabých šifrovaných blokov
  5. Následne sa môže útočník pokúsiť dešifrovať prenášané dáta - jedná sa o časovo náročný útok, čím sa jeho pravdepodobnosť znižuje

Medzi prvé odporúčania ako zabrániť tejto zraniteľnosti patril prechod na šifru RC4. Toto riešenie sa neukázalo ako trvalé, keďže v roku 2013 sa objavili prvé zraniteľnosti tejto šifry a v roku 2015 bolo jej používanie v TLS zakázané.

Najefektívnejším riešením ako v súčasnosti zabrániť BEAST útoku je vypnúť podporu pre staršie verzie ako TLS 1.2, čím sa zároveň zabráni aj ďalším útokom ako DROWN alebo POODLE.

Schéma BEAST útoku
Schéma BEAST útoku

POODLE - Padding Oracle On Downgraded Legacy Encryption

Okrem útoku BEAST bol zamestnancami Googlu B. Möller, T. Duong a K. Kotowicz v roku 2014 predstavený aj útok POODLE zameraný na SSL 3.0, ktorý umožnil útočníkovi dešifrovať niektoré dáta zasielané medzi klientom a serverom.

Tak ako v predošlom prípade, aj pri POODLE bolo na úspešné vykonanie útoku nutné splniť viaceré podmienky:

  • Útočník je v pozícii man-in-the-middle medzi klientom a serverom
  • Ak server podporuje SSL 3.0, útočník môže vynútiť použitie tohto protokolu a začať modifikovať zasielané dáta
  • Útočník dáta mení upravením paddingu na konci bloku a skúša vytvoriť „kolíziu“ – pomocou odpovede servera si môže overiť, či bola zaslaná odhadovaná časť bloku správna alebo nie

Takýmto spôsobom útočník postupuje, kým nerozšifruje celú správu – na odhalenie jedného bajtu zvyčajne netreba viac ako 256 pokusov.

Pri man-in-the-middle môže útočník vykonať SSL downgrade
Pri man-in-the-middle môže útočník vykonať SSL downgrade

BEAST a POODLE útoky sú podobné, obidva využívajú zraniteľnosť v CBC - zatiaľ čo BEAST zneužil chybu v použití slabého inicializačného vektora, POODLE - podľa názvu - využíva zraniteľnosť v "Padding Oracle".

Tak ako pri útoku BEAST je najlepšou ochranou vypnúť podporu verzie SSL 3.0 a nepoužívať ju na šifrovanie komunikácie.

LOGJAM

Logjam útok objavený v roku 2015 sa oproti predošlým útokom líšil a bol zameraný na zraniteľnú Diffie-Hellman (DH) výmenu kľúčov. Útok využíva skutočnosť, že mnohé servery stále podporujú 512-bitové alebo slabšie skupiny Diffie-Hellman na výmenu kľúčov, aj keď boli štandardmi označené ako zastarané.

Na zneužitie Logjamu použije útočník man-in-the-middle, aby zachytil počiatočnú výmenu kľúčov medzi klientom a serverom a upraví by parametre odosielané serverom tak, aby namiesto odporúčaných skupín používali slabšie, ľahšie prelomiteľné skupiny. To by prinútilo pripojenie použiť slabý kľúč, ktorý by útočník mohol prelomiť a dešifrovať dáta.

Ďalším rizikom je použitie rovnakých parametrov na generáciu kľúčov naprieč servermi - približne 18% domén zo zoznamu " Top 1 Million Alexa" používa tie isté paramtetre.

Útok Logjam by mohol vykonať dobre financovaný útočník s dostatočnými zdrojmi. Odhaduje sa, že kľúče s dĺžkou menšou ako 768 bitov dokážu prelomiť akademické tímy a kľúče s dĺžkou 1024 bitov útočníci s podporou štátu.

Jedným z hlavných spôsobov, ako sa brániť proti tomuto útoku, je zamedziť použitiu šifrovacích algoritmov, ktoré používajú Diffie-Hellman výmenu kľúčov s veľkosťou menšou ako 1024 bitov. Okrem toho sa odporúča nasadenie protokolu Elliptic Curve Diffie-Hellman (ECDHE).

SWEET 32

Ďalším útokom na blokové šifry sa stal Sweet32 objavený v roku 2016. Útočník dokázal získať kryptografické kľúče a dešifrovať dáta, ktoré boli šifrované pomocou 64-bitových blokových šifier ako 3DES alebo Blowfish.

Sweet32 využíva skutočnosť, že šifry so 64-bitovými blokmi nakoniec začnú bloky údajov po zašifrovaní určitého množstva údajov opakovať. Keď ku opakovaniu dôjde, útočník sa môže pomocou štatistickej analýzy pokúsiť obnoviť pôvodnú podobu prenášaných dát. Pre úspešné vykonanie útoku je preto nutné zachytiť dostatočné množstvo šifrovaných dát.

Útok sa opäť skladá z niekoľkých krokov:

  • Útočník musí byť v pozícii man-in-the-middle a čakať, kým sa obeť prihlási na legitímnu stránku. Po prihlásení na stránku má obeť novo nastavenú session cookie
  • Pripraveným JavaScript kódom začne útočník zasielať požiadavky na server. V každom požiadavku je zahrnutá session cookie obete, ktorú útočník získal v predošlom kroku
  • Nastáva proces zbierania dostatočného množstva dát - rádovo desiatky až stovky GB
  • Na nájdenie opakujúcich sa blokov sa využíva „narodeninový útok“

Napriek tomu, že je pravdepodobnosť tohto útoku v súčanosti nízka, 3DES nie je považovaná za bezpečnú šifru.

Ako by mohlo vyzerať podvrhnutie JavaScriptového kódu útočníkom?
Ako by mohlo vyzerať podvrhnutie JavaScriptového kódu útočníkom?

HEARTBLEED

V roku 2014 bola objavená jedna z najznámejších zraniteľností - Heartbleed. Táto zraniteľnosť sa týkala starších verzií OpenSSL knižnice a umožňovala útočníkovi získať citlivé informácie, ktoré boli uložené v pamäti servera a to vrátane súkromných SSL kľúčov použitých na šifrovanie komunikácie.

Bolo to možné kvôli chybe v doplnku OpenSSL Heartbeat, ktorý mal umožňovať komunikujúcim stranám udržiavať spojenie otvorené a pravidelne si posielať správy, aby sa zabezpečilo, že spojenie je stále aktívne.

Zjednodušená ukážka tejto zraniteľnosti
Zjednodušená ukážka tejto zraniteľnosti

Na opravu tejto zraniteľnosti bolo potrebné aktualizovať OpenSSL na novšiu verziu a taktiež bolo odporúčané nahradiť šifrovacie kľúče či ako preventívne opatrenie zmeniť používateľské heslá na dotknutých stránkach.

Analýza zozbieraných dát

Porovnávanie bolo zamerané na najpopulárnejšie české a slovenské weby. Tak ako v predošlom článku bol použitý ako zdroj dát zoznam najnavštevovanejších domén „Tranco Top 1 Million“, z ktorého boli vyfiltrované české a slovenské domény. Test bol realizovaný na dátach zo dňa 3.4.2023 a prebehol o deň neskôr s nástrojmi testssl.sh a tls-scan.

Podpora SSL/TLS verzií

Výsledky zodpovedajú svetovým trendom, najpoužívanejšiu verziou sa jednoznačne stala verzia TLS 1.2. Pozitívnym faktom je taktiež vzrastajúca podpora verzie TLS 1.3, naopak, viac ako 100 serverov podporuje z dnešného pohľadu až archaické verzie SSL 2.0 a SSL 3.0.

Celková štatistika podporovaných verzií naprieč servermi
Celková štatistika podporovaných verzií naprieč servermi

Najpodporovanejšie šifrovacie sady

Ďalším pozitívnym faktom je, že medzi najpopulárnejšie šifrovacie sady patria algoritmy založené na výmene kľúčov Eliptic Curve Diffie-Hellman Ephemeral (ECDHE) a algoritme RSA.

  • ECDHE-RSA-AES256-GCM-SHA384
  • ECDHE-RSA-AES128-GCM-SHA256
  • ECDHE-RSA-AES128-SHA256
  • ECDHE-RSA-AES256-SHA384
  • ECDHE-RSA-AES256-SHA
  • ECDHE-RSA-AES128-SHA
  • AES-256-GCM
  • AES-128-GCM
  • CHACHA20-POLY1305
  • DHE-RSA-AES256-GCM-SHA384

Vydavatelia certifikátov

Vydavatelia SSL certifikátov sú organizácie, ktoré vydávajú certifikáty pre webové stránky, ktoré zabezpečujú, že údaje prenášané medzi webovou stránkou a používateľom sú šifrované a bezpečné. Existuje mnoho vydavateľov SSL certifikátov a medzi celosvetovo najobľúbenejších patria Let's Encrypt a Cloudflare.

  • CN=R3; O=Let's Encrypt; C=US
  • CN=sni.cloudflaressl.com; O=Cloudflare, Inc.; L=San Francisco; ST=California; C=US
  • CN=*.nameserver.sk
  • CN=*.mediafactory.cz
  • CN=Sectigo RSA Domain Validation Secure Server CA; O=Sectigo Limited; L=Salford; ST=Greater Manchester; C=GB
  • CN=RapidSSL RSA CA 2018; OU=www.digicert.com; O=DigiCert Inc; C=US
  • CN=mns12.farma.gigaserver.cz; OU=SomeOrganizationalUnit; O=SomeOrganization; L=SomeCity; ST=SomeState; C=--
  • CN=Let's Encrypt Authority X3; O=Let's Encrypt; C=US
  • CN=WebSupport ROOT CA; O=WebSupport, s.r.o.; L=Bratislava; ST=Slovakia; C=SK
  • CN=RapidSSL Global TLS RSA4096 SHA256 2022 CA1; O=DigiCert, Inc.; C=US

Heartbleed

V našich výsledkoch sa ukázalo 6 serverov ako zraniteľných na Heartbleed. Spoločnosť Shodan zverejňuje dáta zo skenovania a monitoringu internetu - medzi týmito dátami sa dá aj nájsť počet zraniteľných serverov na túto zraniteľnosť nachádzajúcich sa na Slovensku.

Údaje zo dňa 17.3.2023
Údaje zo dňa 17.3.2023

Záver

V tomto článku sme si ukázali dôležitosť SSL/TLS protokolu a ich správneho nastavenia. V krátkosti sme si predstavili históriu týchto protokolov a vybrali pár najznámejších zraniteľností, ktoré boli objavené. Správne a bezpečné nastavenie SSL šifier nemusí byť jednoduché a musí sa brať ohľad na kompatibilitu pre staršie zariadenia, a aj z toho dôvodu je testovanie týchto zraniteľností či chýb v konfiguráciách súčasťou každého penetračného testu, ktorý vykonávame.