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í.
Naopak, použitie SSL/TLS zabezpečí, že všetky prenášané informácie sú šifrované a nečitateľné pre toho, kto ich zachytí.
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.
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.
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:
- Útočník sa musí dostať medzi klienta a server, aby mohol vykonať útok man-in-the-middle
- Na spojenie medzi klientom a musí byť použitá zraniteľná TLS verzia
- Po vytvorení spojenia medzi klientom a serverom začne útočník vkladať do prenášaných dát vlastný JavaScript kód
- Vložením tohto kódu dôjde ku modifikácii prenášaných dát a vzniku slabých šifrovaných blokov
- 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.
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.
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.
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.
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.
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.
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.