Podívejte se raději na online verzi přednášky, slajdy mohly být aktualizovány nebo doplněny.

Detail přednášky

Prohlížeče postupně skrývají zámeček u šifrovaných HTTPS spojení a to je dobře. No jo, ale proč je to vlastně dobře? Šifrování, HTTPS, „zelené certifikáty“, to je oč tu (po)běží.

Datum a akce

21. listopadu 2019, F5 Solutions Day – Bratislava (délka přednášky 35 minut, 20 slajdů)

Slajdy

Šuplíky se zámkem, ale jen na tom spodním

#1 Jo, je to opravdu tak, zámečky nikoho nezajímají. Na obrázku sice 🔒 chybí, ale zato vidíte, jak by k problému přistoupil hacker – snažil by se systém pochopit a pak využít slabin v návrhu ku prospěchu svému.

Vaše taška 🔒 je prázdná

#2 Tahle přednáška ale není o zámku na šuplíku, ale o tom zámku, který údajně znázorňuje šifrování na Internetu. Ten ale taky nikoho nezajímá, navíc si ho spousta lidí plete s nákupní taškou. Ani se není čemu divit. K čemu vlastně taková „nákupní taška“ (nebo zámeček?) slouží je docela těžké vysvětlit a pochopit.

Not secure přihlášení

#3 Zámeček často reprezentuje šifrované spojení HTTPS, tedy to „něco“, co šifruje přenášená data mezi webovým prohlížečem a serverem a obráceně. Asi se shodneme, že šifrovaného protokolu HTTPS by mělo využívat přihlašování. Na HTTPS by měly být dostupné jak samotné formuláře – aby do prohlížeče dorazily nezměněné – tak adresy, kam se zadaná data odesílají – to aby mizerové nedokázali data odposlechnout. Já takové odposlouchání nešifrovaných spojení běžně ukazuji pomocí routeru WiFi Pineapple, zařízení za pár dolarů. Nezabezpečených přihlašovacích stránek je naštěstí stále ještě dost. Opravdu jsem napsal „naštěstí“? Ehem, pardon, asi překlep.

🔒 https://ib.airbank.cz.smp...

#4 Určitě se shodneme také na tom, že na HTTPS by měly být stránky bank i internetová bankovnictví, jako např. tohle íbé tečka airbank tečka cézet tečka cototamje?

Tohle je adresa phishingové stránky, která se od klientů Air Bank snažila vylákat přihlašovací údaje. I phishingové stránky by měly být na HTTPS, což zní možná trochu nelogicky, ale dejte mi šanci to vysvětlit. Pokud se máme snažit, aby všechny webové stránky byly zabezpečené pomocí HTTPS, tak to znamená, že i podvodné stránky budou HTTPS využívat.

TLS/SSL System with Certificate Transparency (X.509v3 Extension)

#5 A navíc, pokud jsou phishingové stránky na HTTPS, tak se dají najít včas. To umožní systém Certificate Transparency (CT), díky kterému jsou všechny certifikáty zapsány do více CT logů. Účast v Certificate Transparency byla pro většinu certifikačních autorit (CA) nepovinná, nicméně od dubna 2018 Chrome vyžaduje, aby v CT logu byly již všechny nově vydané certifikáty.

Prohlížeč dostupnost certifikátu v logu může zkontrolovat bez ztráty rychlosti načítání stránek např. následovně: před vydáním certifikátu zapíše CA do CT logu tzv. „předcertifikát“ (precertificate), log jako odpověď pošle Signed Certificate Timestamp (SCT), podepsaný čas uložení certifikátu. CA poté SCT přidá do certifikátu a ten konečně vydá žadateli, který ho umístí na server. Prohlížeč poté při každé návštěvě stránky dostane od serveru certifikát i s časem SCT, který může ověřit a pokud je čas např. v budoucnosti, nebo v certifikátu není SCT vůbec (což může znamenat, že certifikát nebyl zalogován), tak může spojení odmítnout. Další možnosti ověření jsou uvedeny na stránce How Certificate Transparency Works a více technických detailů o Certificate Transparency se dozvíte i v RFC 6962.

Identity LIKE 'ib.airbank.cz%'

#6 CT logy jsou z principu veřejné a je možné je prohledávat. K tomu se dá použít např. vyhledávač crt.sh (jakože CeRTificate SearcH), který provozuje certifikační autorita Sectigo (dříve známá jako Comodo CA). Na obrázku je výsledek vyhledávání certifikátů pro domény, které začínají na „ib.airbank.cz“, všimněte si těch několika phishingových adres. Banka tak může podvodné stránky odhalit ihned po vydání certifikátu a může začít jednat. Nemusí čekat, až je na stránky upozorní nějaký klient, stačí prohledávat CT logy a nechat si posílat notifikace.

Chrome 56: Not secure | login.example.com

#7 V minulosti prohlížeče na nebezpečí při používání nešifrovaných stránek nijak neupozorňovaly. Změna přišla v lednu 2017 s vydáním Chrome 56, ten začal jako „Not secure“ (s šedým (i)) označovat stránky s políčkem pro zadání hesla nebo čísla platební karty.

⚠ Not secure | example.com

#8 Aktuální verze Chrome 72 již označuje jako „Not secure“ všechny stránky načtené po nešifrovaném HTTP. Šedé (i) se změní v červený vykřičník ve chvíli, kdy uživatel začne vyplňovat jakékoliv políčko. Ve finále by stránky načtené po HTTP měly být označené červeným ⚠ Not secure rovnou od začátku. K této změně by mohlo dojít už tento rok.

TLS 1.0 & 1.1 ⤵ 🚮

#9 Na jaře roku 2020 odstraní Chrome, Firefox i další browsery podporu pro zastaralé protokoly TLS 1.0 a 1.1 (na serveru je už můžete odstranit dříve, žádný rozumný browser už je nepoužívá, ale pro jistotu se naučte jak si to ověřit) a místo stránky zobrazí chybu NET::ERR_SSL_OBSOLETE_VERSION. Od verze 79 bude Chrome zobrazovat „Not secure“ pro stránky, které se sice načetly po HTTPS, ale pomocí TLS 1.0 nebo 1.1.

🔒 Secure | example.com

#10 Do nedávna prohlížeče zvýrazňovaly zabezpečené stránky zeleným nápisem „Secure“ s ikonou zámku. No jo, ale co takový „pozitivní signál“ vlastně znamená? Rozhodně to neznamená, že by web nijak nezneužil zadané údaje nebo že nemá bezpečnostní chybu.

Hodnocení HTTPS na www.mvcr.cz: F

#11 Dokonce to ani neznamená, že HTTPS na tom webu je bezpečné, jak nám ukazuje třeba Ministerstvo vnitra. Jejich web sice HTTPS umí a prohlížeče by ho tak bývaly označily zeleným zámkem a nápisem Secure, jenže to HTTPS je špatně nastavené a navíc konfigurace serveru obsahuje bezpečnostní chybu. Hodnocení HTTPS na webu MVČR si od renomovaného nástroje SSL Labs vysloužilo známku F (jakože FAIL), tedy nejhorší možnou.

Šedý zámeček místo zeleného

#12 Chrome tedy postupně začal zelený zámeček skrývat. Už to vlastně ani není zelený zámeček, od září roku 2018 je šedý, mnohem méně výrazný.

Žádný zámeček ani https://

#13 Cílový stav bude takový, že zámeček se pro weby na nezabezpečeném HTTP nebude zobrazovat vůbec a nebude se zobrazovat ani protokol https://, protože uživateli také nedává žádnou informaci, která by mu nějak pomohla v rozhodování nebo čemkoliv jiném. Chrome už to nedělá, nezobrazuje ani části domén jako www a m. Pokud chcete vidět protokol i celou doménu, tak si nainstalujte rozšíření Suspicious Site Reporter a zas uvidíte celou URL (a jako bonus dostanete jednoduchou možnost nahlásit podezřelý weby).

HTTPS bude novou normou, HTTP bude výrazně označeno jako nebezpečné. Tedy naprostý opak toho, jak to bylo prezentováno donedávna – HTTPS zvýrazněno, HTTP nic extra.

Procento stránek načtených v Chromu přes HTTPS podle země

#14 Výrobci prohlížečů tyto změny nedělají jen tak náhodně. Mají data o načítání stránek a změny dělají, až když je „trh nasycen“. Ve Spojených státech je cca 90 % stránek načtených po šifrovaném HTTPS, takže „Not secure“ už neuvidí tolik uživatelů a je možné ho zase trochu víc zvýraznit. Kdyby se červené Not secure nasadilo třeba rovnou v roce 2015, tak by ho uživatelé viděli příliš často a to varování by začali úplně ignorovat. Procento domén na HTTPS bude výrazně menší (někde kolem 30 %), spoustu webů ale uživatelé ani nikdy nenavštíví, takže počet stránek lépe vyjadřuje co uživatelé v prohlížeči vlastně vidí.

Procento stránek načtených ve Firefoxu přes HTTPS podle země

#15 Podobnou statistiku z prohlížeče Firefox zveřejňuje i Mozilla. Procenta jsou o něco nižší, ale graf má podobný průběh. Ve Firefoxu se zámeček také mění, podobně jako v Chrome.

Počet certifikátů vydaných autoritou Let's Encrypt za den

#16 Do jisté míry za dnešní stav může i certifikační autorita Let's Encrypt, která vystavuje certifikáty zdarma (a za den jich vystaví přes milionu). Z grafů výše je však patrný nárůst ještě před spuštěním Let's Encrypt. Certifikáty od Let's Encrypt používal např. Portál veřejné správy (v únoru 2019 začali celkem nepochopitelně používat placený EV certifikát, viz níže, za 27490 Kč na dva roky), několik subdomén gov.cz i Ministerstva financí a nedávno na ně přešel i Seznam. Certifikačních autorit poskytujících certifikáty zdarma bude přibývat, nejnovějším přírůstkem je Buypass Go SSL.

EV Excluded Purposes

#17 To se asi vcelku pochopitelně nelíbí prodejcům certifikátů, protože jejich zlatý důl se postupně zavírá. Neštítí se tak nekalých obchodních praktik a lží. Někteří vám budou doslova cpát různé „zelené certifikáty“, „zelený adresní řádek“ a podobné nesmysly, které údajně zvyšují důvěryhodnost webu. Těmi zelenými věcmi myslí tzv. Extended Validation (EV) certifikáty, které vedle zámečku zobrazují i název firmy (ale jen někdy, na mobilech a tabletech ne). Trochu problém je ten, že přímo v pokynech k EV certifikátům je uvedeno, že jejich smyslem není jakkoliv zajistit nebo doložit, že daný web nebo daná firma jsou důvěryhodné.

Šedý zámeček na PayPalu

#18 Někdy své argumenty dokonce podpoří nějakými studiemi, ze kterých vyjde, že lidé by ve velkém váhali nakupovat v e-shopech, které dříve používaly „zelené certifikáty“ a nyní je nemají. Mno, tak za prvé: v Chrome už to opravdu zelené není a za druhé: web PayPalu. Ten se v majoritním prohlížeči Chrome na majoritní platformě Windows (jinde ano) z nějakého důvodu od srpna 2018 neukazoval s názvem firmy, ačkoliv dřív tomu tak bylo. A bylo je jim to jedno, vůbec je to netrápilo, jinak by s tím něco už dávno udělali. A netrápilo je to proto, že to netrápilo a netrápí ani jejich uživatele, ti PayPal používají úplně v klidu dál, EV, ne-EV. V srpnu 2019 PayPal obnovil certifikát a na chvíli se název firmy zase začal ukazovat i v Chrome na Windows. Chvilku poté, v září, vyšla nová verze Chrome 77, která název firmy přesunula z adresního řádku pryč do panelu s informacemi o webu, takže PayPal, Inc. [US] zase na první pohled není vidět, podobně ve Firefoxu od verze 70. Zámečky (ani názvy firmy) nikoho nezajímaj'

Zámeček ve favikoně

#19 Ostatně některé rady týkající se zámečků jsou vůbec skvělé. Banky s oblibou tvrdí něco jako např.:

Před přihlášením se do internetového bankovnictvi vždy zkontrolujte, že v horním řádku prohlížeče je adresa https://online.mbank.cz/cs/Login a symbol visacího zámku, většinou i s popiskem mBank S.A.

Útočník může zámeček strčit třeba místo ikony webu a tím tak docela dobře splnit to, co má uživatel vždy zkontrolovat. Tohle všechno se vyřeší, až se zámečky v prohlížečích nebudou vůbec zobrazovat. Budou naprosto všude a tak nebudou přinášet žádnou novou informaci, takže budou jen zabírat místo. Mimochodem, všimli jste si toho překlepu ve slově „bankovnictvi“?

Shrnutí

#20 HTTPS by mělo být na naprosto každém webu, aby útočník nemohl podstrčit falešné přihlašovací formuláře, změnit stahované programy apod. Nebojte se použít certifikáty zdarma, technicky jsou stejné jako ty placené a navíc mají např. lepší automatizaci vydávání a obnovy (obnova certifikátů není práce pro nás, ale pro stroje). „Zelené“ EV certifikáty jsou vyhozený prachy, uživatele to nezajímá a ani vlastně neví, co mají dělat, když tam název firmy najednou není, nebo když tam není na mobilu, ale na počítači jo, takže všechna doporučení stejně budou ignorovat.

Zámečky z prohlížečů zmizí, takže nemá cenu učit uživatele, aby se jimi jakkoliv řídili (stejně to nedělají, takže v pohodě). Pokud budete chtít vědět, jaké stránky a jak se načítají, tak už dnes stejně musíte použít developer tools, adresnímu řádku se nedá tak úplně věřit už nějaký ten pátek. Podívejte se na History API a metodu replaceState() která umí změnit zobrazenou cestu v adresním řádku, technologie jako např. Signed HTTP Exchanges, která odděluje zdroj obsahu od jeho distributora, HTTP Strict Transport Security, která zajistí interní přesměrování na HTTPS, prohlížečovou magii, která interně přesměruje při nevalidním certifikátu – těchto věcí si v adresním řádku ani nevšimnete.

Pro vyhledávání certifikátů použijte crt.sh a HTTPS si otestujte pomocí SSL Labs. Měli byste mít známku A nebo A+, získat ji není zas tak těžké, ukazuju to v jiné přednášce. Vysvětlení části SSL Labs testu najdete v mém článku o vypnutí TLS 1.0 a 1.1 a pokud vás HTTPS zajímá víc, tak vás rád přivítám na dalším školení HTTPS pro vývojáře a správce (nejbližší termín: termín zatím nevypsán).

Michal Špaček

Michal Špaček

Vyvíjím webové aplikace, zajímá mě jejich bezpečnost. Nebojím se o tom mluvit veřejně, hledám hranice tak, že je posouvám. Chci naučit webové vývojáře stavět bezpečnější a výkonnější weby a aplikace.

Veřejná školení

Zvu vás na následující školení, která pořádám a vedu: